Deprecate OpenTelemetry SPI. (#2453)

This commit is contained in:
Anuraag Agrawal 2021-01-08 13:37:44 +09:00 committed by GitHub
parent 5daa50ffdc
commit 75e01110e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 31 additions and 26 deletions

View File

@ -9,9 +9,9 @@ import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.spi.trace.TracerProviderFactory;
/** Builder class for {@link DefaultOpenTelemetry}. */ /** Builder class for {@link DefaultOpenTelemetry}. */
@SuppressWarnings("deprecation") // Remove after deleting OpenTelemetry SPI
public final class DefaultOpenTelemetryBuilder { public final class DefaultOpenTelemetryBuilder {
private ContextPropagators propagators = ContextPropagators.noop(); private ContextPropagators propagators = ContextPropagators.noop();
private TracerProvider tracerProvider; private TracerProvider tracerProvider;
@ -55,7 +55,8 @@ public final class DefaultOpenTelemetryBuilder {
public OpenTelemetry build() { public OpenTelemetry build() {
TracerProvider tracerProvider = this.tracerProvider; TracerProvider tracerProvider = this.tracerProvider;
if (tracerProvider == null) { if (tracerProvider == null) {
TracerProviderFactory tracerProviderFactory = Utils.loadSpi(TracerProviderFactory.class); io.opentelemetry.spi.trace.TracerProviderFactory tracerProviderFactory =
Utils.loadSpi(io.opentelemetry.spi.trace.TracerProviderFactory.class);
if (tracerProviderFactory != null) { if (tracerProviderFactory != null) {
tracerProvider = tracerProviderFactory.create(); tracerProvider = tracerProviderFactory.create();
} else { } else {

View File

@ -8,8 +8,6 @@ package io.opentelemetry.api;
import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.spi.OpenTelemetryFactory;
import io.opentelemetry.spi.trace.TracerProviderFactory;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.logging.Level; import java.util.logging.Level;
@ -20,11 +18,6 @@ import javax.annotation.Nullable;
* A global singleton for the entrypoint to telemetry functionality for tracing, metrics and * A global singleton for the entrypoint to telemetry functionality for tracing, metrics and
* baggage. * baggage.
* *
* <p>The global singleton can be retrieved by {@link #get()}. The default for the returned {@link
* OpenTelemetry}, if none has been set via {@link #set(OpenTelemetry)}, will be created with any
* {@link OpenTelemetryFactory}, or {@link TracerProviderFactory} found on the classpath, or
* otherwise will be default, with no-op behavior.
*
* <p>If using the OpenTelemetry SDK, you may want to instantiate the {@link OpenTelemetry} to * <p>If using the OpenTelemetry SDK, you may want to instantiate the {@link OpenTelemetry} to
* provide configuration, for example of {@code Resource} or {@code Sampler}. See {@code * provide configuration, for example of {@code Resource} or {@code Sampler}. See {@code
* OpenTelemetrySdk} and {@code OpenTelemetrySdk.builder} for information on how to construct the * OpenTelemetrySdk} and {@code OpenTelemetrySdk.builder} for information on how to construct the
@ -33,6 +26,7 @@ import javax.annotation.Nullable;
* @see TracerProvider * @see TracerProvider
* @see ContextPropagators * @see ContextPropagators
*/ */
@SuppressWarnings("deprecation") // Remove after deleting OpenTelemetry SPI
public final class GlobalOpenTelemetry { public final class GlobalOpenTelemetry {
private static final Logger logger = Logger.getLogger(GlobalOpenTelemetry.class.getName()); private static final Logger logger = Logger.getLogger(GlobalOpenTelemetry.class.getName());
@ -44,10 +38,7 @@ public final class GlobalOpenTelemetry {
private GlobalOpenTelemetry() {} private GlobalOpenTelemetry() {}
/** /**
* Returns the registered global {@link OpenTelemetry}. If no call to {@link #set(OpenTelemetry)} * Returns the registered global {@link OpenTelemetry}.
* has been made so far, a default {@link OpenTelemetry} composed of functionality any {@link
* OpenTelemetryFactory}, or {@link TracerProviderFactory} found on the classpath, or otherwise
* will be default, with no-op behavior.
* *
* @throws IllegalStateException if a provider has been specified by system property using the * @throws IllegalStateException if a provider has been specified by system property using the
* interface FQCN but the specified provider cannot be found. * interface FQCN but the specified provider cannot be found.
@ -63,7 +54,8 @@ public final class GlobalOpenTelemetry {
return autoConfigured; return autoConfigured;
} }
OpenTelemetryFactory openTelemetryFactory = Utils.loadSpi(OpenTelemetryFactory.class); io.opentelemetry.spi.OpenTelemetryFactory openTelemetryFactory =
Utils.loadSpi(io.opentelemetry.spi.OpenTelemetryFactory.class);
if (openTelemetryFactory != null) { if (openTelemetryFactory != null) {
set(openTelemetryFactory.create()); set(openTelemetryFactory.create());
} else { } else {

View File

@ -14,7 +14,12 @@ import io.opentelemetry.api.OpenTelemetry;
* *
* <p>A specific implementation can be selected by setting the system property {@code * <p>A specific implementation can be selected by setting the system property {@code
* io.opentelemetry.spi.OpenTelemetryFactory} with the value of the fully qualified class name. * io.opentelemetry.spi.OpenTelemetryFactory} with the value of the fully qualified class name.
*
* @deprecated Use {@link io.opentelemetry.api.DefaultOpenTelemetry#builder} to initialize
* OpenTelemetry with a custom provider, or {@code OpenTelemetrySdk#builder} or {@code
* opentelemetry-sdk-extension-autoconfigure} to configure the default SDK.
*/ */
@Deprecated
public interface OpenTelemetryFactory { public interface OpenTelemetryFactory {
/** Returns a new {@link OpenTelemetry} instance. */ /** Returns a new {@link OpenTelemetry} instance. */

View File

@ -18,8 +18,12 @@ import javax.annotation.concurrent.ThreadSafe;
* io.opentelemetry.trace.spi.TracerProviderFactory} with value of fully qualified class name. * io.opentelemetry.trace.spi.TracerProviderFactory} with value of fully qualified class name.
* *
* @see OpenTelemetry * @see OpenTelemetry
* @deprecated Use {@link io.opentelemetry.api.DefaultOpenTelemetry#builder} to initialize
* OpenTelemetry with a custom provider, or {@code OpenTelemetrySdk#builder} or {@code
* opentelemetry-sdk-extension-autoconfigure} to configure the default SDK.
*/ */
@ThreadSafe @ThreadSafe
@Deprecated
public interface TracerProviderFactory { public interface TracerProviderFactory {
/** /**

View File

@ -14,7 +14,6 @@ import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.spi.trace.TracerProviderFactory;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
@ -25,6 +24,7 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@SuppressWarnings("deprecation") // Remove after deleting OpenTelemetry SPI
class OpenTelemetryTest { class OpenTelemetryTest {
@BeforeAll @BeforeAll
@ -35,7 +35,7 @@ class OpenTelemetryTest {
@AfterEach @AfterEach
void after() { void after() {
GlobalOpenTelemetry.reset(); GlobalOpenTelemetry.reset();
System.clearProperty(TracerProviderFactory.class.getName()); System.clearProperty(io.opentelemetry.spi.trace.TracerProviderFactory.class.getName());
} }
@Test @Test
@ -66,7 +66,7 @@ class OpenTelemetryTest {
void testTracerLoadArbitrary() throws IOException { void testTracerLoadArbitrary() throws IOException {
File serviceFile = File serviceFile =
createService( createService(
TracerProviderFactory.class, io.opentelemetry.spi.trace.TracerProviderFactory.class,
FirstTracerProviderFactory.class, FirstTracerProviderFactory.class,
SecondTracerProviderFactory.class); SecondTracerProviderFactory.class);
try { try {
@ -85,11 +85,12 @@ class OpenTelemetryTest {
void testTracerSystemProperty() throws IOException { void testTracerSystemProperty() throws IOException {
File serviceFile = File serviceFile =
createService( createService(
TracerProviderFactory.class, io.opentelemetry.spi.trace.TracerProviderFactory.class,
FirstTracerProviderFactory.class, FirstTracerProviderFactory.class,
SecondTracerProviderFactory.class); SecondTracerProviderFactory.class);
System.setProperty( System.setProperty(
TracerProviderFactory.class.getName(), SecondTracerProviderFactory.class.getName()); io.opentelemetry.spi.trace.TracerProviderFactory.class.getName(),
SecondTracerProviderFactory.class.getName());
try { try {
assertThat(GlobalOpenTelemetry.getTracerProvider().get("")) assertThat(GlobalOpenTelemetry.getTracerProvider().get(""))
.isInstanceOf(SecondTracerProviderFactory.class); .isInstanceOf(SecondTracerProviderFactory.class);
@ -100,7 +101,8 @@ class OpenTelemetryTest {
@Test @Test
void testTracerNotFound() { void testTracerNotFound() {
System.setProperty(TracerProviderFactory.class.getName(), "io.does.not.exists"); System.setProperty(
io.opentelemetry.spi.trace.TracerProviderFactory.class.getName(), "io.does.not.exists");
assertThatThrownBy(() -> GlobalOpenTelemetry.getTracer("testTracer")) assertThatThrownBy(() -> GlobalOpenTelemetry.getTracer("testTracer"))
.isInstanceOf(IllegalStateException.class); .isInstanceOf(IllegalStateException.class);
} }
@ -169,7 +171,7 @@ class OpenTelemetryTest {
} }
public static class FirstTracerProviderFactory public static class FirstTracerProviderFactory
implements Tracer, TracerProvider, TracerProviderFactory { implements Tracer, TracerProvider, io.opentelemetry.spi.trace.TracerProviderFactory {
@Override @Override
public Tracer get(String instrumentationName) { public Tracer get(String instrumentationName) {

View File

@ -6,13 +6,13 @@
package io.opentelemetry.sdk; package io.opentelemetry.sdk;
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.spi.OpenTelemetryFactory;
/** /**
* Factory SPI implementation to register a {@link OpenTelemetrySdk} as the default {@link * Factory SPI implementation to register a {@link OpenTelemetrySdk} as the default {@link
* OpenTelemetry}. * OpenTelemetry}.
*/ */
public final class OpenTelemetrySdkFactory implements OpenTelemetryFactory { @SuppressWarnings("deprecation") // Remove after deleting OpenTelemetry SPI
public final class OpenTelemetrySdkFactory implements io.opentelemetry.spi.OpenTelemetryFactory {
@Override @Override
public OpenTelemetry create() { public OpenTelemetry create() {
return OpenTelemetrySdk.builder().build(); return OpenTelemetrySdk.builder().build();

View File

@ -7,10 +7,11 @@ package io.opentelemetry.sdk.trace.spi;
import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.spi.trace.TracerProviderFactory;
/** SDK implementation of the {@link TracerProviderFactory} for SPI. */ /** SDK implementation of tracing. */
public final class SdkTracerProviderFactory implements TracerProviderFactory { @SuppressWarnings("deprecation") // Remove after deleting OpenTelemetry SPI
public final class SdkTracerProviderFactory
implements io.opentelemetry.spi.trace.TracerProviderFactory {
@Override @Override
public TracerProvider create() { public TracerProvider create() {