Skip to content

Commit 9b84e85

Browse files
committed
no api changes
1 parent 4091afa commit 9b84e85

16 files changed

+291
-233
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77

88
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
99
import io.opentelemetry.api.incubator.config.ConfigProvider;
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
1011
import io.opentelemetry.sdk.common.CompletableResultCode;
1112
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1213
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
1314
import io.opentelemetry.sdk.trace.SdkTracerProvider;
15+
import javax.annotation.Nullable;
1416
import java.io.Closeable;
17+
import java.lang.reflect.Field;
1518

1619
/** A new interface for creating OpenTelemetrySdk that supports getting {@link ConfigProvider}. */
1720
public interface ExtendedOpenTelemetrySdk extends ExtendedOpenTelemetry, Closeable {
@@ -27,4 +30,16 @@ public interface ExtendedOpenTelemetrySdk extends ExtendedOpenTelemetry, Closeab
2730
static ExtendedOpenTelemetrySdkBuilder builder() {
2831
return new ExtendedOpenTelemetrySdkBuilder();
2932
}
33+
34+
@Nullable default ExtendedOpenTelemetrySdk fromOpenTelemetrySdk(OpenTelemetrySdk openTelemetry) {
35+
try {
36+
Class<?> sdk = Class.forName("io.opentelemetry.sdk.OpenTelemetrySdk");
37+
Field extendedOpenTelemetrySdk = sdk.getDeclaredField("extendedOpenTelemetrySdk");
38+
extendedOpenTelemetrySdk.setAccessible(true);
39+
return (ExtendedOpenTelemetrySdk) extendedOpenTelemetrySdk.get(openTelemetry);
40+
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
41+
throw new IllegalStateException(
42+
"Cannot create ExtendedOpenTelemetrySdk from OpenTelemetrySdk", e);
43+
}
44+
}
3045
}

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

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,32 @@
1010
import io.opentelemetry.context.propagation.ContextPropagators;
1111
import io.opentelemetry.sdk.OpenTelemetrySdk;
1212
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
1315
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1416
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
1517
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
1618
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
1719
import io.opentelemetry.sdk.trace.SdkTracerProvider;
1820
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
21+
import java.io.Closeable;
22+
import java.lang.reflect.InvocationTargetException;
23+
import java.lang.reflect.Method;
1924
import java.util.Objects;
2025
import java.util.function.Consumer;
2126

22-
/** A new interface for creating OpenTelemetrySdk that supports {@link ConfigProvider}. */
27+
/** An builder for creating an {@link ExtendedOpenTelemetrySdk} instance. */
2328
public final class ExtendedOpenTelemetrySdkBuilder {
2429
private final SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
2530
private final SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
2631
private final SdkLoggerProviderBuilder loggerProviderBuilder = SdkLoggerProvider.builder();
2732
private ContextPropagators propagators = ContextPropagators.noop();
28-
private ConfigProvider configProvider = ConfigProvider.noop();
33+
private ConfigProvider configProvider =
34+
SdkConfigProvider.create(new OpenTelemetryConfigurationModel());
35+
private Consumer<Closeable> closeableConsumer =
36+
closeable -> {
37+
// Default no-op closeable consumer
38+
};
2939

3040
/** Sets the {@link ContextPropagators} to use. */
3141
public ExtendedOpenTelemetrySdkBuilder setPropagators(ContextPropagators propagators) {
@@ -39,6 +49,11 @@ public ExtendedOpenTelemetrySdkBuilder setConfigProvider(ConfigProvider configPr
3949
return this;
4050
}
4151

52+
public ExtendedOpenTelemetrySdkBuilder setCloseableConsumer(Consumer<Closeable> configurator) {
53+
this.closeableConsumer = Objects.requireNonNull(configurator, "configurator must not be null");
54+
return this;
55+
}
56+
4257
/**
4358
* Applies a consumer callback to configure the TracerProvider being built for this OpenTelemetry.
4459
*
@@ -84,12 +99,35 @@ public ExtendedOpenTelemetrySdkBuilder withLoggerProvider(
8499
*
85100
* @see GlobalOpenTelemetry
86101
*/
87-
public ExtendedOpenTelemetrySdk build() {
102+
public OpenTelemetrySdk build() {
88103
SdkTracerProvider tracerProvider = tracerProviderBuilder.build();
89104
SdkMeterProvider meterProvider = meterProviderBuilder.build();
90105
SdkLoggerProvider loggerProvider = loggerProviderBuilder.build();
91-
return new ObfuscatedExtendedOpenTelemetrySdk(
92-
configProvider, tracerProvider, meterProvider, loggerProvider, propagators);
106+
closeableConsumer.accept(tracerProvider);
107+
closeableConsumer.accept(meterProvider);
108+
closeableConsumer.accept(loggerProvider);
109+
ExtendedOpenTelemetrySdk extendedOpenTelemetrySdk =
110+
new ObfuscatedExtendedOpenTelemetrySdk(
111+
configProvider, tracerProvider, meterProvider, loggerProvider, propagators);
112+
closeableConsumer.accept(extendedOpenTelemetrySdk);
113+
114+
OpenTelemetrySdkBuilder builder =
115+
OpenTelemetrySdk.builder()
116+
.setTracerProvider(tracerProvider)
117+
.setMeterProvider(meterProvider)
118+
.setLoggerProvider(loggerProvider)
119+
.setPropagators(propagators);
120+
121+
try {
122+
Method setExtendedOpenTelemetrySdk =
123+
builder.getClass().getDeclaredMethod("setExtendedOpenTelemetrySdk", Object.class);
124+
setExtendedOpenTelemetrySdk.setAccessible(true);
125+
setExtendedOpenTelemetrySdk.invoke(builder, extendedOpenTelemetrySdk);
126+
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
127+
throw new IllegalStateException("unable to set extended OpenTelemetry SDK", e);
128+
}
129+
130+
return builder.build();
93131
}
94132

95133
/**
@@ -102,8 +140,8 @@ public ExtendedOpenTelemetrySdk build() {
102140
*
103141
* @see GlobalOpenTelemetry
104142
*/
105-
public ExtendedOpenTelemetrySdk buildAndRegisterGlobal() {
106-
ExtendedOpenTelemetrySdk sdk = build();
143+
public OpenTelemetrySdk buildAndRegisterGlobal() {
144+
OpenTelemetrySdk sdk = build();
107145
GlobalOpenTelemetry.set(sdk);
108146
return sdk;
109147
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import javax.annotation.concurrent.ThreadSafe;
2727

2828
/** The SDK implementation of {@link ExtendedOpenTelemetrySdk}. */
29-
final class ObfuscatedExtendedOpenTelemetrySdk implements ExtendedOpenTelemetrySdk {
29+
public final class ObfuscatedExtendedOpenTelemetrySdk implements ExtendedOpenTelemetrySdk {
3030

3131
private static final Logger LOGGER =
3232
Logger.getLogger(ObfuscatedExtendedOpenTelemetrySdk.class.getName());
@@ -37,7 +37,7 @@ final class ObfuscatedExtendedOpenTelemetrySdk implements ExtendedOpenTelemetryS
3737
private final ConfigProvider configProvider;
3838
private final ContextPropagators propagators;
3939

40-
ObfuscatedExtendedOpenTelemetrySdk(
40+
public ObfuscatedExtendedOpenTelemetrySdk(
4141
ConfigProvider configProvider,
4242
SdkTracerProvider tracerProvider,
4343
SdkMeterProvider meterProvider,

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

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

88
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
99
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
import io.opentelemetry.common.ComponentLoader;
1011
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
1112
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
1213
import java.io.Closeable;
@@ -39,6 +40,9 @@ List<Closeable> getCloseables() {
3940
return Collections.unmodifiableList(closeables);
4041
}
4142

43+
ComponentLoader getComponentLoader() {
44+
return spiHelper.getComponentLoader();
45+
}
4246
/**
4347
* Find a registered {@link ComponentProvider} with {@link ComponentProvider#getType()} matching
4448
* {@code type}, {@link ComponentProvider#getName()} matching {@code name}, and call {@link

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1616
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
1717
import io.opentelemetry.sdk.logs.LogLimits;
18-
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1918
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
2019
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
2120
import io.opentelemetry.sdk.logs.internal.SdkLoggerProviderUtil;
2221
import java.util.List;
2322

24-
final class LoggerProviderFactory
25-
implements Factory<LoggerProviderAndAttributeLimits, SdkLoggerProviderBuilder> {
23+
final class LoggerProviderFactory {
2624

2725
private static final LoggerProviderFactory INSTANCE = new LoggerProviderFactory();
2826

@@ -32,14 +30,13 @@ static LoggerProviderFactory getInstance() {
3230
return INSTANCE;
3331
}
3432

35-
@Override
36-
public SdkLoggerProviderBuilder create(
33+
public void configure(
34+
SdkLoggerProviderBuilder builder,
3735
LoggerProviderAndAttributeLimits model, DeclarativeConfigContext context) {
38-
SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
3936

4037
LoggerProviderModel loggerProviderModel = model.getLoggerProvider();
4138
if (loggerProviderModel == null) {
42-
return builder;
39+
return;
4340
}
4441

4542
LogLimits logLimits =
@@ -85,7 +82,6 @@ public SdkLoggerProviderBuilder create(
8582
SdkLoggerProviderUtil.setLoggerConfigurator(builder, configuratorBuilder.build());
8683
}
8784

88-
return builder;
8985
}
9086

9187
private static class LoggerConfigFactory

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@
1717
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewStreamModel;
1818
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1919
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
20-
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
2120
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
2221
import io.opentelemetry.sdk.metrics.export.CardinalityLimitSelector;
2322
import io.opentelemetry.sdk.metrics.internal.MeterConfig;
2423
import io.opentelemetry.sdk.metrics.internal.SdkMeterProviderUtil;
2524
import java.util.List;
2625

27-
final class MeterProviderFactory implements Factory<MeterProviderModel, SdkMeterProviderBuilder> {
26+
final class MeterProviderFactory {
2827

2928
private static final MeterProviderFactory INSTANCE = new MeterProviderFactory();
3029

@@ -34,10 +33,8 @@ static MeterProviderFactory getInstance() {
3433
return INSTANCE;
3534
}
3635

37-
@Override
38-
public SdkMeterProviderBuilder create(
39-
MeterProviderModel model, DeclarativeConfigContext context) {
40-
SdkMeterProviderBuilder builder = SdkMeterProvider.builder();
36+
public void configure(
37+
SdkMeterProviderBuilder builder, MeterProviderModel model, DeclarativeConfigContext context) {
4138

4239
List<MetricReaderModel> readerModels = model.getReaders();
4340
if (readerModels != null) {
@@ -95,7 +92,6 @@ public SdkMeterProviderBuilder create(
9592
SdkMeterProviderUtil.setMeterConfigurator(builder, configuratorBuilder.build());
9693
}
9794

98-
return builder;
9995
}
10096

10197
private static class MeterConfigFactory

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

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

88
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
99
import io.opentelemetry.sdk.OpenTelemetrySdk;
10-
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
10+
import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdkBuilder;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MeterProviderModel;
1113
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
1215
import io.opentelemetry.sdk.resources.Resource;
1316
import java.util.Objects;
1417
import java.util.regex.Pattern;
@@ -30,7 +33,7 @@ static OpenTelemetryConfigurationFactory getInstance() {
3033
@Override
3134
public OpenTelemetrySdk create(
3235
OpenTelemetryConfigurationModel model, DeclarativeConfigContext context) {
33-
OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
36+
ExtendedOpenTelemetrySdkBuilder builder = new ExtendedOpenTelemetrySdkBuilder();
3437
String fileFormat = model.getFileFormat();
3538
if (fileFormat == null || !SUPPORTED_FILE_FORMATS.matcher(fileFormat).matches()) {
3639
throw new DeclarativeConfigException(
@@ -40,52 +43,56 @@ public OpenTelemetrySdk create(
4043
// behavior for experimental properties.
4144

4245
if (Objects.equals(true, model.getDisabled())) {
43-
return builder.build();
46+
return OpenTelemetrySdk.builder().build();
4447
}
4548

49+
builder.setCloseableConsumer(context::addCloseable);
50+
builder.setConfigProvider(SdkConfigProvider.create(model, context.getComponentLoader()));
4651
if (model.getPropagator() != null) {
4752
builder.setPropagators(
4853
PropagatorFactory.getInstance().create(model.getPropagator(), context));
4954
}
5055

51-
Resource resource = Resource.getDefault();
56+
Resource resource;
5257
if (model.getResource() != null) {
5358
resource = ResourceFactory.getInstance().create(model.getResource(), context);
59+
} else {
60+
resource = Resource.getDefault();
5461
}
5562

56-
if (model.getLoggerProvider() != null) {
57-
builder.setLoggerProvider(
58-
context.addCloseable(
63+
LoggerProviderModel loggerProvider = model.getLoggerProvider();
64+
if (loggerProvider != null) {
65+
builder.withLoggerProvider(
66+
sdkLoggerProviderBuilder ->
5967
LoggerProviderFactory.getInstance()
60-
.create(
68+
.configure(
69+
sdkLoggerProviderBuilder.setResource(resource),
6170
LoggerProviderAndAttributeLimits.create(
62-
model.getAttributeLimits(), model.getLoggerProvider()),
63-
context)
64-
.setResource(resource)
65-
.build()));
71+
model.getAttributeLimits(), loggerProvider),
72+
context));
6673
}
6774

68-
if (model.getTracerProvider() != null) {
69-
builder.setTracerProvider(
70-
context.addCloseable(
75+
TracerProviderModel tracerProvider = model.getTracerProvider();
76+
if (tracerProvider != null) {
77+
builder.withTracerProvider(
78+
sdkTracerProviderBuilder ->
7179
TracerProviderFactory.getInstance()
72-
.create(
80+
.configure(
81+
sdkTracerProviderBuilder.setResource(resource),
7382
TracerProviderAndAttributeLimits.create(
74-
model.getAttributeLimits(), model.getTracerProvider()),
75-
context)
76-
.setResource(resource)
77-
.build()));
83+
model.getAttributeLimits(), tracerProvider),
84+
context));
7885
}
7986

80-
if (model.getMeterProvider() != null) {
81-
builder.setMeterProvider(
82-
context.addCloseable(
87+
MeterProviderModel meterProvider = model.getMeterProvider();
88+
if (meterProvider != null) {
89+
builder.withMeterProvider(
90+
sdkMeterProviderBuilder ->
8391
MeterProviderFactory.getInstance()
84-
.create(model.getMeterProvider(), context)
85-
.setResource(resource)
86-
.build()));
92+
.configure(
93+
sdkMeterProviderBuilder.setResource(resource), meterProvider, context));
8794
}
8895

89-
return context.addCloseable(builder.build());
96+
return builder.build();
9097
}
9198
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,9 @@ public static SdkConfigProvider create(
5050
public DeclarativeConfigProperties getInstrumentationConfig() {
5151
return instrumentationConfig;
5252
}
53+
54+
@Override
55+
public String toString() {
56+
return "SdkConfigProvider{" + "instrumentationConfig=" + instrumentationConfig + '}';
57+
}
5358
}

0 commit comments

Comments
 (0)