-
Notifications
You must be signed in to change notification settings - Fork 969
feat: always return ExtendedOpenTelemetry when incubator is available #7991
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
0db77eb
495f2af
e78ae70
35dd80d
c90b809
808e482
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| /* | ||
| * Copyright The OpenTelemetry Authors | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| package io.opentelemetry.sdk.extension.incubator.fileconfig; | ||
|
|
||
| import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; | ||
| import java.lang.reflect.Method; | ||
|
|
||
| /** | ||
| * This class is internal and is hence not for public use. Its APIs are unstable and can change at | ||
| * any time. | ||
| */ | ||
| public final class OpenTelemetrySdkBuilderUtil { | ||
|
|
||
| private OpenTelemetrySdkBuilderUtil() {} | ||
|
|
||
| public static OpenTelemetrySdkBuilder setSdkConfigProvider( | ||
| OpenTelemetrySdkBuilder builder, SdkConfigProvider sdkConfigProvider) { | ||
| try { | ||
| Method method = | ||
| OpenTelemetrySdkBuilder.class.getDeclaredMethod("setSdkConfigProvider", Object.class); | ||
| method.setAccessible(true); | ||
| method.invoke(builder, sdkConfigProvider); | ||
| return builder; | ||
| } catch (NoSuchMethodException | ||
| | IllegalAccessException | ||
| | java.lang.reflect.InvocationTargetException e) { | ||
| throw new IllegalStateException( | ||
| "Error calling setSdkConfigProvider on OpenTelemetrySdkBuilder", e); | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -123,9 +123,10 @@ void create_Defaults() { | |
| List<Closeable> closeables = new ArrayList<>(); | ||
| OpenTelemetryConfigurationModel model = | ||
| new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.1"); | ||
| ExtendedOpenTelemetrySdk expectedSdk = | ||
| ExtendedOpenTelemetrySdk.create( | ||
| OpenTelemetrySdk.builder().build(), SdkConfigProvider.create(model)); | ||
| OpenTelemetrySdk expectedSdk = | ||
| OpenTelemetrySdkBuilderUtil.setSdkConfigProvider( | ||
| OpenTelemetrySdk.builder(), SdkConfigProvider.create(model)) | ||
| .build(); | ||
| cleanup.addCloseable(expectedSdk); | ||
|
|
||
| ExtendedOpenTelemetrySdk sdk = | ||
|
|
@@ -154,9 +155,10 @@ void create_Disabled() { | |
| .withExporter( | ||
| new LogRecordExporterModel() | ||
| .withOtlpHttp(new OtlpHttpExporterModel())))))); | ||
| ExtendedOpenTelemetrySdk expectedSdk = | ||
| ExtendedOpenTelemetrySdk.create( | ||
| OpenTelemetrySdk.builder().build(), SdkConfigProvider.create(model)); | ||
| OpenTelemetrySdk expectedSdk = | ||
| OpenTelemetrySdkBuilderUtil.setSdkConfigProvider( | ||
| OpenTelemetrySdk.builder(), SdkConfigProvider.create(model)) | ||
| .build(); | ||
| cleanup.addCloseable(expectedSdk); | ||
|
|
||
| ExtendedOpenTelemetrySdk sdk = | ||
|
|
@@ -257,63 +259,64 @@ void create_Configured() throws NoSuchFieldException, IllegalAccessException { | |
| .withName("stream-name") | ||
| .withAttributeKeys(null))))); | ||
|
|
||
| ExtendedOpenTelemetrySdk expectedSdk = | ||
| ExtendedOpenTelemetrySdk.create( | ||
| OpenTelemetrySdk.builder() | ||
| .setPropagators( | ||
| ContextPropagators.create( | ||
| TextMapPropagator.composite( | ||
| W3CTraceContextPropagator.getInstance(), | ||
| W3CBaggagePropagator.getInstance(), | ||
| OtTracePropagator.getInstance(), | ||
| B3Propagator.injectingMultiHeaders(), | ||
| B3Propagator.injectingSingleHeader(), | ||
| JaegerPropagator.getInstance()))) | ||
| .setLoggerProvider( | ||
| SdkLoggerProvider.builder() | ||
| .setResource(expectedResource) | ||
| .setLogLimits( | ||
| () -> | ||
| LogLimits.builder() | ||
| .setMaxAttributeValueLength(1) | ||
| .setMaxNumberOfAttributes(2) | ||
| OpenTelemetrySdk expectedSdk = | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This change isn't strictly necessary is it since the test code could still call
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see #7991 (comment) |
||
| OpenTelemetrySdkBuilderUtil.setSdkConfigProvider( | ||
| OpenTelemetrySdk.builder() | ||
| .setPropagators( | ||
| ContextPropagators.create( | ||
| TextMapPropagator.composite( | ||
| W3CTraceContextPropagator.getInstance(), | ||
| W3CBaggagePropagator.getInstance(), | ||
| OtTracePropagator.getInstance(), | ||
| B3Propagator.injectingMultiHeaders(), | ||
| B3Propagator.injectingSingleHeader(), | ||
| JaegerPropagator.getInstance()))) | ||
| .setLoggerProvider( | ||
| SdkLoggerProvider.builder() | ||
| .setResource(expectedResource) | ||
| .setLogLimits( | ||
| () -> | ||
| LogLimits.builder() | ||
| .setMaxAttributeValueLength(1) | ||
| .setMaxNumberOfAttributes(2) | ||
| .build()) | ||
| .addLogRecordProcessor( | ||
| io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder( | ||
| OtlpHttpLogRecordExporter.getDefault()) | ||
| .build()) | ||
| .build()) | ||
| .setTracerProvider( | ||
| SdkTracerProvider.builder() | ||
| .setResource(expectedResource) | ||
| .setSpanLimits( | ||
| SpanLimits.builder() | ||
| .setMaxNumberOfAttributes(1) | ||
| .setMaxAttributeValueLength(2) | ||
| .setMaxNumberOfEvents(3) | ||
| .setMaxNumberOfLinks(4) | ||
| .setMaxNumberOfAttributesPerEvent(5) | ||
| .setMaxNumberOfAttributesPerLink(6) | ||
| .build()) | ||
| .setSampler(alwaysOn()) | ||
| .addSpanProcessor( | ||
| io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder( | ||
| OtlpHttpSpanExporter.getDefault()) | ||
| .build()) | ||
| .addLogRecordProcessor( | ||
| io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder( | ||
| OtlpHttpLogRecordExporter.getDefault()) | ||
| .build()) | ||
| .build()) | ||
| .setTracerProvider( | ||
| SdkTracerProvider.builder() | ||
| .setResource(expectedResource) | ||
| .setSpanLimits( | ||
| SpanLimits.builder() | ||
| .setMaxNumberOfAttributes(1) | ||
| .setMaxAttributeValueLength(2) | ||
| .setMaxNumberOfEvents(3) | ||
| .setMaxNumberOfLinks(4) | ||
| .setMaxNumberOfAttributesPerEvent(5) | ||
| .setMaxNumberOfAttributesPerLink(6) | ||
| .build()) | ||
| .setSampler(alwaysOn()) | ||
| .addSpanProcessor( | ||
| io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder( | ||
| OtlpHttpSpanExporter.getDefault()) | ||
| .build()) | ||
| .build()) | ||
| .setMeterProvider( | ||
| SdkMeterProvider.builder() | ||
| .setResource(expectedResource) | ||
| .registerMetricReader( | ||
| io.opentelemetry.sdk.metrics.export.PeriodicMetricReader.builder( | ||
| OtlpHttpMetricExporter.getDefault()) | ||
| .build()) | ||
| .registerView( | ||
| InstrumentSelector.builder().setName("instrument-name").build(), | ||
| View.builder().setName("stream-name").build()) | ||
| .build()) | ||
| .build(), | ||
| SdkConfigProvider.create(model)); | ||
| .build()) | ||
| .setMeterProvider( | ||
| SdkMeterProvider.builder() | ||
| .setResource(expectedResource) | ||
| .registerMetricReader( | ||
| io.opentelemetry.sdk.metrics.export.PeriodicMetricReader.builder( | ||
| OtlpHttpMetricExporter.getDefault()) | ||
| .build()) | ||
| .registerView( | ||
| InstrumentSelector.builder().setName("instrument-name").build(), | ||
| View.builder().setName("stream-name").build()) | ||
| .build()), | ||
| SdkConfigProvider.create(model)) | ||
| .build(); | ||
|
|
||
| cleanup.addCloseable(expectedSdk); | ||
|
|
||
| ExtendedOpenTelemetrySdk sdk = | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| /* | ||
| * Copyright The OpenTelemetry Authors | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| package io.opentelemetry.sdk; | ||
|
|
||
| import java.lang.reflect.InvocationTargetException; | ||
| import java.lang.reflect.Method; | ||
|
|
||
| /** | ||
| * Utilities for interacting with incubating components ({@code | ||
| * io.opentelemetry:opentelemetry-api-incubator} and {@code | ||
| * io.opentelemetry:opentelemetry-sdk-extension-incubator}), which are not guaranteed to be present | ||
| * on the classpath. For all methods, callers MUST first separately reflectively confirm that the | ||
| * incubator is available on the classpath. | ||
| */ | ||
| final class IncubatingUtil { | ||
|
|
||
| private IncubatingUtil() {} | ||
|
|
||
| static Object noopSdkConfigProvider() { | ||
| try { | ||
| Class<?> sdkConfigProviderClass = | ||
| Class.forName("io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider"); | ||
| Method defaultProviderMethod = sdkConfigProviderClass.getMethod("noop"); | ||
| return defaultProviderMethod.invoke(null); | ||
| } catch (ClassNotFoundException | ||
| | NoSuchMethodException | ||
| | IllegalAccessException | ||
| | InvocationTargetException e) { | ||
| throw new IllegalStateException( | ||
| "Failed to create default SdkConfigProvider from incubator", e); | ||
| } | ||
| } | ||
|
|
||
| static OpenTelemetrySdk createExtendedOpenTelemetrySdk( | ||
| OpenTelemetrySdk openTelemetrySdk, Object sdkConfigProvider) { | ||
| try { | ||
| Class<?> extendedSdkClass = | ||
| Class.forName("io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk"); | ||
| Class<?> sdkConfigProviderClass = | ||
| Class.forName("io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider"); | ||
| Method createMethod = | ||
| extendedSdkClass.getMethod("create", OpenTelemetrySdk.class, sdkConfigProviderClass); | ||
| return (OpenTelemetrySdk) | ||
| createMethod.invoke( | ||
| null, openTelemetrySdk, sdkConfigProviderClass.cast(sdkConfigProvider)); | ||
| } catch (ClassNotFoundException | ||
| | NoSuchMethodException | ||
| | IllegalAccessException | ||
| | InvocationTargetException e) { | ||
| throw new IllegalStateException( | ||
| "Failed to create ExtendedOpenTelemetrySdk from incubator", e); | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused and a duplicate of
ConfigProvider#noop()There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Called from https://github.com/zeitlinger/opentelemetry-java/blob/0db77eb839b0af1e7f32b0f7ced29e60edcce005/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java#L26 to get an instance for ExtendedOpenTelemetrySdk.
I tried to make it return SdkConfigProvider - but then a design test failed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Called from https://github.com/zeitlinger/opentelemetry-java/blob/0db77eb839b0af1e7f32b0f7ced29e60edcce005/sdk/all/src/main/java/io/opentelemetry/sdk/IncubatingUtil.java#L26 to get an instance for ExtendedOpenTelemetrySdk.
I tried to make it return SdkConfigProvider - but then a design test failed.