Skip to content

Commit 4b7c986

Browse files
committed
extended otel must extend otel - because we need AutoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk() to return the extended instance
1 parent c3e86da commit 4b7c986

File tree

7 files changed

+67
-259
lines changed

7 files changed

+67
-259
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
Comparing source compatibility of opentelemetry-sdk-1.53.0-SNAPSHOT.jar against opentelemetry-sdk-1.52.0.jar
2-
No changes.
2+
*** MODIFIED CLASS: PUBLIC NON_FINAL (<- FINAL) io.opentelemetry.sdk.OpenTelemetrySdk (not serializable)
3+
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdk.java

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,66 @@
77

88
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
99
import io.opentelemetry.api.incubator.config.ConfigProvider;
10-
import io.opentelemetry.sdk.common.CompletableResultCode;
10+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.context.propagation.ContextPropagators;
12+
import io.opentelemetry.sdk.OpenTelemetrySdk;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
1114
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1215
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
1316
import io.opentelemetry.sdk.trace.SdkTracerProvider;
1417
import java.io.Closeable;
18+
import javax.annotation.Nullable;
19+
import javax.annotation.concurrent.ThreadSafe;
1520

1621
/** A new interface for creating OpenTelemetrySdk that supports getting {@link ConfigProvider}. */
17-
public interface ExtendedOpenTelemetrySdk extends ExtendedOpenTelemetry, Closeable {
22+
public class ExtendedOpenTelemetrySdk extends OpenTelemetrySdk
23+
implements ExtendedOpenTelemetry, Closeable {
24+
25+
private final ObfuscatedConfigProvider configProvider;
26+
27+
public ExtendedOpenTelemetrySdk(
28+
SdkTracerProvider tracerProvider,
29+
SdkMeterProvider meterProvider,
30+
SdkLoggerProvider loggerProvider,
31+
ContextPropagators propagators,
32+
SdkConfigProvider configProvider) {
33+
super(tracerProvider, meterProvider, loggerProvider, propagators);
34+
this.configProvider = new ObfuscatedConfigProvider(configProvider);
35+
}
36+
37+
@Override
38+
public ConfigProvider getConfigProvider() {
39+
return configProvider.unobfuscate();
40+
}
41+
1842
/**
19-
* Shutdown the SDK. Calls {@link SdkTracerProvider#shutdown()}, {@link
20-
* SdkMeterProvider#shutdown()}, and {@link SdkLoggerProvider#shutdown()}.
43+
* This class allows the SDK to unobfuscate an obfuscated static global provider.
2144
*
22-
* @return a {@link CompletableResultCode} which completes when all providers are shutdown
45+
* <p>Static global providers are obfuscated when they are returned from the API to prevent users
46+
* from casting them to their SDK specific implementation. For example, we do not want users to
47+
* use patterns like {@code (SdkMeterProvider) openTelemetry.getMeterProvider()}.
2348
*/
24-
CompletableResultCode shutdown();
49+
@ThreadSafe
50+
// Visible for testing
51+
static class ObfuscatedConfigProvider implements ConfigProvider {
52+
53+
private final SdkConfigProvider delegate;
54+
55+
ObfuscatedConfigProvider(SdkConfigProvider delegate) {
56+
this.delegate = delegate;
57+
}
58+
59+
@Override
60+
@Nullable
61+
public DeclarativeConfigProperties getInstrumentationConfig() {
62+
if (delegate == null) {
63+
return null;
64+
}
65+
return delegate.getInstrumentationConfig();
66+
}
2567

26-
/** Returns a builder for {@link ExtendedOpenTelemetrySdk}. */
27-
static ExtendedOpenTelemetrySdkBuilder builder() {
28-
return new ExtendedOpenTelemetrySdkBuilder();
68+
public SdkConfigProvider unobfuscate() {
69+
return delegate;
70+
}
2971
}
3072
}

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ExtendedOpenTelemetrySdkBuilder.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.opentelemetry.sdk.OpenTelemetrySdk;
1212
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
1313
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1415
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1516
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
1617
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
@@ -20,15 +21,15 @@
2021
import java.io.Closeable;
2122
import java.util.Objects;
2223
import java.util.function.Consumer;
23-
import javax.annotation.Nullable;
2424

25-
/** A new interface for creating OpenTelemetrySdk that supports {@link ConfigProvider}. */
25+
/** An builder for creating an {@link ExtendedOpenTelemetrySdk} instance. */
2626
public final class ExtendedOpenTelemetrySdkBuilder {
2727
private final SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
2828
private final SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
2929
private final SdkLoggerProviderBuilder loggerProviderBuilder = SdkLoggerProvider.builder();
3030
private ContextPropagators propagators = ContextPropagators.noop();
31-
@Nullable private SdkConfigProvider configProvider;
31+
private SdkConfigProvider configProvider =
32+
SdkConfigProvider.create(new OpenTelemetryConfigurationModel());
3233
private Consumer<Closeable> closeableConsumer =
3334
closeable -> {
3435
// Default no-op closeable consumer
@@ -103,9 +104,9 @@ public ExtendedOpenTelemetrySdk build() {
103104
closeableConsumer.accept(tracerProvider);
104105
closeableConsumer.accept(meterProvider);
105106
closeableConsumer.accept(loggerProvider);
106-
ObfuscatedExtendedOpenTelemetrySdk sdk =
107-
new ObfuscatedExtendedOpenTelemetrySdk(
108-
configProvider, tracerProvider, meterProvider, loggerProvider, propagators);
107+
ExtendedOpenTelemetrySdk sdk =
108+
new ExtendedOpenTelemetrySdk(
109+
tracerProvider, meterProvider, loggerProvider, propagators, configProvider);
109110
closeableConsumer.accept(sdk);
110111
return sdk;
111112
}

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/ObfuscatedExtendedOpenTelemetrySdk.java

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

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ static OpenTelemetryConfigurationFactory getInstance() {
3333
@Override
3434
public ExtendedOpenTelemetrySdk create(
3535
OpenTelemetryConfigurationModel model, DeclarativeConfigContext context) {
36-
ExtendedOpenTelemetrySdkBuilder builder = ExtendedOpenTelemetrySdk.builder();
36+
ExtendedOpenTelemetrySdkBuilder builder = new ExtendedOpenTelemetrySdkBuilder();
3737
String fileFormat = model.getFileFormat();
3838
if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {
3939
throw new DeclarativeConfigException(

0 commit comments

Comments
 (0)