Skip to content

Fix class cast exception, noop meter does not implement incubating api #11934

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 5, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class ApplicationDoubleGaugeBuilder implements DoubleGaugeBuilder {

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

protected ApplicationDoubleGaugeBuilder(
public ApplicationDoubleGaugeBuilder(
io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class ApplicationDoubleHistogramBuilder implements DoubleHistogramBuilder

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

protected ApplicationDoubleHistogramBuilder(
public ApplicationDoubleHistogramBuilder(
io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class ApplicationLongCounterBuilder implements LongCounterBuilder {

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

protected ApplicationLongCounterBuilder(
public ApplicationLongCounterBuilder(
io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class ApplicationLongUpDownCounterBuilder implements LongUpDownCounterBui

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

protected ApplicationLongUpDownCounterBuilder(
public ApplicationLongUpDownCounterBuilder(
io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) {
this.agentBuilder = agentBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,33 @@ dependencies {
}

configurations.configureEach {
if (name == "testRuntimeClasspath" || name == "testCompileClasspath") {
if (name == "testRuntimeClasspath" || name == "testCompileClasspath" || name.startsWith("noopTest")) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api:1.31.0")
}
}
}

testing {
suites {
val noopTest by registering(JvmTestSuite::class) {
dependencies {
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.31.0-alpha")
}

targets {
all {
testTask.configure {
jvmArgs("-Dtesting.exporter.enabled=false")
}
}
}
}
}
}

tasks {
check {
dependsOn(testing.suites)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import application.io.opentelemetry.api.metrics.LongCounterBuilder;
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115;

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

@Override
public LongCounterBuilder counterBuilder(String name) {
return new ApplicationLongCounterBuilder131(agentMeter.counterBuilder(name));
io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) {
return new ApplicationLongCounterBuilder131(builder);
}
return new ApplicationLongCounterBuilder(builder);
}

@Override
public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
return new ApplicationLongUpDownCounterBuilder131(agentMeter.upDownCounterBuilder(name));
io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder =
agentMeter.upDownCounterBuilder(name);
if (builder
instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) {
return new ApplicationLongUpDownCounterBuilder131(builder);
}
return new ApplicationLongUpDownCounterBuilder(builder);
}

@Override
public DoubleHistogramBuilder histogramBuilder(String name) {
return new ApplicationDoubleHistogramBuilder131(agentMeter.histogramBuilder(name));
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
return new ApplicationDoubleHistogramBuilder131(builder);
}
return new ApplicationDoubleHistogramBuilder(builder);
}

@Override
public DoubleGaugeBuilder gaugeBuilder(String name) {
return new ApplicationDoubleGaugeBuilder131(agentMeter.gaugeBuilder(name));
io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) {
return new ApplicationDoubleGaugeBuilder131(builder);
}
return new ApplicationDoubleGaugeBuilder(builder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics;

import static org.assertj.core.api.Assertions.assertThat;

import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

class NoopTest {
@RegisterExtension
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();

@Test
void noopInstance() {
Meter meter = testing.getOpenTelemetry().getMeter("test");

LongCounterBuilder counterBuilder = meter.counterBuilder("test");
assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class);

LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test");
assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class);

DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test");
assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class);

DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test");
assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ dependencies {
}

configurations.configureEach {
if (name.endsWith("testRuntimeClasspath", true) || name.endsWith("testCompileClasspath", true)) {
if (name.endsWith("testRuntimeClasspath", true) ||
name.endsWith("testCompileClasspath", true) ||
name.startsWith("noopTest")) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api:1.32.0")
}
Expand All @@ -29,6 +31,19 @@ testing {
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
}
}
val noopTest by registering(JvmTestSuite::class) {
dependencies {
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
}

targets {
all {
testTask.configure {
jvmArgs("-Dtesting.exporter.enabled=false")
}
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics;

import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.incubator.metrics.ApplicationMeter131;

class ApplicationMeter132Incubator extends ApplicationMeter131 {
Expand All @@ -19,6 +20,10 @@ class ApplicationMeter132Incubator extends ApplicationMeter131 {

@Override
public DoubleHistogramBuilder histogramBuilder(String name) {
return new ApplicationDoubleHistogramBuilder132Incubator(agentMeter.histogramBuilder(name));
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
return new ApplicationDoubleHistogramBuilder132Incubator(builder);
}
return new ApplicationDoubleHistogramBuilder(builder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics;

import static org.assertj.core.api.Assertions.assertThat;

import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder;
import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

class NoopTest {
@RegisterExtension
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();

@Test
void noopInstance() {
Meter meter = testing.getOpenTelemetry().getMeter("test");

LongCounterBuilder counterBuilder = meter.counterBuilder("test");
assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class);

LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test");
assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class);

DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test");
assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class);

DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test");
assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ configurations.configureEach {
force("io.opentelemetry:opentelemetry-api:1.37.0")
force("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
}
if (name.startsWith("incubatorTest")) {
if (name.startsWith("incubatorTest") || name.startsWith("noopTest")) {
resolutionStrategy {
force("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
}
Expand All @@ -47,6 +47,19 @@ testing {
implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
}
}
val noopTest by registering(JvmTestSuite::class) {
dependencies {
implementation("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
}

targets {
all {
testTask.configure {
jvmArgs("-Dtesting.exporter.enabled=false")
}
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;

import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;

class ApplicationMeter137 extends BaseApplicationMeter137 {

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

@Override
public DoubleGaugeBuilder gaugeBuilder(String name) {
return new ApplicationDoubleGaugeBuilder137(agentMeter.gaugeBuilder(name));
io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) {
return new ApplicationDoubleGaugeBuilder137(builder);
}
return new ApplicationDoubleGaugeBuilder(builder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
import application.io.opentelemetry.api.metrics.LongCounterBuilder;
import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115;

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

@Override
public LongCounterBuilder counterBuilder(String name) {
return new ApplicationLongCounterBuilder137(agentMeter.counterBuilder(name));
io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) {
return new ApplicationLongCounterBuilder137(builder);
}
return new ApplicationLongCounterBuilder(builder);
}

@Override
public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
return new ApplicationLongUpDownCounterBuilder137(agentMeter.upDownCounterBuilder(name));
io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder =
agentMeter.upDownCounterBuilder(name);
if (builder
instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) {
return new ApplicationLongUpDownCounterBuilder137(builder);
}
return new ApplicationLongUpDownCounterBuilder(builder);
}

@Override
public DoubleHistogramBuilder histogramBuilder(String name) {
return new ApplicationDoubleHistogramBuilder137(agentMeter.histogramBuilder(name));
io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name);
if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) {
return new ApplicationDoubleHistogramBuilder137(builder);
}
return new ApplicationDoubleHistogramBuilder(builder);
}
}
Loading
Loading