Browse Source

Fix testIndy on main (#11582)

Jonas Kunz 9 months ago
parent
commit
9f11c4a36a

+ 6 - 0
instrumentation/finagle-http-23.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finaglehttp/v23_11/FinagleHttpInstrumentationModule.java

@@ -26,6 +26,12 @@ public class FinagleHttpInstrumentationModule extends InstrumentationModule {
         new H2StreamChannelInitInstrumentation());
   }
 
+  @Override
+  public boolean isIndyModule() {
+    // injects helpers to access package-private members
+    return false;
+  }
+
   @Override
   public boolean isHelperClass(String className) {
     return className.equals("com.twitter.finagle.ChannelTransportHelpers")

+ 15 - 1
instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlInstrumentationModule.java

@@ -10,13 +10,17 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.
 import com.google.auto.service.AutoService;
 import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
 import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
+import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
+import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.ClassInjector;
+import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.InjectionMode;
 import java.util.Collections;
 import java.util.List;
 import net.bytebuddy.matcher.ElementMatcher;
 
 @SuppressWarnings("unused")
 @AutoService(InstrumentationModule.class)
-public class GraphqlInstrumentationModule extends InstrumentationModule {
+public class GraphqlInstrumentationModule extends InstrumentationModule
+    implements ExperimentalInstrumentationModule {
 
   public GraphqlInstrumentationModule() {
     super("graphql-java", "graphql-java-20.0");
@@ -32,4 +36,14 @@ public class GraphqlInstrumentationModule extends InstrumentationModule {
   public List<TypeInstrumentation> typeInstrumentations() {
     return Collections.singletonList(new GraphqlInstrumentation());
   }
+
+  @Override
+  public void injectClasses(ClassInjector injector) {
+    // we do not use ByteBuddy Advice dispatching in this instrumentation
+    // Instead, we manually call GraphqlSingletons via ASM
+    // Easiest solution to work with indy is to inject an indy-proxy to be invoked
+    injector
+        .proxyBuilder("io.opentelemetry.javaagent.instrumentation.graphql.v20_0.GraphqlSingletons")
+        .inject(InjectionMode.CLASS_ONLY);
+  }
 }

+ 6 - 0
instrumentation/influxdb-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbInstrumentationModule.java

@@ -23,4 +23,10 @@ public class InfluxDbInstrumentationModule extends InstrumentationModule {
   public List<TypeInstrumentation> typeInstrumentations() {
     return singletonList(new InfluxDbImplInstrumentation());
   }
+
+  @Override
+  public boolean isIndyModule() {
+    // Uses multiple Advice.Locals and argument assignment
+    return false;
+  }
 }

+ 6 - 0
instrumentation/reactor/reactor-3.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_4/operator/ContextPropagationOperator34InstrumentationModule.java

@@ -31,4 +31,10 @@ public class ContextPropagationOperator34InstrumentationModule extends Instrumen
   public List<TypeInstrumentation> typeInstrumentations() {
     return singletonList(new ContextPropagationOperator34Instrumentation());
   }
+
+  @Override
+  public boolean isIndyModule() {
+    // Requires Otel-API bride
+    return false;
+  }
 }