Skip to content

Commit c689331

Browse files
committed
Revert "declarative config: early init and property mapping (open-telemetry#14184)"
This reverts commit 12dac23.
1 parent e2f7fb3 commit c689331

File tree

25 files changed

+207
-459
lines changed

25 files changed

+207
-459
lines changed

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,15 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.config.internal;
77

8-
import static java.util.Collections.emptyList;
98
import static java.util.Collections.emptyMap;
109

11-
import io.opentelemetry.api.incubator.config.ConfigProvider;
12-
import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil;
1310
import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants;
1411
import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver;
1512
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
1613
import java.util.ArrayList;
1714
import java.util.HashSet;
1815
import java.util.List;
1916
import java.util.Set;
20-
import java.util.function.Function;
21-
import java.util.function.Supplier;
2217

2318
/**
2419
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
@@ -44,37 +39,16 @@ public final class CommonConfig {
4439
public CommonConfig(InstrumentationConfig config) {
4540
peerServiceResolver =
4641
PeerServiceResolver.create(
47-
getFromConfigProviderOrFallback(
48-
config,
49-
InstrumentationConfigUtil::peerServiceMapping,
50-
emptyMap(),
51-
() ->
52-
config.getMap("otel.instrumentation.common.peer-service-mapping", emptyMap())));
42+
config.getMap("otel.instrumentation.common.peer-service-mapping", emptyMap()));
5343

5444
clientRequestHeaders =
55-
getFromConfigProviderOrFallback(
56-
config,
57-
InstrumentationConfigUtil::httpClientRequestCapturedHeaders,
58-
emptyList(),
59-
() -> config.getList("otel.instrumentation.http.client.capture-request-headers"));
45+
config.getList("otel.instrumentation.http.client.capture-request-headers");
6046
clientResponseHeaders =
61-
getFromConfigProviderOrFallback(
62-
config,
63-
InstrumentationConfigUtil::httpClientResponseCapturedHeaders,
64-
emptyList(),
65-
() -> config.getList("otel.instrumentation.http.client.capture-response-headers"));
47+
config.getList("otel.instrumentation.http.client.capture-response-headers");
6648
serverRequestHeaders =
67-
getFromConfigProviderOrFallback(
68-
config,
69-
InstrumentationConfigUtil::httpServerRequestCapturedHeaders,
70-
emptyList(),
71-
() -> config.getList("otel.instrumentation.http.server.capture-request-headers"));
49+
config.getList("otel.instrumentation.http.server.capture-request-headers");
7250
serverResponseHeaders =
73-
getFromConfigProviderOrFallback(
74-
config,
75-
InstrumentationConfigUtil::httpServerResponseCapturedHeaders,
76-
emptyList(),
77-
() -> config.getList("otel.instrumentation.http.server.capture-response-headers"));
51+
config.getList("otel.instrumentation.http.server.capture-response-headers");
7852
knownHttpRequestMethods =
7953
new HashSet<>(
8054
config.getList(
@@ -156,18 +130,4 @@ public String getSpanIdKey() {
156130
public String getTraceFlagsKey() {
157131
return loggingTraceFlagsKey;
158132
}
159-
160-
private static <T> T getFromConfigProviderOrFallback(
161-
InstrumentationConfig config,
162-
Function<ConfigProvider, T> getFromConfigProvider,
163-
T defaultValue,
164-
Supplier<T> fallback) {
165-
ConfigProvider configProvider = config.getConfigProvider();
166-
if (configProvider != null) {
167-
T value = getFromConfigProvider.apply(configProvider);
168-
return value != null ? value : defaultValue;
169-
}
170-
// fallback doesn't return null, so we can safely call it
171-
return fallback.get();
172-
}
173133
}

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static java.util.Collections.emptyList;
99

10-
import io.opentelemetry.api.incubator.config.ConfigProvider;
1110
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1211
import java.time.Duration;
1312
import java.util.List;
@@ -110,30 +109,17 @@ default List<String> getList(String name) {
110109
*/
111110
Map<String, String> getMap(String name, Map<String, String> defaultValue);
112111

113-
/** Returns {@code true} if declarative configuration is used in this configuration. */
114-
boolean isDeclarative();
115-
116112
/**
117-
* Returns a {@link DeclarativeConfigProperties} for the given node name, which is usually an
118-
* instrumentation name
119-
*
120-
* <p>Call {@link #isDeclarative()} first to check if declarative configuration is used.
113+
* Returns a {@link DeclarativeConfigProperties} for the given instrumentation name, or {@code
114+
* null} if no declarative configuration is available for that instrumentation.
121115
*
122116
* <p>Declarative configuration is used to configure instrumentation properties in a declarative
123117
* way, such as through YAML or JSON files.
124118
*
125-
* @param node the name of the instrumentation (e.g. "log4j"), the vendor name (e.g. "google"), or
126-
* "common" for common Java settings that don't apply to other languages.
127-
* @return the declarative configuration properties for the given node name
128-
* @throws IllegalStateException if {@link #isDeclarative()} returns {@code false}
129-
*/
130-
DeclarativeConfigProperties getDeclarativeConfig(String node);
131-
132-
/**
133-
* Returns the {@link ConfigProvider} if declarative configuration is used.
134-
*
135-
* @return the {@link ConfigProvider} or {@code null} if no provider is available
119+
* @param instrumentationName the name of the instrumentation
120+
* @return the declarative configuration properties for the given instrumentation name, or {@code
121+
* null} if not available
136122
*/
137123
@Nullable
138-
ConfigProvider getConfigProvider();
124+
DeclarativeConfigProperties getDeclarativeConfig(String instrumentationName);
139125
}

instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/jmx/JmxMetricInsightInstaller.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
import io.opentelemetry.instrumentation.jmx.engine.MetricConfiguration;
1515
import io.opentelemetry.instrumentation.jmx.yaml.RuleParser;
1616
import io.opentelemetry.javaagent.extension.AgentListener;
17+
import io.opentelemetry.javaagent.extension.internal.ConfigPropertiesUtil;
1718
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
18-
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
1919
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
2020
import java.io.InputStream;
2121
import java.nio.file.Files;
@@ -29,7 +29,7 @@ public class JmxMetricInsightInstaller implements AgentListener {
2929

3030
@Override
3131
public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) {
32-
ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk);
32+
ConfigProperties config = ConfigPropertiesUtil.resolveConfigProperties(autoConfiguredSdk);
3333

3434
if (config.getBoolean("otel.jmx.enabled", true)) {
3535
JmxMetricInsight service =

instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import static java.util.Collections.singletonMap;
1111

1212
import com.google.auto.service.AutoService;
13+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1314
import io.opentelemetry.api.trace.SpanKind;
14-
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
1515
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
1616
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@@ -34,11 +34,10 @@ public MethodInstrumentationModule() {
3434
}
3535

3636
private static List<TypeInstrumentation> createInstrumentations() {
37-
InstrumentationConfig config = AgentInstrumentationConfig.get();
37+
DeclarativeConfigProperties methods =
38+
AgentInstrumentationConfig.get().getDeclarativeConfig("methods");
3839
List<TypeInstrumentation> list =
39-
config.isDeclarative()
40-
? MethodsConfig.parseDeclarativeConfig(config.getDeclarativeConfig("methods"))
41-
: parseConfigProperties();
40+
methods != null ? MethodsConfig.parseDeclarativeConfig(methods) : parseConfigProperties();
4241
// ensure that there is at least one instrumentation so that muzzle reference collection could
4342
// work
4443
if (list.isEmpty()) {

instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
import com.google.auto.service.AutoService;
99
import io.opentelemetry.javaagent.extension.AgentListener;
10+
import io.opentelemetry.javaagent.extension.internal.ConfigPropertiesUtil;
1011
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
11-
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
1212
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1313
import java.lang.reflect.Method;
1414

@@ -21,7 +21,7 @@ public class OshiMetricsInstaller implements AgentListener {
2121

2222
@Override
2323
public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) {
24-
ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk);
24+
ConfigProperties config = ConfigPropertiesUtil.resolveConfigProperties(autoConfiguredSdk);
2525

2626
boolean defaultEnabled = config.getBoolean("otel.instrumentation.common.default-enabled", true);
2727
if (!config.getBoolean("otel.instrumentation.oshi.enabled", defaultEnabled)) {

instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzerInstaller.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
import com.google.auto.service.AutoService;
99
import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder;
10+
import io.opentelemetry.javaagent.extension.internal.ConfigPropertiesUtil;
1011
import io.opentelemetry.javaagent.tooling.BeforeAgentListener;
1112
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
12-
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
1313
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1414
import java.lang.instrument.Instrumentation;
1515

@@ -19,7 +19,8 @@ public class JarAnalyzerInstaller implements BeforeAgentListener {
1919

2020
@Override
2121
public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
22-
ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk);
22+
ConfigProperties config =
23+
ConfigPropertiesUtil.resolveConfigProperties(autoConfiguredOpenTelemetrySdk);
2324

2425
boolean enabled =
2526
config.getBoolean("otel.instrumentation.runtime-telemetry.package-emitter.enabled", false);

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties;
77

8-
import io.opentelemetry.api.incubator.config.ConfigProvider;
98
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
109
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
1110
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
@@ -111,21 +110,10 @@ public Map<String, String> getMap(String name, Map<String, String> defaultValue)
111110
}
112111
}
113112

114-
@Override
115-
public boolean isDeclarative() {
116-
return false;
117-
}
118-
119-
@Override
120-
public DeclarativeConfigProperties getDeclarativeConfig(String node) {
121-
throw new IllegalStateException(
122-
"Declarative configuration is not supported in spring boot autoconfigure yet");
123-
}
124-
125113
@Nullable
126114
@Override
127-
public ConfigProvider getConfigProvider() {
128-
// declarative config support will be added in the future
115+
public DeclarativeConfigProperties getDeclarativeConfig(String instrumentationName) {
116+
// create a spring boot bridge for DeclarativeConfigProperties
129117
return null;
130118
}
131119
}

javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/EmptyInstrumentationConfig.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package io.opentelemetry.javaagent.bootstrap.internal;
77

8-
import io.opentelemetry.api.incubator.config.ConfigProvider;
98
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
109
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
1110
import java.time.Duration;
@@ -61,20 +60,9 @@ public Map<String, String> getMap(String name, Map<String, String> defaultValue)
6160
return defaultValue;
6261
}
6362

64-
@Override
65-
public boolean isDeclarative() {
66-
return false;
67-
}
68-
69-
@Override
70-
public DeclarativeConfigProperties getDeclarativeConfig(String node) {
71-
throw new IllegalStateException(
72-
"Declarative configuration is not supported in the empty instrumentation config");
73-
}
74-
7563
@Nullable
7664
@Override
77-
public ConfigProvider getConfigProvider() {
65+
public DeclarativeConfigProperties getDeclarativeConfig(String instrumentationName) {
7866
return null;
7967
}
8068
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.extension.internal;
7+
8+
import io.opentelemetry.api.incubator.config.ConfigProvider;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
11+
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
12+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
13+
14+
/**
15+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
16+
* any time.
17+
*/
18+
public final class ConfigPropertiesUtil {
19+
private ConfigPropertiesUtil() {}
20+
21+
/** Resolve {@link ConfigProperties} from the {@code autoConfiguredOpenTelemetrySdk}. */
22+
public static ConfigProperties resolveConfigProperties(
23+
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
24+
ConfigProperties sdkConfigProperties =
25+
AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk);
26+
if (sdkConfigProperties != null) {
27+
return sdkConfigProperties;
28+
}
29+
ConfigProvider configProvider =
30+
AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk);
31+
if (configProvider != null) {
32+
DeclarativeConfigProperties instrumentationConfig = configProvider.getInstrumentationConfig();
33+
34+
if (instrumentationConfig == null) {
35+
instrumentationConfig = DeclarativeConfigProperties.empty();
36+
}
37+
38+
return new DeclarativeConfigPropertiesBridge(instrumentationConfig);
39+
}
40+
// Should never happen
41+
throw new IllegalStateException(
42+
"AutoConfiguredOpenTelemetrySdk does not have ConfigProperties or DeclarativeConfigProperties. This is likely a programming error in opentelemetry-java");
43+
}
44+
}

0 commit comments

Comments
 (0)