From 957636e2599e019063af35465f7c597db038db62 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 9 Feb 2026 11:22:26 +0100 Subject: [PATCH 1/2] Expand RpcAttributesGetter interface for stable RPC semconv support Add RESPONSE type parameter to RpcAttributesGetter and add new default methods (getRpcMethod, getErrorType, isPredefined) needed for stable RPC semantic conventions. Deprecate getMethod() in favor of getRpcMethod(). Update all extractor signatures and implementations. Signed-off-by: Gregor Zeitlinger --- .../semconv/rpc/RpcAttributesGetter.java | 64 ++++++++++++++++++- .../rpc/RpcClientAttributesExtractor.java | 4 +- .../rpc/RpcCommonAttributesExtractor.java | 5 +- .../rpc/RpcServerAttributesExtractor.java | 4 +- .../rpc/RpcSizeAttributesExtractor.java | 6 +- .../semconv/rpc/RpcSpanNameExtractor.java | 7 +- .../rpc/RpcAttributesExtractorTest.java | 3 +- .../semconv/rpc/RpcSpanNameExtractorTest.java | 4 +- .../v2_7/DubboRpcAttributesGetter.java | 4 +- .../v1_11/AwsSdkRpcAttributesGetter.java | 4 +- .../awssdk/v1_11/AwsSdkSpanNameExtractor.java | 1 + .../internal/AwsSdkRpcAttributesGetter.java | 3 +- .../grpc/v1_6/GrpcRpcAttributesGetter.java | 4 +- .../gwt/GwtRpcAttributesGetter.java | 3 +- .../rmi/client/RmiClientAttributesGetter.java | 3 +- .../rmi/server/RmiServerAttributesGetter.java | 3 +- .../v4_0/client/ClientAttributesGetter.java | 3 +- .../v4_0/server/ServerAttributesGetter.java | 3 +- 18 files changed, 104 insertions(+), 24 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java index 0da544340f6b..748eac2cc160 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java @@ -14,7 +14,7 @@ * library/framework. It will be used by the {@link RpcClientAttributesExtractor} or {@link * RpcServerAttributesExtractor} to obtain the various RPC attributes in a type-generic way. */ -public interface RpcAttributesGetter { +public interface RpcAttributesGetter { @Nullable String getSystem(REQUEST request); @@ -22,6 +22,10 @@ public interface RpcAttributesGetter { @Nullable String getService(REQUEST request); + /** + * @deprecated Use {@link #getRpcMethod(REQUEST)} for stable semconv. + */ + @Deprecated @Nullable String getMethod(REQUEST request); @@ -34,4 +38,62 @@ default Long getRequestSize(REQUEST request) { default Long getResponseSize(REQUEST request) { return null; } + + /** + * Returns the fully-qualified RPC method name for stable semconv. + * + * @param request the request object + * @return the fully-qualified RPC method name (e.g., "my.Service/Method"), or null if service or + * method is unavailable + */ + @Nullable + default String getRpcMethod(REQUEST request) { + return null; + } + + /** + * Returns a description of a class of error the operation ended with. + * + *

This method should return {@code null} if there was no error. + * + *

If this method is not implemented, or if it returns {@code null}, the exception class name + * will be used as error type. + * + *

The cardinality of the error type should be low. The instrumentations implementing this + * method are recommended to document the custom values they support. + * + *

Examples: {@code OK}, {@code CANCELLED}, {@code UNKNOWN}, {@code -32602} + */ + @Nullable + default String getErrorType( + REQUEST request, @Nullable RESPONSE response, @Nullable Throwable error) { + return null; + } + + /** + * Returns whether the RPC method is recognized as a predefined method by the RPC framework or + * library. + * + *

Some RPC frameworks or libraries provide a fixed set of recognized methods for client stubs + * and server implementations. Instrumentations for such frameworks MUST return {@code true} only + * when the method is recognized by the framework or library. + * + *

When the method is not recognized (for example, when the server receives a request for a + * method that is not predefined on the server), or when instrumentation is not able to reliably + * detect if the method is predefined, this method MUST return {@code false}. + * + *

When this method returns {@code false}, the {@code rpc.method} attribute will be set to + * {@code "_OTHER"} and the {@code rpc.method_original} attribute will be set to the original + * method name. + * + *

Note: If the RPC instrumentation could end up converting valid RPC methods to {@code + * "_OTHER"}, then it SHOULD provide a way to configure the list of recognized RPC methods. + * + * @param request the request object + * @return {@code true} if the method is recognized as predefined by the framework, {@code false} + * otherwise + */ + default boolean isPredefined(REQUEST request) { + return false; + } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcClientAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcClientAttributesExtractor.java index c0759f237438..31353ce3ffa6 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcClientAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcClientAttributesExtractor.java @@ -22,11 +22,11 @@ public final class RpcClientAttributesExtractor /** Creates the RPC client attributes extractor. */ public static AttributesExtractor create( - RpcAttributesGetter getter) { + RpcAttributesGetter getter) { return new RpcClientAttributesExtractor<>(getter); } - private RpcClientAttributesExtractor(RpcAttributesGetter getter) { + private RpcClientAttributesExtractor(RpcAttributesGetter getter) { super(getter); } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcCommonAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcCommonAttributesExtractor.java index f731e703586c..99bcaaa3032f 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcCommonAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcCommonAttributesExtractor.java @@ -21,12 +21,13 @@ abstract class RpcCommonAttributesExtractor static final AttributeKey RPC_SERVICE = AttributeKey.stringKey("rpc.service"); static final AttributeKey RPC_SYSTEM = AttributeKey.stringKey("rpc.system"); - private final RpcAttributesGetter getter; + private final RpcAttributesGetter getter; - RpcCommonAttributesExtractor(RpcAttributesGetter getter) { + RpcCommonAttributesExtractor(RpcAttributesGetter getter) { this.getter = getter; } + @SuppressWarnings("deprecation") // for getMethod() @Override public final void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) { internalSet(attributes, RPC_SYSTEM, getter.getSystem(request)); diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcServerAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcServerAttributesExtractor.java index 768af20dc7d6..161c78f466dd 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcServerAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcServerAttributesExtractor.java @@ -22,11 +22,11 @@ public final class RpcServerAttributesExtractor /** Creates the RPC server attributes extractor. */ public static AttributesExtractor create( - RpcAttributesGetter getter) { + RpcAttributesGetter getter) { return new RpcServerAttributesExtractor<>(getter); } - private RpcServerAttributesExtractor(RpcAttributesGetter getter) { + private RpcServerAttributesExtractor(RpcAttributesGetter getter) { super(getter); } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSizeAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSizeAttributesExtractor.java index dd085e411bdd..2e904f1f8240 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSizeAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSizeAttributesExtractor.java @@ -19,9 +19,9 @@ public final class RpcSizeAttributesExtractor static final AttributeKey RPC_REQUEST_SIZE = AttributeKey.longKey("rpc.request.size"); static final AttributeKey RPC_RESPONSE_SIZE = AttributeKey.longKey("rpc.response.size"); - private final RpcAttributesGetter getter; + private final RpcAttributesGetter getter; - RpcSizeAttributesExtractor(RpcAttributesGetter getter) { + RpcSizeAttributesExtractor(RpcAttributesGetter getter) { this.getter = getter; } @@ -30,7 +30,7 @@ public final class RpcSizeAttributesExtractor * attributesGetter} instance to determine the request and response size. */ public static RpcSizeAttributesExtractor create( - RpcAttributesGetter attributesGetter) { + RpcAttributesGetter attributesGetter) { return new RpcSizeAttributesExtractor<>(attributesGetter); } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractor.java index 921839bd9234..41fb57a7a023 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractor.java @@ -15,16 +15,17 @@ public final class RpcSpanNameExtractor implements SpanNameExtractor/}. */ public static SpanNameExtractor create( - RpcAttributesGetter attributesExtractor) { + RpcAttributesGetter attributesExtractor) { return new RpcSpanNameExtractor<>(attributesExtractor); } - private final RpcAttributesGetter getter; + private final RpcAttributesGetter getter; - private RpcSpanNameExtractor(RpcAttributesGetter getter) { + private RpcSpanNameExtractor(RpcAttributesGetter getter) { this.getter = getter; } + @SuppressWarnings("deprecation") // for getMethod() @Override public String extract(REQUEST request) { String service = getter.getService(request); diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesExtractorTest.java index 058bfb3485b3..7357ac924323 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesExtractorTest.java @@ -20,7 +20,7 @@ @SuppressWarnings("deprecation") // using deprecated semconv class RpcAttributesExtractorTest { - enum TestGetter implements RpcAttributesGetter> { + enum TestGetter implements RpcAttributesGetter, Void> { INSTANCE; @Override @@ -33,6 +33,7 @@ public String getService(Map request) { return request.get("service"); } + @Deprecated @Override public String getMethod(Map request) { return request.get("method"); diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractorTest.java index e20af5c494a4..27e34a448341 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcSpanNameExtractorTest.java @@ -17,8 +17,9 @@ @ExtendWith(MockitoExtension.class) class RpcSpanNameExtractorTest { - @Mock RpcAttributesGetter getter; + @Mock RpcAttributesGetter getter; + @SuppressWarnings("deprecation") // testing deprecated method @Test void normal() { RpcRequest request = new RpcRequest(); @@ -30,6 +31,7 @@ void normal() { assertThat(extractor.extract(request)).isEqualTo("my.Service/Method"); } + @SuppressWarnings("deprecation") // testing deprecated method @Test void serviceNull() { RpcRequest request = new RpcRequest(); diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboRpcAttributesGetter.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboRpcAttributesGetter.java index aac66a138c01..e2683d206c71 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboRpcAttributesGetter.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboRpcAttributesGetter.java @@ -6,8 +6,9 @@ package io.opentelemetry.instrumentation.apachedubbo.v2_7; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; +import org.apache.dubbo.rpc.Result; -enum DubboRpcAttributesGetter implements RpcAttributesGetter { +enum DubboRpcAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -20,6 +21,7 @@ public String getService(DubboRequest request) { return request.invocation().getInvoker().getInterface().getName(); } + @Deprecated @Override public String getMethod(DubboRequest request) { return request.invocation().getMethodName(); diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkRpcAttributesGetter.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkRpcAttributesGetter.java index a3704e88855b..3d014d0e4a48 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkRpcAttributesGetter.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkRpcAttributesGetter.java @@ -6,9 +6,10 @@ package io.opentelemetry.instrumentation.awssdk.v1_11; import com.amazonaws.Request; +import com.amazonaws.Response; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; -enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter> { +enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter, Response> { INSTANCE; private static final ClassValue OPERATION_NAME = @@ -37,6 +38,7 @@ public String getService(Request request) { return request.getServiceName(); } + @Deprecated @Override public String getMethod(Request request) { return OPERATION_NAME.get(request.getOriginalRequest().getClass()); diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkSpanNameExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkSpanNameExtractor.java index f757c4c026e3..cd5954f80609 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkSpanNameExtractor.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkSpanNameExtractor.java @@ -14,6 +14,7 @@ class AwsSdkSpanNameExtractor implements SpanNameExtractor> { private static final AwsSdkRpcAttributesGetter rpcAttributes = AwsSdkRpcAttributesGetter.INSTANCE; private final NamesCache namesCache = new NamesCache(); + @SuppressWarnings("deprecation") // for getMethod() @Override public String extract(Request request) { return qualifiedOperation( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkRpcAttributesGetter.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkRpcAttributesGetter.java index f6a6ba078a2b..10e5f7fa4115 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkRpcAttributesGetter.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkRpcAttributesGetter.java @@ -9,7 +9,7 @@ import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute; -enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter { +enum AwsSdkRpcAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -22,6 +22,7 @@ public String getService(ExecutionAttributes request) { return request.getAttribute(SdkExecutionAttribute.SERVICE_NAME); } + @Deprecated @Override public String getMethod(ExecutionAttributes request) { return request.getAttribute(SdkExecutionAttribute.OPERATION_NAME); diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcRpcAttributesGetter.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcRpcAttributesGetter.java index e38b95c40f85..a7211fd13fef 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcRpcAttributesGetter.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcRpcAttributesGetter.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.grpc.v1_6; import io.grpc.Metadata; +import io.grpc.Status; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import java.util.Collections; import java.util.List; @@ -13,7 +14,7 @@ import java.util.stream.StreamSupport; import javax.annotation.Nullable; -enum GrpcRpcAttributesGetter implements RpcAttributesGetter { +enum GrpcRpcAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -32,6 +33,7 @@ public String getService(GrpcRequest request) { return fullMethodName.substring(0, slashIndex); } + @Deprecated @Override @Nullable public String getMethod(GrpcRequest request) { diff --git a/instrumentation/gwt-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/gwt/GwtRpcAttributesGetter.java b/instrumentation/gwt-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/gwt/GwtRpcAttributesGetter.java index 3ebef129f191..1dd84824e59c 100644 --- a/instrumentation/gwt-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/gwt/GwtRpcAttributesGetter.java +++ b/instrumentation/gwt-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/gwt/GwtRpcAttributesGetter.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import java.lang.reflect.Method; -enum GwtRpcAttributesGetter implements RpcAttributesGetter { +enum GwtRpcAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -21,6 +21,7 @@ public String getService(Method method) { return method.getDeclaringClass().getName(); } + @Deprecated @Override public String getMethod(Method method) { return method.getName(); diff --git a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientAttributesGetter.java b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientAttributesGetter.java index 1b139dacc7aa..95c01d2d7275 100644 --- a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientAttributesGetter.java +++ b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientAttributesGetter.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import java.lang.reflect.Method; -enum RmiClientAttributesGetter implements RpcAttributesGetter { +enum RmiClientAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -21,6 +21,7 @@ public String getService(Method method) { return method.getDeclaringClass().getName(); } + @Deprecated @Override public String getMethod(Method method) { return method.getName(); diff --git a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerAttributesGetter.java b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerAttributesGetter.java index ad598bb53814..f8947eba3df5 100644 --- a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerAttributesGetter.java +++ b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerAttributesGetter.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; -enum RmiServerAttributesGetter implements RpcAttributesGetter { +enum RmiServerAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -21,6 +21,7 @@ public String getService(ClassAndMethod classAndMethod) { return classAndMethod.declaringClass().getName(); } + @Deprecated @Override public String getMethod(ClassAndMethod classAndMethod) { return classAndMethod.methodName(); diff --git a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/client/ClientAttributesGetter.java b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/client/ClientAttributesGetter.java index 19d31b217770..9ed8b87924a0 100644 --- a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/client/ClientAttributesGetter.java +++ b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/client/ClientAttributesGetter.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import java.lang.reflect.Method; -public enum ClientAttributesGetter implements RpcAttributesGetter { +public enum ClientAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -21,6 +21,7 @@ public String getService(Method method) { return method.getDeclaringClass().getName(); } + @Deprecated @Override public String getMethod(Method method) { return method.getName(); diff --git a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/server/ServerAttributesGetter.java b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/server/ServerAttributesGetter.java index e7bf12be54cc..b4c150ca1dfe 100644 --- a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/server/ServerAttributesGetter.java +++ b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/server/ServerAttributesGetter.java @@ -8,7 +8,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; -public enum ServerAttributesGetter implements RpcAttributesGetter { +public enum ServerAttributesGetter implements RpcAttributesGetter { INSTANCE; @Override @@ -21,6 +21,7 @@ public String getService(ClassAndMethod classAndMethod) { return classAndMethod.declaringClass().getName(); } + @Deprecated @Override public String getMethod(ClassAndMethod classAndMethod) { return classAndMethod.methodName(); From b56518f34de28fce2aef200532d99ecb78c0759a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Feb 2026 11:56:51 -0800 Subject: [PATCH 2/2] Update instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java --- .../semconv/rpc/RpcAttributesGetter.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java index 748eac2cc160..b05f9bd4331b 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcAttributesGetter.java @@ -69,31 +69,4 @@ default String getErrorType( REQUEST request, @Nullable RESPONSE response, @Nullable Throwable error) { return null; } - - /** - * Returns whether the RPC method is recognized as a predefined method by the RPC framework or - * library. - * - *

Some RPC frameworks or libraries provide a fixed set of recognized methods for client stubs - * and server implementations. Instrumentations for such frameworks MUST return {@code true} only - * when the method is recognized by the framework or library. - * - *

When the method is not recognized (for example, when the server receives a request for a - * method that is not predefined on the server), or when instrumentation is not able to reliably - * detect if the method is predefined, this method MUST return {@code false}. - * - *

When this method returns {@code false}, the {@code rpc.method} attribute will be set to - * {@code "_OTHER"} and the {@code rpc.method_original} attribute will be set to the original - * method name. - * - *

Note: If the RPC instrumentation could end up converting valid RPC methods to {@code - * "_OTHER"}, then it SHOULD provide a way to configure the list of recognized RPC methods. - * - * @param request the request object - * @return {@code true} if the method is recognized as predefined by the framework, {@code false} - * otherwise - */ - default boolean isPredefined(REQUEST request) { - return false; - } }