Skip to content

Commit ade7c80

Browse files
authored
Fix class cast exception, noop meter does not implement incubating api (#11934)
1 parent 7ecdb79 commit ade7c80

File tree

19 files changed

+338
-24
lines changed

19 files changed

+338
-24
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class ApplicationDoubleGaugeBuilder implements DoubleGaugeBuilder {
1616

1717
private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
1818

19-
protected ApplicationDoubleGaugeBuilder(
19+
public ApplicationDoubleGaugeBuilder(
2020
io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
2121
this.agentBuilder = agentBuilder;
2222
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ApplicationDoubleHistogramBuilder implements DoubleHistogramBuilder
1414

1515
private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
1616

17-
protected ApplicationDoubleHistogramBuilder(
17+
public ApplicationDoubleHistogramBuilder(
1818
io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
1919
this.agentBuilder = agentBuilder;
2020
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ApplicationLongCounterBuilder implements LongCounterBuilder {
1717

1818
private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder;
1919

20-
protected ApplicationLongCounterBuilder(
20+
public ApplicationLongCounterBuilder(
2121
io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
2222
this.agentBuilder = agentBuilder;
2323
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ApplicationLongUpDownCounterBuilder implements LongUpDownCounterBui
1717

1818
private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder;
1919

20-
protected ApplicationLongUpDownCounterBuilder(
20+
public ApplicationLongUpDownCounterBuilder(
2121
io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) {
2222
this.agentBuilder = agentBuilder;
2323
}

instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/build.gradle.kts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,33 @@ dependencies {
1616
}
1717

1818
configurations.configureEach {
19-
if (name == "testRuntimeClasspath" || name == "testCompileClasspath") {
19+
if (name == "testRuntimeClasspath" || name == "testCompileClasspath" || name.startsWith("noopTest")) {
2020
resolutionStrategy {
2121
force("io.opentelemetry:opentelemetry-api:1.31.0")
2222
}
2323
}
2424
}
25+
26+
testing {
27+
suites {
28+
val noopTest by registering(JvmTestSuite::class) {
29+
dependencies {
30+
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.31.0-alpha")
31+
}
32+
33+
targets {
34+
all {
35+
testTask.configure {
36+
jvmArgs("-Dtesting.exporter.enabled=false")
37+
}
38+
}
39+
}
40+
}
41+
}
42+
}
43+
44+
tasks {
45+
check {
46+
dependsOn(testing.suites)
47+
}
48+
}

instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/incubator/metrics/ApplicationMeter131.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
1010
import application.io.opentelemetry.api.metrics.LongCounterBuilder;
1111
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
12+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
13+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
14+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
15+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
1216
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115;
1317

1418
public class ApplicationMeter131 extends ApplicationMeter115 {
@@ -22,21 +26,39 @@ protected ApplicationMeter131(io.opentelemetry.api.metrics.Meter agentMeter) {
2226

2327
@Override
2428
public LongCounterBuilder counterBuilder(String name) {
25-
return new ApplicationLongCounterBuilder131(agentMeter.counterBuilder(name));
29+
io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name);
30+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) {
31+
return new ApplicationLongCounterBuilder131(builder);
32+
}
33+
return new ApplicationLongCounterBuilder(builder);
2634
}
2735

2836
@Override
2937
public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
30-
return new ApplicationLongUpDownCounterBuilder131(agentMeter.upDownCounterBuilder(name));
38+
io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder =
39+
agentMeter.upDownCounterBuilder(name);
40+
if (builder
41+
instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) {
42+
return new ApplicationLongUpDownCounterBuilder131(builder);
43+
}
44+
return new ApplicationLongUpDownCounterBuilder(builder);
3145
}
3246

3347
@Override
3448
public DoubleHistogramBuilder histogramBuilder(String name) {
35-
return new ApplicationDoubleHistogramBuilder131(agentMeter.histogramBuilder(name));
49+
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
50+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
51+
return new ApplicationDoubleHistogramBuilder131(builder);
52+
}
53+
return new ApplicationDoubleHistogramBuilder(builder);
3654
}
3755

3856
@Override
3957
public DoubleGaugeBuilder gaugeBuilder(String name) {
40-
return new ApplicationDoubleGaugeBuilder131(agentMeter.gaugeBuilder(name));
58+
io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name);
59+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) {
60+
return new ApplicationDoubleGaugeBuilder131(builder);
61+
}
62+
return new ApplicationDoubleGaugeBuilder(builder);
4163
}
4264
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
11+
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
12+
import io.opentelemetry.api.metrics.LongCounterBuilder;
13+
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
14+
import io.opentelemetry.api.metrics.Meter;
15+
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
16+
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
17+
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
18+
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
19+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
20+
import org.junit.jupiter.api.Test;
21+
import org.junit.jupiter.api.extension.RegisterExtension;
22+
23+
class NoopTest {
24+
@RegisterExtension
25+
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
26+
27+
@Test
28+
void noopInstance() {
29+
Meter meter = testing.getOpenTelemetry().getMeter("test");
30+
31+
LongCounterBuilder counterBuilder = meter.counterBuilder("test");
32+
assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class);
33+
34+
LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test");
35+
assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class);
36+
37+
DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test");
38+
assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class);
39+
40+
DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test");
41+
assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class);
42+
}
43+
}

instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/build.gradle.kts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ dependencies {
1515
}
1616

1717
configurations.configureEach {
18-
if (name.endsWith("testRuntimeClasspath", true) || name.endsWith("testCompileClasspath", true)) {
18+
if (name.endsWith("testRuntimeClasspath", true) ||
19+
name.endsWith("testCompileClasspath", true) ||
20+
name.startsWith("noopTest")) {
1921
resolutionStrategy {
2022
force("io.opentelemetry:opentelemetry-api:1.32.0")
2123
}
@@ -29,6 +31,19 @@ testing {
2931
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
3032
}
3133
}
34+
val noopTest by registering(JvmTestSuite::class) {
35+
dependencies {
36+
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
37+
}
38+
39+
targets {
40+
all {
41+
testTask.configure {
42+
jvmArgs("-Dtesting.exporter.enabled=false")
43+
}
44+
}
45+
}
46+
}
3247
}
3348
}
3449

instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationMeter132Incubator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics;
77

88
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
9+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
910
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.incubator.metrics.ApplicationMeter131;
1011

1112
class ApplicationMeter132Incubator extends ApplicationMeter131 {
@@ -19,6 +20,10 @@ class ApplicationMeter132Incubator extends ApplicationMeter131 {
1920

2021
@Override
2122
public DoubleHistogramBuilder histogramBuilder(String name) {
22-
return new ApplicationDoubleHistogramBuilder132Incubator(agentMeter.histogramBuilder(name));
23+
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
24+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
25+
return new ApplicationDoubleHistogramBuilder132Incubator(builder);
26+
}
27+
return new ApplicationDoubleHistogramBuilder(builder);
2328
}
2429
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
11+
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
12+
import io.opentelemetry.api.metrics.LongCounterBuilder;
13+
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
14+
import io.opentelemetry.api.metrics.Meter;
15+
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
16+
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
17+
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
18+
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
19+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
20+
import org.junit.jupiter.api.Test;
21+
import org.junit.jupiter.api.extension.RegisterExtension;
22+
23+
class NoopTest {
24+
@RegisterExtension
25+
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
26+
27+
@Test
28+
void noopInstance() {
29+
Meter meter = testing.getOpenTelemetry().getMeter("test");
30+
31+
LongCounterBuilder counterBuilder = meter.counterBuilder("test");
32+
assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class);
33+
34+
LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test");
35+
assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class);
36+
37+
DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test");
38+
assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class);
39+
40+
DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test");
41+
assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class);
42+
}
43+
}

instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/build.gradle.kts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ configurations.configureEach {
2121
force("io.opentelemetry:opentelemetry-api:1.37.0")
2222
force("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
2323
}
24-
if (name.startsWith("incubatorTest")) {
24+
if (name.startsWith("incubatorTest") || name.startsWith("noopTest")) {
2525
resolutionStrategy {
2626
force("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
2727
}
@@ -47,6 +47,19 @@ testing {
4747
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
4848
}
4949
}
50+
val noopTest by registering(JvmTestSuite::class) {
51+
dependencies {
52+
implementation("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
53+
}
54+
55+
targets {
56+
all {
57+
testTask.configure {
58+
jvmArgs("-Dtesting.exporter.enabled=false")
59+
}
60+
}
61+
}
62+
}
5063
}
5164
}
5265

instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
77

88
import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder;
9+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
910

1011
class ApplicationMeter137 extends BaseApplicationMeter137 {
1112

@@ -18,6 +19,10 @@ protected ApplicationMeter137(io.opentelemetry.api.metrics.Meter agentMeter) {
1819

1920
@Override
2021
public DoubleGaugeBuilder gaugeBuilder(String name) {
21-
return new ApplicationDoubleGaugeBuilder137(agentMeter.gaugeBuilder(name));
22+
io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name);
23+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) {
24+
return new ApplicationDoubleGaugeBuilder137(builder);
25+
}
26+
return new ApplicationDoubleGaugeBuilder(builder);
2227
}
2328
}

instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/BaseApplicationMeter137.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
99
import application.io.opentelemetry.api.metrics.LongCounterBuilder;
1010
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
11+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
12+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
13+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
1114
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115;
1215

1316
// used by both 1.37 and 1.38
@@ -22,16 +25,30 @@ protected BaseApplicationMeter137(io.opentelemetry.api.metrics.Meter agentMeter)
2225

2326
@Override
2427
public LongCounterBuilder counterBuilder(String name) {
25-
return new ApplicationLongCounterBuilder137(agentMeter.counterBuilder(name));
28+
io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name);
29+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) {
30+
return new ApplicationLongCounterBuilder137(builder);
31+
}
32+
return new ApplicationLongCounterBuilder(builder);
2633
}
2734

2835
@Override
2936
public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
30-
return new ApplicationLongUpDownCounterBuilder137(agentMeter.upDownCounterBuilder(name));
37+
io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder =
38+
agentMeter.upDownCounterBuilder(name);
39+
if (builder
40+
instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) {
41+
return new ApplicationLongUpDownCounterBuilder137(builder);
42+
}
43+
return new ApplicationLongUpDownCounterBuilder(builder);
3144
}
3245

3346
@Override
3447
public DoubleHistogramBuilder histogramBuilder(String name) {
35-
return new ApplicationDoubleHistogramBuilder137(agentMeter.histogramBuilder(name));
48+
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
49+
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
50+
return new ApplicationDoubleHistogramBuilder137(builder);
51+
}
52+
return new ApplicationDoubleHistogramBuilder(builder);
3653
}
3754
}

0 commit comments

Comments
 (0)