Skip to content

Commit 775c0b2

Browse files
committed
revert to using system props for early init with declarative config to avoid classloading issues
1 parent 1ec8ff4 commit 775c0b2

File tree

7 files changed

+41
-110
lines changed

7 files changed

+41
-110
lines changed

javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/DeclarativeConfigPropertiesBridge.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ public final class DeclarativeConfigPropertiesBridge implements ConfigProperties
9191
"http.server.response_captured_headers");
9292
}
9393

94-
private final String logLevel;
95-
9694
private static Map<String, String> getPeerServiceMapping(
9795
DeclarativeConfigPropertiesBridge bridge) {
9896
List<DeclarativeConfigProperties> configProperties =
@@ -107,8 +105,7 @@ private static Map<String, String> getPeerServiceMapping(
107105
e -> Objects.requireNonNull(e.getString("service"), "service must not be null")));
108106
}
109107

110-
public DeclarativeConfigPropertiesBridge(ConfigProvider configProvider, String logLevel) {
111-
this.logLevel = logLevel;
108+
public DeclarativeConfigPropertiesBridge(ConfigProvider configProvider) {
112109
DeclarativeConfigProperties inst = configProvider.getInstrumentationConfig();
113110
if (inst == null) {
114111
inst = DeclarativeConfigProperties.empty();
@@ -130,10 +127,6 @@ public String getString(String propertyName) {
130127
@Nullable
131128
@Override
132129
public Boolean getBoolean(String propertyName) {
133-
if ("otel.javaagent.debug".equals(propertyName)) {
134-
return "DEBUG".equals(this.logLevel);
135-
}
136-
137130
return getPropertyValue(propertyName, DeclarativeConfigProperties::getBoolean);
138131
}
139132

javaagent-extension-api/src/test/java/io/opentelemetry/javaagent/extension/DeclarativeConfigPropertiesBridgeTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void setup() {
3838
.withAdditionalProperty("instrumentation/development", new InstrumentationModel());
3939
SdkConfigProvider emptyConfigProvider = SdkConfigProvider.create(emptyModel);
4040
emptyBridge =
41-
new DeclarativeConfigPropertiesBridge(Objects.requireNonNull(emptyConfigProvider), "DEBUG");
41+
new DeclarativeConfigPropertiesBridge(Objects.requireNonNull(emptyConfigProvider));
4242
}
4343

4444
private static DeclarativeConfigPropertiesBridge create(String name) {
@@ -47,7 +47,7 @@ private static DeclarativeConfigPropertiesBridge create(String name) {
4747
DeclarativeConfigPropertiesBridgeTest.class.getClassLoader().getResourceAsStream(name));
4848
SdkConfigProvider configProvider = SdkConfigProvider.create(model);
4949
DeclarativeConfigPropertiesBridge configPropertiesBridge =
50-
new DeclarativeConfigPropertiesBridge(Objects.requireNonNull(configProvider), "DEBUG");
50+
new DeclarativeConfigPropertiesBridge(Objects.requireNonNull(configProvider));
5151
return configPropertiesBridge;
5252
}
5353

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ public class AgentInstaller {
7878

7979
private static final Logger logger = Logger.getLogger(AgentInstaller.class.getName());
8080

81+
static final String JAVAAGENT_ENABLED_CONFIG = "otel.javaagent.enabled";
82+
8183
// This property may be set to force synchronous AgentListener#afterAgent() execution: the
8284
// condition for delaying the AgentListener initialization is pretty broad and in case it covers
8385
// too much javaagent users can file a bug, force sync execution by setting this property to true
@@ -103,7 +105,7 @@ public static void installBytebuddyAgent(
103105
}
104106

105107
logVersionInfo();
106-
if (earlyConfig.isAgentEnabled()) {
108+
if (earlyConfig.getBoolean(JAVAAGENT_ENABLED_CONFIG, true)) {
107109
setupUnsafe(inst);
108110
List<AgentListener> agentListeners = loadOrdered(AgentListener.class, extensionClassLoader);
109111
installBytebuddyAgent(inst, extensionClassLoader, agentListeners, earlyConfig);
@@ -160,6 +162,7 @@ private static void installBytebuddyAgent(
160162

161163
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
162164
earlyConfig.installOpenTelemetrySdk(extensionClassLoader);
165+
EarlyInitAgentConfig.setForceFlush(autoConfiguredSdk.getOpenTelemetrySdk());
163166

164167
ConfigProperties sdkConfig = AutoConfigureUtil.getConfig(autoConfiguredSdk);
165168
AgentInstrumentationConfig.internalInitializeConfig(

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/BrokenEarlyInitAgentConfig.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/DeclarativeConfigEarlyInitAgentConfig.java

Lines changed: 15 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,18 @@
77

88
import io.opentelemetry.api.GlobalOpenTelemetry;
99
import io.opentelemetry.api.incubator.config.GlobalConfigProvider;
10-
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
10+
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
1111
import io.opentelemetry.javaagent.extension.DeclarativeConfigPropertiesBridge;
1212
import io.opentelemetry.sdk.OpenTelemetrySdk;
1313
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
1414
import io.opentelemetry.sdk.autoconfigure.SdkAutoconfigureAccess;
1515
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
16-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
17-
import io.opentelemetry.sdk.common.CompletableResultCode;
1816
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
1917
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
2018
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
2119
import io.opentelemetry.sdk.resources.Resource;
2220
import java.io.FileInputStream;
2321
import java.io.IOException;
24-
import java.util.Arrays;
25-
import java.util.Objects;
2622
import javax.annotation.Nullable;
2723
import org.jetbrains.annotations.NotNull;
2824

@@ -31,48 +27,31 @@
3127
* io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties}) is initialized.
3228
*/
3329
public final class DeclarativeConfigEarlyInitAgentConfig implements EarlyInitAgentConfig {
34-
private final OpenTelemetryConfigurationModel configurationModel;
35-
private final ConfigProperties declarativeConfigProperties;
36-
private final SdkConfigProvider configProvider;
30+
private final String configurationFile;
3731

38-
DeclarativeConfigEarlyInitAgentConfig(OpenTelemetryConfigurationModel model) {
39-
this.configurationModel = model;
40-
configProvider = SdkConfigProvider.create(configurationModel);
41-
this.declarativeConfigProperties =
42-
new DeclarativeConfigPropertiesBridge(
43-
configProvider, this.configurationModel.getLogLevel());
32+
DeclarativeConfigEarlyInitAgentConfig(String configurationFile) {
33+
this.configurationFile = configurationFile;
4434
}
4535

4636
@NotNull
4737
public static EarlyInitAgentConfig create(String configurationFile) {
48-
OpenTelemetryConfigurationModel model = loadConfigurationModel(configurationFile);
49-
if (model == null) {
50-
// broken configuration file, return a broken config, error is logged later
51-
return new BrokenEarlyInitAgentConfig();
52-
}
53-
54-
return new DeclarativeConfigEarlyInitAgentConfig(model);
55-
}
56-
57-
@Override
58-
public boolean isAgentEnabled() {
59-
return !Objects.equals(configurationModel.getDisabled(), true);
38+
return new DeclarativeConfigEarlyInitAgentConfig(configurationFile);
6039
}
6140

6241
@Nullable
6342
@Override
6443
public String getString(String propertyName) {
65-
return declarativeConfigProperties.getString(propertyName);
44+
return ConfigPropertiesUtil.getString(propertyName);
6645
}
6746

6847
@Override
6948
public boolean getBoolean(String propertyName, boolean defaultValue) {
70-
return declarativeConfigProperties.getBoolean(propertyName, defaultValue);
49+
return ConfigPropertiesUtil.getBoolean(propertyName, defaultValue);
7150
}
7251

7352
@Override
7453
public int getInt(String propertyName, int defaultValue) {
75-
return declarativeConfigProperties.getInt(propertyName, defaultValue);
54+
return ConfigPropertiesUtil.getInt(propertyName, defaultValue);
7655
}
7756

7857
@Nullable
@@ -88,27 +67,19 @@ private static OpenTelemetryConfigurationModel loadConfigurationModel(String con
8867

8968
@Override
9069
public AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk(ClassLoader extensionClassLoader) {
70+
OpenTelemetryConfigurationModel model = loadConfigurationModel(configurationFile);
71+
SdkConfigProvider configProvider = SdkConfigProvider.create(model);
72+
DeclarativeConfigPropertiesBridge configProperties =
73+
new DeclarativeConfigPropertiesBridge(configProvider);
9174
OpenTelemetrySdk sdk =
9275
DeclarativeConfiguration.create(
93-
this.configurationModel, SpiHelper.serviceComponentLoader(extensionClassLoader));
76+
model, SpiHelper.serviceComponentLoader(extensionClassLoader));
9477
Runtime.getRuntime().addShutdownHook(new Thread(sdk::close));
9578
GlobalOpenTelemetry.set(sdk);
96-
GlobalConfigProvider.set(this.configProvider);
97-
98-
setForceFlush(sdk);
79+
GlobalConfigProvider.set(configProvider);
9980

10081
return SdkAutoconfigureAccess.create(
101-
sdk, Resource.getDefault(), this.declarativeConfigProperties, this.configProvider);
82+
sdk, Resource.getDefault(), configProperties, configProvider);
10283
}
10384

104-
static void setForceFlush(OpenTelemetrySdk sdk) {
105-
OpenTelemetrySdkAccess.internalSetForceFlush(
106-
(timeout, unit) -> {
107-
CompletableResultCode traceResult = sdk.getSdkTracerProvider().forceFlush();
108-
CompletableResultCode metricsResult = sdk.getSdkMeterProvider().forceFlush();
109-
CompletableResultCode logsResult = sdk.getSdkLoggerProvider().forceFlush();
110-
CompletableResultCode.ofAll(Arrays.asList(traceResult, metricsResult, logsResult))
111-
.join(timeout, unit);
112-
});
113-
}
11485
}

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55

66
package io.opentelemetry.javaagent.tooling.config;
77

8+
import static java.util.Arrays.asList;
9+
10+
import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess;
811
import io.opentelemetry.sdk.OpenTelemetrySdk;
912
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
1013
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
14+
import io.opentelemetry.sdk.common.CompletableResultCode;
1115
import java.util.Collections;
1216
import javax.annotation.Nullable;
1317

1418
public interface EarlyInitAgentConfig {
15-
boolean isAgentEnabled();
1619

1720
@Nullable
1821
String getString(String propertyName);
@@ -38,4 +41,15 @@ static EarlyInitAgentConfig create() {
3841
? DeclarativeConfigEarlyInitAgentConfig.create(configurationFile)
3942
: new LegacyConfigFileEarlyInitAgentConfig();
4043
}
44+
45+
static void setForceFlush(OpenTelemetrySdk sdk) {
46+
OpenTelemetrySdkAccess.internalSetForceFlush(
47+
(timeout, unit) -> {
48+
CompletableResultCode traceResult = sdk.getSdkTracerProvider().forceFlush();
49+
CompletableResultCode metricsResult = sdk.getSdkMeterProvider().forceFlush();
50+
CompletableResultCode logsResult = sdk.getSdkLoggerProvider().forceFlush();
51+
CompletableResultCode.ofAll(asList(traceResult, metricsResult, logsResult))
52+
.join(timeout, unit);
53+
});
54+
}
4155
}

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/LegacyConfigFileEarlyInitAgentConfig.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.opentelemetry.javaagent.tooling.config;
77

88
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
9-
import io.opentelemetry.sdk.OpenTelemetrySdk;
109
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
1110
import java.util.Map;
1211
import javax.annotation.Nullable;
@@ -25,11 +24,6 @@ public final class LegacyConfigFileEarlyInitAgentConfig implements EarlyInitAgen
2524
this.configFileContents = ConfigurationFile.getProperties();
2625
}
2726

28-
@Override
29-
public boolean isAgentEnabled() {
30-
return getBoolean(JAVAAGENT_ENABLED_CONFIG, true);
31-
}
32-
3327
@Nullable
3428
@Override
3529
public String getString(String propertyName) {
@@ -62,13 +56,9 @@ public int getInt(String propertyName, int defaultValue) {
6256

6357
@Override
6458
public AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk(ClassLoader extensionClassLoader) {
65-
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
66-
AutoConfiguredOpenTelemetrySdk.builder()
67-
.setResultAsGlobal()
68-
.setServiceClassLoader(extensionClassLoader)
69-
.build();
70-
OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk();
71-
DeclarativeConfigEarlyInitAgentConfig.setForceFlush(sdk);
72-
return autoConfiguredSdk;
59+
return AutoConfiguredOpenTelemetrySdk.builder()
60+
.setResultAsGlobal()
61+
.setServiceClassLoader(extensionClassLoader)
62+
.build();
7363
}
7464
}

0 commit comments

Comments
 (0)