Skip to content

Commit 233962c

Browse files
committed
updates
1 parent d444fec commit 233962c

8 files changed

Lines changed: 41 additions & 16 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
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,7 +43,7 @@ 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) {
45-
Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback =
46+
Consumer<ObservableDoubleMeasurement> callback =
4647
agentMeasurement ->
4748
applicationCallback.accept(
4849
new ApplicationObservableDoubleMeasurement(agentMeasurement));

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

Lines changed: 2 additions & 1 deletion
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,7 +43,7 @@ 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) {
45-
Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback =
46+
Consumer<ObservableDoubleMeasurement> callback =
4647
agentMeasurement ->
4748
applicationCallback.accept(
4849
new ApplicationObservableDoubleMeasurement(agentMeasurement));

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

Lines changed: 2 additions & 1 deletion
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,7 +43,7 @@ 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) {
45-
Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback =
46+
Consumer<ObservableDoubleMeasurement> callback =
4647
agentMeasurement ->
4748
applicationCallback.accept(
4849
new ApplicationObservableDoubleMeasurement(agentMeasurement));

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

Lines changed: 2 additions & 1 deletion
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,7 +48,7 @@ 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) {
50-
Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback =
51+
Consumer<ObservableLongMeasurement> callback =
5152
agentMeasurement ->
5253
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
5354
return new ApplicationObservableLongCounter(

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

Lines changed: 2 additions & 1 deletion
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,7 +38,7 @@ 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) {
40-
Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback =
41+
Consumer<ObservableLongMeasurement> callback =
4142
agentMeasurement ->
4243
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
4344
return new ApplicationObservableLongGauge(

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

Lines changed: 2 additions & 1 deletion
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,7 +48,7 @@ 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) {
50-
Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback =
51+
Consumer<ObservableLongMeasurement> callback =
5152
agentMeasurement ->
5253
applicationCallback.accept(new ApplicationObservableLongMeasurement(agentMeasurement));
5354
return new ApplicationObservableLongUpDownCounter(

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

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ public final class CallbackAnchor {
3939

4040
// Anchors callbacks to this class's lifecycle. Since this class is injected as a helper into each
4141
// application class loader, callbacks are naturally tied to their class loader's lifecycle.
42-
private static final Set<Object> callbacks = ConcurrentHashMap.newKeySet();
42+
// Use identity semantics so unusual equals/hashCode implementations don't collapse distinct
43+
// callbacks into the same entry.
44+
private static final Set<IdentityKey> callbacks = ConcurrentHashMap.newKeySet();
4345

4446
public static <T, R extends AutoCloseable> R anchor(
4547
Function<Consumer<T>, R> buildFn, Consumer<T> callback) {
46-
callbacks.add(callback);
48+
callbacks.add(new IdentityKey(callback));
4749
WeakRefConsumer<T> weak = new WeakRefConsumer<>(new WeakReference<>(callback));
4850
R instrument = buildFn.apply(weak);
4951
weak.closeWhenCollected(instrument);
@@ -52,15 +54,34 @@ public static <T, R extends AutoCloseable> R anchor(
5254

5355
public static <R extends AutoCloseable> R anchorBatch(
5456
Function<Runnable, R> buildFn, Runnable callback) {
55-
callbacks.add(callback);
57+
callbacks.add(new IdentityKey(callback));
5658
WeakRefRunnable weak = new WeakRefRunnable(new WeakReference<>(callback));
5759
R instrument = buildFn.apply(weak);
5860
weak.closeWhenCollected(instrument);
5961
return instrument;
6062
}
6163

6264
public static void remove(Object callback) {
63-
callbacks.remove(callback);
65+
callbacks.remove(new IdentityKey(callback));
66+
}
67+
68+
private static final class IdentityKey {
69+
70+
private final Object callback;
71+
72+
private IdentityKey(Object callback) {
73+
this.callback = callback;
74+
}
75+
76+
@Override
77+
public boolean equals(Object other) {
78+
return other instanceof IdentityKey && callback == ((IdentityKey) other).callback;
79+
}
80+
81+
@Override
82+
public int hashCode() {
83+
return System.identityHashCode(callback);
84+
}
6485
}
6586

6687
private CallbackAnchor() {}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/CallbackGcCloseTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
99
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
1010

11+
import io.opentelemetry.api.GlobalOpenTelemetry;
1112
import io.opentelemetry.api.common.Attributes;
1213
import io.opentelemetry.api.metrics.Meter;
14+
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
1315
import io.opentelemetry.instrumentation.test.utils.GcUtils;
1416
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1517
import java.lang.ref.WeakReference;
@@ -64,11 +66,7 @@ void instrumentClosedWhenClassLoaderCollected() throws Exception {
6466
// 1. Build a child-first URLClassLoader that loads its own copy of the OTel API.
6567
// The agent will instrument GlobalOpenTelemetry in this CL and inject all bridge helpers
6668
// (including CallbackAnchor with its own static callbacks list).
67-
URL apiJar =
68-
io.opentelemetry.api.GlobalOpenTelemetry.class
69-
.getProtectionDomain()
70-
.getCodeSource()
71-
.getLocation();
69+
URL apiJar = GlobalOpenTelemetry.class.getProtectionDomain().getCodeSource().getLocation();
7270
URL testClasses = GaugeRegistrar.class.getProtectionDomain().getCodeSource().getLocation();
7371

7472
URLClassLoader childCl =
@@ -120,7 +118,7 @@ void instrumentClosedWhenClassLoaderCollected() throws Exception {
120118
*/
121119
@Test
122120
void instrumentContinuesWhileCallbackAnchored() {
123-
Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback =
121+
Consumer<ObservableLongMeasurement> callback =
124122
result -> result.record(99, Attributes.of(stringKey("key"), "value"));
125123

126124
meter.gaugeBuilder("test.gc.alive").ofLongs().buildWithCallback(callback);

0 commit comments

Comments
 (0)