Browse Source

Use ConfigProperties in javaagent SPIs (#6285)

* Use ConfigProperties in javaagent SPIs

* remove deprecated

* errorprone

* fix javaagent build

* fix javaagent-tooling tests

* spotless
Mateusz Rzeszutek 2 years ago
parent
commit
b23db97a28
30 changed files with 175 additions and 79 deletions
  1. 2 2
      instrumentation/akka/akka-actor-2.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java
  2. 2 2
      instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java
  3. 2 2
      instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java
  4. 2 2
      instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java
  5. 2 2
      instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsIgnoredTypesConfigurer.java
  6. 2 2
      instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java
  7. 2 2
      instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java
  8. 2 2
      instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java
  9. 2 2
      instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java
  10. 2 2
      instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java
  11. 2 2
      instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorIgnoredTypesConfigurer.java
  12. 2 2
      instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/SpringIntegrationIgnoredTypesConfigurer.java
  13. 2 2
      instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/SpringRabbitIgnoredTypesConfigurer.java
  14. 1 0
      javaagent-extension-api/build.gradle.kts
  15. 3 0
      javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/config/ConfigCustomizer.java
  16. 0 6
      javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/config/ConfigPropertySource.java
  17. 17 1
      javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java
  18. 3 2
      javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java
  19. 7 5
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java
  20. 63 0
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/EmptyConfigProperties.java
  21. 10 8
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigInitializer.java
  22. 9 3
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java
  23. 2 2
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java
  24. 9 3
      javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java
  25. 12 10
      javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java
  26. 1 0
      javaagent/build.gradle.kts
  27. 2 2
      testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java
  28. 2 3
      testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java
  29. 4 4
      testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingExporterPropertySource.java
  30. 4 4
      testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/http/CapturedHttpHeadersTestConfigSource.java

+ 2 - 2
instrumentation/akka/akka-actor-2.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.akkaactor;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class AkkaIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // This is a Mailbox created by akka.dispatch.Dispatcher#createMailbox. We must not add
     // a context to it as context should only be carried by individual envelopes in the queue
     // of this mailbox.

+ 2 - 2
instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.internal.classloader;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class ClassLoaderIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     builder.allowClass("jdk.internal.loader.BuiltinClassLoader");
     builder.allowClass("sun.misc.Launcher$AppClassLoader");
   }

+ 2 - 2
instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.internal.reflection;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class ReflectionIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     builder.allowClass("jdk.internal.reflect.Reflection");
     builder.allowClass("sun.reflect.Reflection");
     builder.allowClass("java.lang.Class");

+ 2 - 2
instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.jdbc;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class JdbcIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/5946
     builder.ignoreClass("org.jboss.jca.adapters.jdbc.");
   }

+ 2 - 2
instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.jms;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class JmsIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // Avoid instrumenting internal OrderedExecutor worker class
     builder.ignoreTaskClass("org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$");
   }

+ 2 - 2
instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.okhttp.v2_2;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class OkHttpIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // OkHttp connection pool lazily initializes a long running task to detect expired
     // connections and should not itself be instrumented.
     builder.ignoreTaskClass("com.squareup.okhttp.ConnectionPool$");

+ 2 - 2
instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.okhttp.v3_0;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class OkHttp3IgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // OkHttp task runner is a lazily-initialized shared pool of continuously running threads
     // similar to an event loop. The submitted tasks themselves should already be
     // instrumented to allow async propagation.

+ 2 - 2
instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.quartz.v2_0;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class QuartzIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // Quartz executes jobs themselves in a synchronous way, there's no reason to propagate context
     // between its scheduler threads.
     builder.ignoreTaskClass("org.quartz");

+ 2 - 2
instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.ratpack;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class RatpackIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // Context is passed through Netty channels in Ratpack as executor instrumentation is
     // not suitable. As the context that would be propagated via executor would be
     // incorrect, skip the propagation. Not checking for concrete class names as this covers

+ 2 - 2
instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.rxjava.v2_0;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class RxJava2IgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // ScheduledRunnable is a wrapper around a Runnable and doesn't itself need context.
     builder.ignoreTaskClass("io.reactivex.internal.schedulers.ScheduledRunnable");
   }

+ 2 - 2
instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorIgnoredTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.instrumentation.spring.actuator;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class SpringBootActuatorIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     builder.allowClass("org.springframework.boot.autoconfigure.AutoConfigurationImportSelector");
   }
 }

+ 2 - 2
instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/SpringIntegrationIgnoredTypesConfigurer.java

@@ -6,14 +6,14 @@
 package io.opentelemetry.javaagent.instrumentation.spring.integration;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class SpringIntegrationIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // we don't instrument any messaging classes
     builder.ignoreClass("org.springframework.messaging");
   }

+ 2 - 2
instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/SpringRabbitIgnoredTypesConfigurer.java

@@ -6,14 +6,14 @@
 package io.opentelemetry.javaagent.instrumentation.spring.rabbit;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class SpringRabbitIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // contains a Runnable that servers as a worker that continuously reads messages from queue
     builder
         .ignoreClass("org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$")

+ 1 - 0
javaagent-extension-api/build.gradle.kts

@@ -8,6 +8,7 @@ group = "io.opentelemetry.javaagent"
 
 dependencies {
   api("io.opentelemetry:opentelemetry-sdk")
+  api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
   api("net.bytebuddy:byte-buddy-dep")
 
   implementation(project(":instrumentation-api"))

+ 3 - 0
javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/config/ConfigCustomizer.java

@@ -16,7 +16,10 @@ import java.util.Map;
  *
  * <p>This is a service provider interface that requires implementations to be registered in a
  * provider-configuration file stored in the {@code META-INF/services} resource directory.
+ *
+ * @deprecated Use the {@link ConfigPropertySource} SPI instead.
  */
+@Deprecated
 public interface ConfigCustomizer extends Ordered {
 
   /**

+ 0 - 6
javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/config/ConfigPropertySource.java

@@ -16,19 +16,13 @@ import java.util.Map;
  *
  * <p>This is a service provider interface that requires implementations to be registered in a
  * provider-configuration file stored in the {@code META-INF/services} resource directory.
- *
- * @deprecated Use {@link ConfigCustomizer} instead.
  */
-@Deprecated
 public interface ConfigPropertySource extends Ordered {
 
   /**
    * Returns all properties whose default values are overridden by this property source. Key of the
    * map is the propertyName (same as system property name, e.g. {@code otel.traces.exporter}),
    * value is the property value.
-   *
-   * @deprecated Use {@link ConfigCustomizer#defaultProperties()} instead.
    */
-  @Deprecated
   Map<String, String> getProperties();
 }

+ 17 - 1
javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java

@@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.extension.ignore;
 
 import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.Ordered;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 /**
  * An {@link IgnoredTypesConfigurer} can be used to augment built-in instrumentation restrictions:
@@ -21,6 +22,21 @@ public interface IgnoredTypesConfigurer extends Ordered {
   /**
    * Configure the passed {@code builder} and define which classes should be ignored when
    * instrumenting.
+   *
+   * @deprecated Use {@link #configure(ConfigProperties, IgnoredTypesBuilder)} instead.
    */
-  void configure(Config config, IgnoredTypesBuilder builder);
+  @Deprecated
+  default void configure(Config config, IgnoredTypesBuilder builder) {
+    throw new UnsupportedOperationException(
+        "This method is deprecated and will be removed in a future release;"
+            + " implement IgnoredTypesConfigurer#configure(ConfigProperties, IgnoredTypesBuilder) instead");
+  }
+
+  /**
+   * Configure the passed {@code builder} and define which classes should be ignored when
+   * instrumenting.
+   */
+  default void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
+    configure(Config.get(), builder);
+  }
 }

+ 3 - 2
javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java

@@ -5,7 +5,7 @@
 
 package io.opentelemetry.javaagent.tooling.ignore;
 
-import io.opentelemetry.instrumentation.api.config.Config;
+import io.opentelemetry.javaagent.tooling.EmptyConfigProperties;
 import java.util.concurrent.TimeUnit;
 import net.bytebuddy.description.type.TypeDescription;
 import net.bytebuddy.matcher.ElementMatcher;
@@ -33,7 +33,8 @@ public class IgnoredTypesMatcherBenchmark {
 
   static {
     IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl();
-    new AdditionalLibraryIgnoredTypesConfigurer().configure(Config.get(), builder);
+    new AdditionalLibraryIgnoredTypesConfigurer()
+        .configure(EmptyConfigProperties.INSTANCE, builder);
     ignoredTypesMatcher = new IgnoredTypesMatcher(builder.buildIgnoredTypesTrie());
   }
 

+ 7 - 5
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java

@@ -118,10 +118,11 @@ public class AgentInstaller {
       autoConfiguredSdk = installOpenTelemetrySdk(config);
     }
 
+    ConfigProperties sdkConfig = EmptyConfigProperties.INSTANCE;
     if (autoConfiguredSdk != null) {
-      InstrumentationConfig.internalInitializeConfig(
-          new ConfigPropertiesBridge(autoConfiguredSdk.getConfig()));
-      copyNecessaryConfigToSystemProperties(autoConfiguredSdk.getConfig());
+      sdkConfig = autoConfiguredSdk.getConfig();
+      InstrumentationConfig.internalInitializeConfig(new ConfigPropertiesBridge(sdkConfig));
+      copyNecessaryConfigToSystemProperties(sdkConfig);
 
       for (BeforeAgentListener agentListener : loadOrdered(BeforeAgentListener.class)) {
         agentListener.beforeAgent(autoConfiguredSdk);
@@ -141,7 +142,7 @@ public class AgentInstaller {
       agentBuilder = agentBuilder.with(new ExposeAgentBootstrapListener(inst));
     }
 
-    agentBuilder = configureIgnoredTypes(config, agentBuilder);
+    agentBuilder = configureIgnoredTypes(sdkConfig, agentBuilder);
 
     if (AgentConfig.get().isDebugModeEnabled()) {
       agentBuilder =
@@ -211,7 +212,8 @@ public class AgentInstaller {
     DefineClassHelper.internalSetHandler(DefineClassHandler.INSTANCE);
   }
 
-  private static AgentBuilder configureIgnoredTypes(Config config, AgentBuilder agentBuilder) {
+  private static AgentBuilder configureIgnoredTypes(
+      ConfigProperties config, AgentBuilder agentBuilder) {
     IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl();
     for (IgnoredTypesConfigurer configurer : loadOrdered(IgnoredTypesConfigurer.class)) {
       configurer.configure(config, builder);

+ 63 - 0
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/EmptyConfigProperties.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.tooling;
+
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import java.time.Duration;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+
+public enum EmptyConfigProperties implements ConfigProperties {
+  INSTANCE;
+
+  @Nullable
+  @Override
+  public String getString(String name) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public Boolean getBoolean(String name) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public Integer getInt(String name) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public Long getLong(String name) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public Double getDouble(String name) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public Duration getDuration(String name) {
+    return null;
+  }
+
+  @Override
+  public List<String> getList(String name) {
+    return Collections.emptyList();
+  }
+
+  @Override
+  public Map<String, String> getMap(String name) {
+    return Collections.emptyMap();
+  }
+}

+ 10 - 8
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigInitializer.java

@@ -9,7 +9,7 @@ import static io.opentelemetry.javaagent.tooling.SafeServiceLoader.loadOrdered;
 import static java.util.logging.Level.SEVERE;
 
 import io.opentelemetry.instrumentation.api.config.Config;
-import io.opentelemetry.javaagent.extension.config.ConfigCustomizer;
+import io.opentelemetry.javaagent.extension.config.ConfigPropertySource;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -27,10 +27,12 @@ public final class ConfigInitializer {
   static final String CONFIGURATION_FILE_PROPERTY = "otel.javaagent.configuration-file";
   static final String CONFIGURATION_FILE_ENV_VAR = "OTEL_JAVAAGENT_CONFIGURATION_FILE";
 
+  @SuppressWarnings("deprecation") // loads the ConfigCustomizer SPI
   public static void initialize() {
-    List<ConfigCustomizer> customizers = loadOrdered(ConfigCustomizer.class);
+    List<io.opentelemetry.javaagent.extension.config.ConfigCustomizer> customizers =
+        loadOrdered(io.opentelemetry.javaagent.extension.config.ConfigCustomizer.class);
     Config config = create(loadSpiConfiguration(customizers), loadConfigurationFile());
-    for (ConfigCustomizer customizer : customizers) {
+    for (io.opentelemetry.javaagent.extension.config.ConfigCustomizer customizer : customizers) {
       config = customizer.customize(config);
     }
     Config.internalInitializeConfig(config);
@@ -47,14 +49,14 @@ public final class ConfigInitializer {
   }
 
   /** Retrieves all default configuration overloads using SPI and initializes Config. */
-  @SuppressWarnings("deprecation") // loads the old config SPI
-  private static Properties loadSpiConfiguration(List<ConfigCustomizer> customizers) {
+  @SuppressWarnings("deprecation") // loads the ConfigCustomizer SPI
+  private static Properties loadSpiConfiguration(
+      List<io.opentelemetry.javaagent.extension.config.ConfigCustomizer> customizers) {
     Properties propertiesFromSpi = new Properties();
-    for (io.opentelemetry.javaagent.extension.config.ConfigPropertySource propertySource :
-        loadOrdered(io.opentelemetry.javaagent.extension.config.ConfigPropertySource.class)) {
+    for (ConfigPropertySource propertySource : loadOrdered(ConfigPropertySource.class)) {
       propertiesFromSpi.putAll(propertySource.getProperties());
     }
-    for (ConfigCustomizer customizer : customizers) {
+    for (io.opentelemetry.javaagent.extension.config.ConfigCustomizer customizer : customizers) {
       propertiesFromSpi.putAll(customizer.defaultProperties());
     }
     return propertiesFromSpi;

+ 9 - 3
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java

@@ -6,9 +6,10 @@
 package io.opentelemetry.javaagent.tooling.ignore;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import java.util.Locale;
 
 /**
  * Additional global ignore settings that are used to reduce number of classes we try to apply
@@ -28,8 +29,8 @@ public class AdditionalLibraryIgnoredTypesConfigurer implements IgnoredTypesConf
       "otel.javaagent.testing.additional-library-ignores.enabled";
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
-    if (config.getBoolean(ADDITIONAL_LIBRARY_IGNORES_ENABLED, true)) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
+    if (config.getBoolean(normalize(ADDITIONAL_LIBRARY_IGNORES_ENABLED), true)) {
       configure(builder);
     }
   }
@@ -275,4 +276,9 @@ public class AdditionalLibraryIgnoredTypesConfigurer implements IgnoredTypesConf
     // kotlin, note we do not ignore kotlinx because we instrument coroutines code
     builder.ignoreClass("kotlin.").allowClass("kotlin.coroutines.jvm.internal.DebugProbesKt");
   }
+
+  // TODO: remove after https://github.com/open-telemetry/opentelemetry-java/issues/4562 is fixed
+  private static String normalize(String key) {
+    return key.toLowerCase(Locale.ROOT).replace('-', '.');
+  }
 }

+ 2 - 2
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java

@@ -6,17 +6,17 @@
 package io.opentelemetry.javaagent.tooling.ignore;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.bootstrap.AgentClassLoader;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
 import io.opentelemetry.javaagent.tooling.ExtensionClassLoader;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class GlobalIgnoredTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     configureIgnoredTypes(builder);
     configureIgnoredClassLoaders(builder);
     configureIgnoredTasks(builder);

+ 9 - 3
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java

@@ -8,10 +8,11 @@ package io.opentelemetry.javaagent.tooling.ignore;
 import static java.util.Collections.emptyList;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 import java.util.List;
+import java.util.Locale;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer {
@@ -20,8 +21,8 @@ public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer {
   static final String EXCLUDED_CLASSES_CONFIG = "otel.javaagent.exclude-classes";
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
-    List<String> excludedClasses = config.getList(EXCLUDED_CLASSES_CONFIG, emptyList());
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
+    List<String> excludedClasses = config.getList(normalize(EXCLUDED_CLASSES_CONFIG), emptyList());
     for (String excludedClass : excludedClasses) {
       excludedClass = excludedClass.trim();
       // remove the trailing *
@@ -31,4 +32,9 @@ public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer {
       builder.ignoreClass(excludedClass);
     }
   }
+
+  // TODO: remove after https://github.com/open-telemetry/opentelemetry-java/issues/4562 is fixed
+  private static String normalize(String key) {
+    return key.toLowerCase(Locale.ROOT).replace('-', '.');
+  }
 }

+ 12 - 10
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java

@@ -6,13 +6,15 @@
 package io.opentelemetry.javaagent.tooling.ignore;
 
 import static io.opentelemetry.javaagent.tooling.ignore.UserExcludedClassesConfigurer.EXCLUDED_CLASSES_CONFIG;
-import static java.util.Collections.singletonMap;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
 
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
@@ -20,6 +22,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
 
 @ExtendWith(MockitoExtension.class)
 class UserExcludedClassesConfigurerTest {
+
+  @Mock ConfigProperties config;
   @Mock IgnoredTypesBuilder builder;
 
   IgnoredTypesConfigurer underTest = new UserExcludedClassesConfigurer();
@@ -27,7 +31,7 @@ class UserExcludedClassesConfigurerTest {
   @Test
   void shouldAddNothingToBuilderWhenPropertyIsEmpty() {
     // when
-    underTest.configure(Config.builder().build(), builder);
+    underTest.configure(config, builder);
 
     // then
     verifyNoInteractions(builder);
@@ -36,13 +40,11 @@ class UserExcludedClassesConfigurerTest {
   @Test
   void shouldIgnoreClassesAndPackages() {
     // given
-    Config config =
-        Config.builder()
-            .addProperties(
-                singletonMap(
-                    EXCLUDED_CLASSES_CONFIG,
-                    "com.example.IgnoredClass,com.example.ignored.*,com.another_ignore"))
-            .build();
+    // TODO: remove normalization after
+    // https://github.com/open-telemetry/opentelemetry-java/issues/4562 is fixed
+    when(config.getList(EXCLUDED_CLASSES_CONFIG.replace('-', '.'), emptyList()))
+        .thenReturn(
+            asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore"));
 
     // when
     underTest.configure(config, builder);

+ 1 - 0
javaagent/build.gradle.kts

@@ -36,6 +36,7 @@ bootstrapLibs.run {
   exclude("org.ow2.asm")
   exclude("io.opentelemetry", "opentelemetry-sdk")
   exclude("io.opentelemetry", "opentelemetry-sdk-extension-autoconfigure")
+  exclude("io.opentelemetry", "opentelemetry-sdk-extension-autoconfigure-spi")
 }
 
 // exclude dependencies that are to be placed in bootstrap from agent libs - they won't be added to inst/

+ 2 - 2
testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.testing;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
 
 @AutoService(IgnoredTypesConfigurer.class)
 public class IgnoredTestTypesConfigurer implements IgnoredTypesConfigurer {
 
   @Override
-  public void configure(Config config, IgnoredTypesBuilder builder) {
+  public void configure(ConfigProperties config, IgnoredTypesBuilder builder) {
     // we don't want to instrument auto-generated mocks
     builder
         .ignoreClass("org.mockito")

+ 2 - 3
testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java

@@ -7,8 +7,8 @@ package io.opentelemetry.javaagent.testing.bytebuddy;
 
 import static java.util.logging.Level.SEVERE;
 
-import io.opentelemetry.instrumentation.api.config.Config;
 import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
+import io.opentelemetry.javaagent.tooling.EmptyConfigProperties;
 import io.opentelemetry.javaagent.tooling.SafeServiceLoader;
 import io.opentelemetry.javaagent.tooling.ignore.AdditionalLibraryIgnoredTypesConfigurer;
 import io.opentelemetry.javaagent.tooling.ignore.GlobalIgnoredTypesConfigurer;
@@ -49,7 +49,6 @@ public class TestAgentListener implements AgentBuilder.Listener {
   }
 
   private static Trie<IgnoreAllow> buildOtherConfiguredIgnores() {
-    Config config = Config.builder().build();
     IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl();
     for (IgnoredTypesConfigurer configurer :
         SafeServiceLoader.loadOrdered(IgnoredTypesConfigurer.class)) {
@@ -58,7 +57,7 @@ public class TestAgentListener implements AgentBuilder.Listener {
           || configurer instanceof GlobalIgnoredTypesConfigurer) {
         continue;
       }
-      configurer.configure(config, builder);
+      configurer.configure(EmptyConfigProperties.INSTANCE, builder);
     }
     return builder.buildIgnoredTypesTrie();
   }

+ 4 - 4
testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingExporterPropertySource.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.testing.exporter;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.javaagent.extension.config.ConfigCustomizer;
+import io.opentelemetry.javaagent.extension.config.ConfigPropertySource;
 import java.util.HashMap;
 import java.util.Map;
 
-@AutoService(ConfigCustomizer.class)
-public class AgentTestingExporterPropertySource implements ConfigCustomizer {
+@AutoService(ConfigPropertySource.class)
+public class AgentTestingExporterPropertySource implements ConfigPropertySource {
 
   @Override
-  public Map<String, String> defaultProperties() {
+  public Map<String, String> getProperties() {
     Map<String, String> properties = new HashMap<>();
     properties.put("otel.logs.exporter", "none");
     properties.put("otel.metrics.exporter", "none");

+ 4 - 4
testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/http/CapturedHttpHeadersTestConfigSource.java

@@ -6,15 +6,15 @@
 package io.opentelemetry.javaagent.testing.http;
 
 import com.google.auto.service.AutoService;
-import io.opentelemetry.javaagent.extension.config.ConfigCustomizer;
+import io.opentelemetry.javaagent.extension.config.ConfigPropertySource;
 import java.util.HashMap;
 import java.util.Map;
 
-@AutoService(ConfigCustomizer.class)
-public class CapturedHttpHeadersTestConfigSource implements ConfigCustomizer {
+@AutoService(ConfigPropertySource.class)
+public class CapturedHttpHeadersTestConfigSource implements ConfigPropertySource {
 
   @Override
-  public Map<String, String> defaultProperties() {
+  public Map<String, String> getProperties() {
     Map<String, String> testConfig = new HashMap<>();
     testConfig.put("otel.instrumentation.http.capture-headers.client.request", "X-Test-Request");
     testConfig.put("otel.instrumentation.http.capture-headers.client.response", "X-Test-Response");