Skip to content

Commit e599090

Browse files
committed
Suppress OtelDeprecatedApiUsage in armeria-grpc instrumentation
GrpcServiceBuilder is not a ServerBuilder, so configureServerBuilder() cannot be used here. Suppress the deprecation warning for createServerInterceptor().
1 parent 12d487a commit e599090

3 files changed

Lines changed: 43 additions & 2 deletions

File tree

instrumentation/armeria/armeria-grpc-1.14/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcServiceBuilderInstrumentation.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.linecorp.armeria.server.grpc.GrpcServiceBuilder;
1313
import io.opentelemetry.api.GlobalOpenTelemetry;
1414
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry;
15+
import io.opentelemetry.instrumentation.grpc.v1_6.internal.Internal;
1516
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1617
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1718
import net.bytebuddy.asm.Advice;
@@ -36,7 +37,8 @@ public static class BuildAdvice {
3637

3738
@Advice.OnMethodEnter
3839
public static void onEnter(@Advice.This GrpcServiceBuilder builder) {
39-
builder.intercept(GrpcTelemetry.create(GlobalOpenTelemetry.get()).createServerInterceptor());
40+
GrpcTelemetry telemetry = GrpcTelemetry.create(GlobalOpenTelemetry.get());
41+
builder.intercept(Internal.createServerInterceptor(telemetry));
4042
}
4143
}
4244
}

instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetry.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@
1212
import io.opentelemetry.api.OpenTelemetry;
1313
import io.opentelemetry.context.propagation.ContextPropagators;
1414
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
15+
import io.opentelemetry.instrumentation.grpc.v1_6.internal.Internal;
1516

1617
/** Entrypoint for instrumenting gRPC servers or clients. */
1718
public final class GrpcTelemetry {
1819

20+
static {
21+
Internal.setServerInterceptorFactory(GrpcTelemetry::newServerInterceptor);
22+
}
23+
1924
/** Returns a new {@link GrpcTelemetry} configured with the given {@link OpenTelemetry}. */
2025
public static GrpcTelemetry create(OpenTelemetry openTelemetry) {
2126
return builder(openTelemetry).build();
@@ -60,7 +65,7 @@ public ClientInterceptor createClientInterceptor() {
6065
* creates spans for requests to unregistered services that are not seen by server interceptors.
6166
*/
6267
public void configureServerBuilder(ServerBuilder<?> serverBuilder) {
63-
serverBuilder.intercept(createServerInterceptor());
68+
serverBuilder.intercept(newServerInterceptor());
6469
serverBuilder.addStreamTracerFactory(
6570
new TracingServerStreamTracerFactory(serverInstrumenter, propagators));
6671
}
@@ -74,6 +79,10 @@ public void configureServerBuilder(ServerBuilder<?> serverBuilder) {
7479
*/
7580
@Deprecated
7681
public ServerInterceptor createServerInterceptor() {
82+
return newServerInterceptor();
83+
}
84+
85+
ServerInterceptor newServerInterceptor() {
7786
return new TracingServerInterceptor(
7887
serverInstrumenter, captureExperimentalSpanAttributes, emitMessageEvents);
7988
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.grpc.v1_6.internal;
7+
8+
import io.grpc.ServerInterceptor;
9+
import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry;
10+
import java.util.function.Function;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public final class Internal {
17+
18+
private static volatile Function<GrpcTelemetry, ServerInterceptor> serverInterceptorFactory;
19+
20+
public static void setServerInterceptorFactory(
21+
Function<GrpcTelemetry, ServerInterceptor> factory) {
22+
serverInterceptorFactory = factory;
23+
}
24+
25+
public static ServerInterceptor createServerInterceptor(GrpcTelemetry telemetry) {
26+
return serverInterceptorFactory.apply(telemetry);
27+
}
28+
29+
private Internal() {}
30+
}

0 commit comments

Comments
 (0)