Skip to content

Commit 6098ba7

Browse files
authored
[low-priority] Close bridged instruments when GC'd (#16219)
1 parent a2f70e6 commit 6098ba7

File tree

22 files changed

+685
-33
lines changed

22 files changed

+685
-33
lines changed

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleCounterBuilder.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
10+
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationDoubleCounterBuilder
@@ -42,11 +43,13 @@ public application.io.opentelemetry.api.metrics.DoubleCounter build() {
4243
public application.io.opentelemetry.api.metrics.ObservableDoubleCounter buildWithCallback(
4344
Consumer<application.io.opentelemetry.api.metrics.ObservableDoubleMeasurement>
4445
applicationCallback) {
46+
Consumer<ObservableDoubleMeasurement> callback =
47+
agentMeasurement ->
48+
applicationCallback.accept(
49+
new ApplicationObservableDoubleMeasurement(agentMeasurement));
4550
return new ApplicationObservableDoubleCounter(
46-
agentBuilder.buildWithCallback(
47-
agentMeasurement ->
48-
applicationCallback.accept(
49-
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
51+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
52+
CallbackAnchor.releaseOnClose(callback));
5053
}
5154

5255
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
10+
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationDoubleGaugeBuilder
@@ -42,11 +43,13 @@ public application.io.opentelemetry.api.metrics.LongGaugeBuilder ofLongs() {
4243
public application.io.opentelemetry.api.metrics.ObservableDoubleGauge buildWithCallback(
4344
Consumer<application.io.opentelemetry.api.metrics.ObservableDoubleMeasurement>
4445
applicationCallback) {
46+
Consumer<ObservableDoubleMeasurement> callback =
47+
agentMeasurement ->
48+
applicationCallback.accept(
49+
new ApplicationObservableDoubleMeasurement(agentMeasurement));
4550
return new ApplicationObservableDoubleGauge(
46-
agentBuilder.buildWithCallback(
47-
agentMeasurement ->
48-
applicationCallback.accept(
49-
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
51+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
52+
CallbackAnchor.releaseOnClose(callback));
5053
}
5154

5255
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleUpDownCounterBuilder.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
10+
import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationDoubleUpDownCounterBuilder
@@ -42,11 +43,13 @@ public application.io.opentelemetry.api.metrics.DoubleUpDownCounter build() {
4243
public application.io.opentelemetry.api.metrics.ObservableDoubleUpDownCounter buildWithCallback(
4344
Consumer<application.io.opentelemetry.api.metrics.ObservableDoubleMeasurement>
4445
applicationCallback) {
46+
Consumer<ObservableDoubleMeasurement> callback =
47+
agentMeasurement ->
48+
applicationCallback.accept(
49+
new ApplicationObservableDoubleMeasurement(agentMeasurement));
4550
return new ApplicationObservableDoubleUpDownCounter(
46-
agentBuilder.buildWithCallback(
47-
agentMeasurement ->
48-
applicationCallback.accept(
49-
new ApplicationObservableDoubleMeasurement(agentMeasurement))));
51+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
52+
CallbackAnchor.releaseOnClose(callback));
5053
}
5154

5255
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.LongCounterBuilder;
10+
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationLongCounterBuilder
@@ -47,11 +48,12 @@ public application.io.opentelemetry.api.metrics.LongCounter build() {
4748
public application.io.opentelemetry.api.metrics.ObservableLongCounter buildWithCallback(
4849
Consumer<application.io.opentelemetry.api.metrics.ObservableLongMeasurement>
4950
applicationCallback) {
51+
Consumer<ObservableLongMeasurement> callback =
52+
agentMeasurement ->
53+
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
5054
return new ApplicationObservableLongCounter(
51-
agentBuilder.buildWithCallback(
52-
agentMeasurement ->
53-
applicationCallback.accept(
54-
new ApplicationObservableLongMeasurement(agentMeasurement))));
55+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
56+
CallbackAnchor.releaseOnClose(callback));
5557
}
5658

5759
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongGaugeBuilder.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.LongGaugeBuilder;
10+
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationLongGaugeBuilder
@@ -37,11 +38,12 @@ public application.io.opentelemetry.api.metrics.LongGaugeBuilder setUnit(String
3738
public application.io.opentelemetry.api.metrics.ObservableLongGauge buildWithCallback(
3839
Consumer<application.io.opentelemetry.api.metrics.ObservableLongMeasurement>
3940
applicationCallback) {
41+
Consumer<ObservableLongMeasurement> callback =
42+
agentMeasurement ->
43+
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
4044
return new ApplicationObservableLongGauge(
41-
agentBuilder.buildWithCallback(
42-
agentMeasurement ->
43-
applicationCallback.accept(
44-
new ApplicationObservableLongMeasurement(agentMeasurement))));
45+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
46+
CallbackAnchor.releaseOnClose(callback));
4547
}
4648

4749
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
10+
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
1011
import java.util.function.Consumer;
1112

1213
public class ApplicationLongUpDownCounterBuilder
@@ -47,11 +48,12 @@ public application.io.opentelemetry.api.metrics.LongUpDownCounter build() {
4748
public application.io.opentelemetry.api.metrics.ObservableLongUpDownCounter buildWithCallback(
4849
Consumer<application.io.opentelemetry.api.metrics.ObservableLongMeasurement>
4950
applicationCallback) {
51+
Consumer<ObservableLongMeasurement> callback =
52+
agentMeasurement ->
53+
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
5054
return new ApplicationObservableLongUpDownCounter(
51-
agentBuilder.buildWithCallback(
52-
agentMeasurement ->
53-
applicationCallback.accept(
54-
new ApplicationObservableLongMeasurement(agentMeasurement))));
55+
CallbackAnchor.anchor(agentBuilder::buildWithCallback, callback),
56+
CallbackAnchor.releaseOnClose(callback));
5557
}
5658

5759
// added in 1.15.0

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationObservableDoubleCounter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ public final class ApplicationObservableDoubleCounter
1111
implements application.io.opentelemetry.api.metrics.ObservableDoubleCounter {
1212

1313
private final ObservableDoubleCounter agentCounter;
14+
private final Runnable onClose;
1415

15-
public ApplicationObservableDoubleCounter(ObservableDoubleCounter agentCounter) {
16+
public ApplicationObservableDoubleCounter(
17+
ObservableDoubleCounter agentCounter, Runnable onClose) {
1618
this.agentCounter = agentCounter;
19+
this.onClose = onClose;
1720
}
1821

1922
// not adding @Override because this method was introduced in 1.12
2023
@SuppressWarnings("unused")
2124
public void close() {
2225
agentCounter.close();
26+
onClose.run();
2327
}
2428
}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationObservableDoubleGauge.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ public final class ApplicationObservableDoubleGauge
1111
implements application.io.opentelemetry.api.metrics.ObservableDoubleGauge {
1212

1313
private final ObservableDoubleGauge agentGauge;
14+
private final Runnable onClose;
1415

15-
public ApplicationObservableDoubleGauge(ObservableDoubleGauge agentGauge) {
16+
public ApplicationObservableDoubleGauge(ObservableDoubleGauge agentGauge, Runnable onClose) {
1617
this.agentGauge = agentGauge;
18+
this.onClose = onClose;
1719
}
1820

1921
// not adding @Override because this method was introduced in 1.12
2022
@SuppressWarnings("unused")
2123
public void close() {
2224
agentGauge.close();
25+
onClose.run();
2326
}
2427
}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationObservableDoubleUpDownCounter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,18 @@ public final class ApplicationObservableDoubleUpDownCounter
1111
implements application.io.opentelemetry.api.metrics.ObservableDoubleUpDownCounter {
1212

1313
private final ObservableDoubleUpDownCounter agentUpDownCounter;
14+
private final Runnable onClose;
1415

1516
public ApplicationObservableDoubleUpDownCounter(
16-
ObservableDoubleUpDownCounter agentUpDownCounter) {
17+
ObservableDoubleUpDownCounter agentUpDownCounter, Runnable onClose) {
1718
this.agentUpDownCounter = agentUpDownCounter;
19+
this.onClose = onClose;
1820
}
1921

2022
// not adding @Override because this method was introduced in 1.12
2123
@SuppressWarnings("unused")
2224
public void close() {
2325
agentUpDownCounter.close();
26+
onClose.run();
2427
}
2528
}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationObservableLongCounter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ public final class ApplicationObservableLongCounter
1111
implements application.io.opentelemetry.api.metrics.ObservableLongCounter {
1212

1313
private final ObservableLongCounter agentCounter;
14+
private final Runnable onClose;
1415

15-
public ApplicationObservableLongCounter(ObservableLongCounter agentCounter) {
16+
public ApplicationObservableLongCounter(ObservableLongCounter agentCounter, Runnable onClose) {
1617
this.agentCounter = agentCounter;
18+
this.onClose = onClose;
1719
}
1820

1921
// not adding @Override because this method was introduced in 1.12
2022
@SuppressWarnings("unused")
2123
public void close() {
2224
agentCounter.close();
25+
onClose.run();
2326
}
2427
}

0 commit comments

Comments
 (0)