Skip to content

Commit 35a14b0

Browse files
authored
⬆️ Upgrade otel 1.11.0 (#360)
* ⬆️ upgrade otel and handle compile errors for otel java extensions * 🐛 remove usage of ClientSpan API * 🐛 remove usage of internal API * ♻️ disable metrics exporter for instrumentation test suite * ✅ treat compiler warnigns as erros in main source sets * ✅ add back in assertions about queueSize and processedSpans
1 parent edc452c commit 35a14b0

File tree

13 files changed

+51
-47
lines changed

13 files changed

+51
-47
lines changed

build.gradle.kts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ allprojects {
1515
targetCompatibility = JavaVersion.VERSION_1_8
1616
}
1717

18+
tasks.compileJava {
19+
options.compilerArgs.add("-Werror")
20+
}
21+
22+
1823
tasks.withType<JavaCompile> {
1924
options.compilerArgs.add("-Xlint:unchecked")
2025
options.isDeprecation = true
@@ -34,11 +39,11 @@ subprojects {
3439
extra.set("versions", mapOf(
3540
// when updating these values, some values must also be updated in buildSrc as this map
3641
// cannot be accessed there
37-
"opentelemetry" to "1.10.1",
42+
"opentelemetry" to "1.11.0",
3843
"opentelemetry_proto" to "0.11.0-alpha",
39-
"opentelemetry_java_agent" to "1.10.1-alpha",
40-
"opentelemetry_java_agent_all" to "1.10.1",
41-
"opentelemetry_gradle_plugin" to "1.10.1-alpha",
44+
"opentelemetry_java_agent" to "1.11.0-alpha",
45+
"opentelemetry_java_agent_all" to "1.11.0",
46+
"opentelemetry_gradle_plugin" to "1.11.0-alpha",
4247
"byte_buddy" to "1.12.6",
4348
"slf4j" to "1.7.32"
4449
))

buildSrc/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ repositories {
2727
dependencies {
2828
implementation(gradleApi())
2929
implementation(localGroovy())
30-
val otelInstrumentationVersion = "1.10.1-alpha"
30+
val otelInstrumentationVersion = "1.11.0-alpha"
3131
implementation("io.opentelemetry.javaagent:opentelemetry-muzzle:$otelInstrumentationVersion")
3232
implementation("io.opentelemetry.instrumentation.muzzle-generation:io.opentelemetry.instrumentation.muzzle-generation.gradle.plugin:$otelInstrumentationVersion")
3333
implementation("io.opentelemetry.instrumentation.muzzle-check:io.opentelemetry.instrumentation.muzzle-check.gradle.plugin:$otelInstrumentationVersion")

instrumentation/apache-httpasyncclient-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpasyncclient/ApacheAsyncClientInstrumentationModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.auto.service.AutoService;
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
30-
import io.opentelemetry.instrumentation.api.tracer.ClientSpan;
3130
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
3231
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
3332
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -173,7 +172,7 @@ public HttpRequest generateRequest() throws IOException, HttpException {
173172
Object getContextResult = getContext.invoke(wrappedFutureCallback);
174173
if (getContextResult instanceof Context) {
175174
Context context = (Context) getContextResult;
176-
Span clientSpan = ClientSpan.fromContextOrNull(context);
175+
Span clientSpan = Span.fromContextOrNull(context);
177176
bodyCaptureDelegatingCallback.clientContext = context;
178177
ApacheHttpClientUtils.traceRequest(clientSpan, request);
179178
}

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import io.netty.handler.codec.http.LastHttpContent;
2727
import io.netty.util.Attribute;
2828
import io.opentelemetry.api.trace.Span;
29+
import io.opentelemetry.api.trace.StatusCode;
2930
import io.opentelemetry.context.Context;
3031
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyClientSingletons;
@@ -100,9 +100,9 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
100100
}
101101
if (msg instanceof HttpResponse) {
102102
HttpResponse httpResponse = (HttpResponse) msg;
103-
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, httpResponse.getStatus().code());
104-
span.setStatus(
105-
HttpStatusConverter.CLIENT.statusFromHttpStatus(httpResponse.getStatus().code()));
103+
int code = httpResponse.getStatus().code();
104+
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code);
105+
span.setStatus(code >= 100 && code < 400 ? StatusCode.UNSET : StatusCode.ERROR);
106106
}
107107
if (msg instanceof LastHttpContent) {
108108
span.end();

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import io.netty.handler.codec.http.LastHttpContent;
2727
import io.netty.util.Attribute;
2828
import io.opentelemetry.api.trace.Span;
29+
import io.opentelemetry.api.trace.StatusCode;
2930
import io.opentelemetry.context.Context;
3031
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyServerSingletons;
@@ -99,9 +99,9 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) {
9999
}
100100
if (msg instanceof HttpResponse) {
101101
HttpResponse httpResponse = (HttpResponse) msg;
102-
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, httpResponse.getStatus().code());
103-
span.setStatus(
104-
HttpStatusConverter.SERVER.statusFromHttpStatus(httpResponse.getStatus().code()));
102+
int code = httpResponse.getStatus().code();
103+
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code);
104+
span.setStatus(code >= 100 && code < 500 ? StatusCode.UNSET : StatusCode.ERROR);
105105
}
106106
if (msg instanceof LastHttpContent) {
107107
span.end();

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import io.netty.handler.codec.http.LastHttpContent;
2727
import io.netty.util.Attribute;
2828
import io.opentelemetry.api.trace.Span;
29+
import io.opentelemetry.api.trace.StatusCode;
2930
import io.opentelemetry.context.Context;
3031
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons;
@@ -100,9 +100,9 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
100100
}
101101
if (msg instanceof HttpResponse) {
102102
HttpResponse httpResponse = (HttpResponse) msg;
103-
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, httpResponse.getStatus().code());
104-
span.setStatus(
105-
HttpStatusConverter.CLIENT.statusFromHttpStatus(httpResponse.getStatus().code()));
103+
int code = httpResponse.status().code();
104+
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code);
105+
span.setStatus(code >= 100 && code < 400 ? StatusCode.UNSET : StatusCode.ERROR);
106106
}
107107
if (msg instanceof LastHttpContent) {
108108
span.end();

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import io.netty.handler.codec.http.LastHttpContent;
2727
import io.netty.util.Attribute;
2828
import io.opentelemetry.api.trace.Span;
29+
import io.opentelemetry.api.trace.StatusCode;
2930
import io.opentelemetry.context.Context;
3031
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons;
@@ -99,8 +99,9 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) {
9999
}
100100
if (msg instanceof HttpResponse) {
101101
HttpResponse httpResponse = (HttpResponse) msg;
102-
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, httpResponse.status().code());
103-
span.setStatus(HttpStatusConverter.SERVER.statusFromHttpStatus(httpResponse.status().code()));
102+
int code = httpResponse.status().code();
103+
span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code);
104+
span.setStatus(code >= 100 && code < 500 ? StatusCode.UNSET : StatusCode.ERROR);
104105
}
105106
if (msg instanceof LastHttpContent) {
106107
span.end();

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.auto.service.AutoService;
2020
import io.opentelemetry.instrumentation.api.config.Config;
2121
import io.opentelemetry.javaagent.extension.AgentListener;
22+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
2223
import java.util.List;
2324
import java.util.stream.Collectors;
2425
import org.hypertrace.agent.config.v1.Config.AgentConfig;
@@ -29,7 +30,8 @@
2930
public class FilterComponentInstaller implements AgentListener {
3031

3132
@Override
32-
public void beforeAgent(Config config) {
33+
public void beforeAgent(
34+
Config config, AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
3335
AgentConfig agentConfig = HypertraceConfig.get();
3436
List<String> jarPaths =
3537
agentConfig.getJavaagent().getFilterJarPathsList().stream()
@@ -38,7 +40,4 @@ public void beforeAgent(Config config) {
3840
// resolves filter via service loader resolution
3941
FilterRegistry.initialize(jarPaths);
4042
}
41-
42-
@Override
43-
public void afterAgent(Config config) {}
4443
}

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/config/InstrumentationConfigInstaller.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@
1919
import com.google.auto.service.AutoService;
2020
import io.opentelemetry.instrumentation.api.config.Config;
2121
import io.opentelemetry.javaagent.extension.AgentListener;
22+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
2223
import org.hypertrace.agent.core.config.InstrumentationConfig.ConfigProvider;
2324

2425
@AutoService(AgentListener.class)
2526
public class InstrumentationConfigInstaller implements AgentListener {
2627

2728
@Override
28-
public void beforeAgent(Config config) {
29-
// get initializes singleton
29+
public void beforeAgent(
30+
Config config,
31+
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { // get initializes singleton
3032
ConfigProvider.get();
3133
}
3234
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
package org.hypertrace.agent.otel.extensions.processor;
1818

1919
import com.google.auto.service.AutoService;
20-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
21-
import io.opentelemetry.sdk.autoconfigure.spi.traces.SdkTracerProviderConfigurer;
22-
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
20+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
21+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
2322

2423
/**
2524
* This is a workaround to add container ID tags to spans when Zipkin exporter is used. Zipkin
@@ -29,12 +28,13 @@
2928
* <p>Remove this once we migrate to OTEL exporter
3029
* https://github.com/hypertrace/javaagent/issues/132
3130
*/
32-
@AutoService(SdkTracerProviderConfigurer.class)
33-
public class HypertraceTracerCustomizer implements SdkTracerProviderConfigurer {
31+
@AutoService(AutoConfigurationCustomizerProvider.class)
32+
public class HypertraceCustomizerProvider implements AutoConfigurationCustomizerProvider {
3433

3534
@Override
36-
public void configure(
37-
SdkTracerProviderBuilder tracerProvider, ConfigProperties configProperties) {
38-
tracerProvider.addSpanProcessor(new AddTagsSpanProcessor());
35+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
36+
autoConfiguration.addTracerProviderCustomizer(
37+
(sdkTracerProviderBuilder, configProperties) ->
38+
sdkTracerProviderBuilder.addSpanProcessor(new AddTagsSpanProcessor()));
3939
}
4040
}

smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootSmokeTest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,8 @@ public void postJson() throws IOException, InterruptedException {
175175
ArrayList<ExportMetricsServiceRequest> metrics = new ArrayList<>(waitForMetrics());
176176
Assertions.assertTrue(hasMetricNamed("otlp.exporter.seen", metrics));
177177
Assertions.assertTrue(hasMetricNamed("otlp.exporter.exported", metrics));
178-
/*
179-
These metrics stopped being reported in OTEL SDK 1.10.0, due to a bug in the OpenTelemetry SDK
180-
Autoconfigure project https://github.com/open-telemetry/opentelemetry-java/issues/4109
181178
Assertions.assertTrue(hasMetricNamed("processedSpans", metrics));
182179
Assertions.assertTrue(hasMetricNamed("queueSize", metrics));
183-
*/
184180
Assertions.assertTrue(hasMetricNamed("runtime.jvm.gc.count", metrics));
185181
Assertions.assertTrue(hasMetricNamed("runtime.jvm.gc.time", metrics));
186182
Assertions.assertTrue(hasMetricNamed("runtime.jvm.memory.pool", metrics));

testing-common/src/testFixtures/java/org/hypertrace/agent/testing/AbstractInstrumenterTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public abstract class AbstractInstrumenterTest {
6464
System.setProperty("otel.internal.failOnContextLeak", "true");
6565
System.setProperty("io.opentelemetry.javaagent.slf4j.simpleLogger.log.muzzleMatcher", "warn");
6666
System.setProperty("otel.traces.exporter", "none");
67+
System.setProperty("otel.metrics.exporter", "none");
6768

6869
INSTRUMENTATION = ByteBuddyAgent.install();
6970
InstrumentationHolder.setInstrumentation(INSTRUMENTATION);

testing-common/src/testFixtures/java/org/hypertrace/agent/testing/TestSdkTracerProviderConfigurer.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@
1717
package org.hypertrace.agent.testing;
1818

1919
import com.google.auto.service.AutoService;
20-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
21-
import io.opentelemetry.sdk.autoconfigure.spi.traces.SdkTracerProviderConfigurer;
22-
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
20+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
21+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
2322

24-
@AutoService(SdkTracerProviderConfigurer.class)
25-
public final class TestSdkTracerProviderConfigurer implements SdkTracerProviderConfigurer {
23+
@AutoService(AutoConfigurationCustomizerProvider.class)
24+
public final class TestSdkTracerProviderConfigurer implements AutoConfigurationCustomizerProvider {
2625

2726
@Override
28-
public void configure(SdkTracerProviderBuilder tracerProviderBuilder, ConfigProperties config) {
29-
tracerProviderBuilder.addSpanProcessor(AbstractInstrumenterTest.TEST_WRITER);
27+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
28+
autoConfiguration.addTracerProviderCustomizer(
29+
(sdkTracerProviderBuilder, configProperties) ->
30+
sdkTracerProviderBuilder.addSpanProcessor(AbstractInstrumenterTest.TEST_WRITER));
3031
}
3132
}

0 commit comments

Comments
 (0)