From 01ddd769e19e3507211ff0b6d36b69d21b501c19 Mon Sep 17 00:00:00 2001 From: jwatson Date: Tue, 1 Oct 2019 16:10:41 -0700 Subject: [PATCH 1/8] A rough idea of how named tracers might look in the API. --- .../opentelemetry/DefaultTracerFactory.java | 24 +++++++ .../java/io/opentelemetry/OpenTelemetry.java | 62 ++++++++++--------- ...TracerProvider.java => TracerFactory.java} | 18 ++++-- .../io/opentelemetry/OpenTelemetryTest.java | 24 ++++--- ...SdkProvider.java => TracerSdkFactory.java} | 22 ++++++- .../io.opentelemetry.trace.spi.TracerFactory | 1 + .../io.opentelemetry.trace.spi.TracerProvider | 1 - .../sdk/trace/TracerSdkProviderTest.java | 2 +- 8 files changed, 110 insertions(+), 44 deletions(-) create mode 100644 api/src/main/java/io/opentelemetry/DefaultTracerFactory.java rename api/src/main/java/io/opentelemetry/trace/spi/{TracerProvider.java => TracerFactory.java} (63%) rename sdk/src/main/java/io/opentelemetry/sdk/trace/{TracerSdkProvider.java => TracerSdkFactory.java} (53%) create mode 100644 sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory delete mode 100644 sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerProvider diff --git a/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java b/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java new file mode 100644 index 00000000000..4bd8bd75da8 --- /dev/null +++ b/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java @@ -0,0 +1,24 @@ +package io.opentelemetry; + +import io.opentelemetry.trace.DefaultTracer; +import io.opentelemetry.trace.Tracer; +import io.opentelemetry.trace.spi.TracerFactory; + +public class DefaultTracerFactory implements TracerFactory { + + private static final TracerFactory instance = new DefaultTracerFactory(); + + public static TracerFactory getInstance() { + return instance; + } + + @Override + public Tracer create() { + return DefaultTracer.getInstance(); + } + + @Override + public Tracer get(String instrumentationName, String instrumentationVersion) { + return create(); + } +} diff --git a/api/src/main/java/io/opentelemetry/OpenTelemetry.java b/api/src/main/java/io/opentelemetry/OpenTelemetry.java index 74049c8e8d3..cf9cb1befca 100644 --- a/api/src/main/java/io/opentelemetry/OpenTelemetry.java +++ b/api/src/main/java/io/opentelemetry/OpenTelemetry.java @@ -24,7 +24,7 @@ import io.opentelemetry.metrics.spi.MeterProvider; import io.opentelemetry.trace.DefaultTracer; import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerProvider; +import io.opentelemetry.trace.spi.TracerFactory; import java.util.ServiceLoader; import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; @@ -35,7 +35,7 @@ * *

The telemetry objects are lazy-loaded singletons resolved via {@link ServiceLoader} mechanism. * - * @see TracerProvider + * @see TracerFactory * @see MeterProvider * @see DistributedContextManagerProvider */ @@ -44,7 +44,7 @@ public final class OpenTelemetry { @Nullable private static volatile OpenTelemetry instance; - private final Tracer tracer; + private final TracerFactory tracerFactory; private final Meter meter; private final DistributedContextManager contextManager; @@ -56,7 +56,11 @@ public final class OpenTelemetry { * @since 0.1.0 */ public static Tracer getTracer() { - return getInstance().tracer; + return getTracer("defaultName", "defaultVersion"); + } + + public static Tracer getTracer(String instrumentationName, String instrumentationVersion) { + return getInstance().tracerFactory.get(instrumentationName, instrumentationVersion); } /** @@ -83,6 +87,31 @@ public static DistributedContextManager getDistributedContextManager() { return getInstance().contextManager; } + /** Lazy loads an instance. */ + private static OpenTelemetry getInstance() { + if (instance == null) { + synchronized (OpenTelemetry.class) { + if (instance == null) { + instance = new OpenTelemetry(); + } + } + } + return instance; + } + + private OpenTelemetry() { + TracerFactory tracerFactory = loadSpi(TracerFactory.class); + this.tracerFactory = tracerFactory != null ? tracerFactory : DefaultTracerFactory.getInstance(); + MeterProvider meterProvider = loadSpi(MeterProvider.class); + meter = meterProvider != null ? meterProvider.create() : DefaultMeter.getInstance(); + DistributedContextManagerProvider contextManagerProvider = + loadSpi(DistributedContextManagerProvider.class); + contextManager = + contextManagerProvider != null + ? contextManagerProvider.create() + : DefaultDistributedContextManager.getInstance(); + } + /** * Load provider class via {@link ServiceLoader}. A specific provider class can be requested via * setting a system property with FQCN. @@ -108,31 +137,6 @@ private static T loadSpi(Class providerClass) { return null; } - /** Lazy loads an instance. */ - private static OpenTelemetry getInstance() { - if (instance == null) { - synchronized (OpenTelemetry.class) { - if (instance == null) { - instance = new OpenTelemetry(); - } - } - } - return instance; - } - - private OpenTelemetry() { - TracerProvider tracerProvider = loadSpi(TracerProvider.class); - tracer = tracerProvider != null ? tracerProvider.create() : DefaultTracer.getInstance(); - MeterProvider meterProvider = loadSpi(MeterProvider.class); - meter = meterProvider != null ? meterProvider.create() : DefaultMeter.getInstance(); - DistributedContextManagerProvider contextManagerProvider = - loadSpi(DistributedContextManagerProvider.class); - contextManager = - contextManagerProvider != null - ? contextManagerProvider.create() - : DefaultDistributedContextManager.getInstance(); - } - // for testing static void reset() { instance = null; diff --git a/api/src/main/java/io/opentelemetry/trace/spi/TracerProvider.java b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java similarity index 63% rename from api/src/main/java/io/opentelemetry/trace/spi/TracerProvider.java rename to api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java index 08949bb1a52..10fdbc93ff9 100644 --- a/api/src/main/java/io/opentelemetry/trace/spi/TracerProvider.java +++ b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java @@ -20,17 +20,17 @@ import javax.annotation.concurrent.ThreadSafe; /** - * TracerProvider is a service provider for {@link Tracer}. Fully qualified class name of the + * TracerFactory is a service provider for {@link Tracer}s. Fully qualified class name of the * implementation should be registered in {@code - * META-INF/services/io.opentelemetry.trace.spi.TracerProvider}.
+ * META-INF/services/io.opentelemetry.trace.spi.TracerFactory}.
*
* A specific implementation can be selected by a system property {@code - * io.opentelemetry.trace.spi.TracerProvider} with value of fully qualified class name. + * io.opentelemetry.trace.spi.TracerFactory} with value of fully qualified class name. * * @see io.opentelemetry.OpenTelemetry */ @ThreadSafe -public interface TracerProvider { +public interface TracerFactory { /** * Creates a new tracer instance. @@ -39,4 +39,14 @@ public interface TracerProvider { * @since 0.1.0 */ Tracer create(); + + /** + * Gets or creates a named and versioned tracer instance. + * + * @param instrumentationName The name of the instrumentation library. + * @param instrumentationVersion The version of the instrumentation library. + * @return a tracer instance. + * @since 0.1.0 + */ + Tracer get(String instrumentationName, String instrumentationVersion); } diff --git a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java index d05f24e4631..f15d4f382fc 100644 --- a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java +++ b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java @@ -42,7 +42,7 @@ import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerProvider; +import io.opentelemetry.trace.spi.TracerFactory; import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -70,7 +70,7 @@ public static void beforeClass() { @After public void after() { OpenTelemetry.reset(); - System.clearProperty(TracerProvider.class.getName()); + System.clearProperty(TracerFactory.class.getName()); System.clearProperty(MeterProvider.class.getName()); System.clearProperty(DistributedContextManagerProvider.class.getName()); } @@ -89,7 +89,7 @@ public void testDefault() { @Test public void testTracerLoadArbitrary() throws IOException { - File serviceFile = createService(TracerProvider.class, FirstTracer.class, SecondTracer.class); + File serviceFile = createService(TracerFactory.class, FirstTracer.class, SecondTracer.class); try { assertTrue( (OpenTelemetry.getTracer() instanceof FirstTracer) @@ -102,8 +102,8 @@ public void testTracerLoadArbitrary() throws IOException { @Test public void testTracerSystemProperty() throws IOException { - File serviceFile = createService(TracerProvider.class, FirstTracer.class, SecondTracer.class); - System.setProperty(TracerProvider.class.getName(), SecondTracer.class.getName()); + File serviceFile = createService(TracerFactory.class, FirstTracer.class, SecondTracer.class); + System.setProperty(TracerFactory.class.getName(), SecondTracer.class.getName()); try { assertThat(OpenTelemetry.getTracer()).isInstanceOf(SecondTracer.class); assertThat(OpenTelemetry.getTracer()).isEqualTo(OpenTelemetry.getTracer()); @@ -114,7 +114,7 @@ public void testTracerSystemProperty() throws IOException { @Test public void testTracerNotFound() { - System.setProperty(TracerProvider.class.getName(), "io.does.not.exists"); + System.setProperty(TracerFactory.class.getName(), "io.does.not.exists"); thrown.expect(IllegalStateException.class); OpenTelemetry.getTracer(); } @@ -217,14 +217,24 @@ public static class SecondTracer extends FirstTracer { public Tracer create() { return new SecondTracer(); } + + @Override + public Tracer get(String instrumentationName, String instrumentationVersion) { + return create(); + } } - public static class FirstTracer implements Tracer, TracerProvider { + public static class FirstTracer implements Tracer, TracerFactory { @Override public Tracer create() { return new FirstTracer(); } + @Override + public Tracer get(String instrumentationName, String instrumentationVersion) { + return create(); + } + @Nullable @Override public Span getCurrentSpan() { diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkProvider.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java similarity index 53% rename from sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkProvider.java rename to sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java index faf3271819d..4e01849a5c7 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkProvider.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java @@ -17,17 +17,35 @@ package io.opentelemetry.sdk.trace; import io.opentelemetry.trace.Tracer; +import io.opentelemetry.trace.spi.TracerFactory; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; /** - * {@code Tracer} provider implementation for {@link io.opentelemetry.trace.spi.TracerProvider}. + * {@code Tracer} provider implementation for {@link TracerFactory}. * *

This class is not intended to be used in application code and it is used only by {@link * io.opentelemetry.OpenTelemetry}. */ -public class TracerSdkProvider implements io.opentelemetry.trace.spi.TracerProvider { +public class TracerSdkFactory implements TracerFactory { + private final Map tracersByKey = + Collections.synchronizedMap(new HashMap()); @Override public Tracer create() { return new TracerSdk(); } + + @Override + public Tracer get(String instrumentationName, String instrumentationVersion) { + String key = instrumentationName + "/" + instrumentationVersion; + Tracer tracer = tracersByKey.get(key); + if (tracer == null) { + // todo: pass in the name & version here to the implementation to be used for purposes. + tracer = new TracerSdk(); + tracersByKey.put(key, tracer); + } + return tracer; + } } diff --git a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory new file mode 100644 index 00000000000..45a5d30d51f --- /dev/null +++ b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory @@ -0,0 +1 @@ +io.opentelemetry.sdk.trace.TracerSdkFactory diff --git a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerProvider b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerProvider deleted file mode 100644 index c7d60538e5e..00000000000 --- a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerProvider +++ /dev/null @@ -1 +0,0 @@ -io.opentelemetry.sdk.trace.TracerSdkProvider diff --git a/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java b/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java index c0431b979d8..f480cbbcbe7 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java @@ -27,6 +27,6 @@ public class TracerSdkProviderTest { @Test public void testDefault() { - assertThat(new TracerSdkProvider().create()).isInstanceOf(TracerSdk.class); + assertThat(new TracerSdkFactory().create()).isInstanceOf(TracerSdk.class); } } From ae0a625a1b61698ce9de0cf31fe515ca78f9ec4c Mon Sep 17 00:00:00 2001 From: jwatson Date: Wed, 2 Oct 2019 10:19:02 -0700 Subject: [PATCH 2/8] update to require at least a name for the tracer --- .../opentelemetry/DefaultTracerFactory.java | 20 ++++++++++-- .../trace/spi/TracerFactory.java | 3 +- .../io/opentelemetry/OpenTelemetryTest.java | 32 +++++++++---------- .../sdk/trace/TracerSdkFactory.java | 4 +-- .../sdk/trace/TracerSdkProviderTest.java | 2 +- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java b/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java index 4bd8bd75da8..226e5d772ca 100644 --- a/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java +++ b/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java @@ -1,3 +1,19 @@ +/* + * Copyright 2019, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.opentelemetry; import io.opentelemetry.trace.DefaultTracer; @@ -13,12 +29,12 @@ public static TracerFactory getInstance() { } @Override - public Tracer create() { + public Tracer get(String instrumentationName) { return DefaultTracer.getInstance(); } @Override public Tracer get(String instrumentationName, String instrumentationVersion) { - return create(); + return get(instrumentationName); } } diff --git a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java index 10fdbc93ff9..91ecc9310ac 100644 --- a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java @@ -35,10 +35,11 @@ public interface TracerFactory { /** * Creates a new tracer instance. * + * @param instrumentationName The name of the instrumentation library. * @return a tracer instance. * @since 0.1.0 */ - Tracer create(); + Tracer get(String instrumentationName); /** * Gets or creates a named and versioned tracer instance. diff --git a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java index f15d4f382fc..c0dc0cae0df 100644 --- a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java +++ b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java @@ -89,12 +89,12 @@ public void testDefault() { @Test public void testTracerLoadArbitrary() throws IOException { - File serviceFile = createService(TracerFactory.class, FirstTracer.class, SecondTracer.class); + File serviceFile = + createService(TracerFactory.class, FirstTracerFactory.class, SecondTracerFactory.class); try { assertTrue( - (OpenTelemetry.getTracer() instanceof FirstTracer) - || (OpenTelemetry.getTracer() instanceof SecondTracer)); - assertThat(OpenTelemetry.getTracer()).isEqualTo(OpenTelemetry.getTracer()); + (OpenTelemetry.getTracer() instanceof FirstTracerFactory) + || (OpenTelemetry.getTracer() instanceof SecondTracerFactory)); } finally { serviceFile.delete(); } @@ -102,11 +102,11 @@ public void testTracerLoadArbitrary() throws IOException { @Test public void testTracerSystemProperty() throws IOException { - File serviceFile = createService(TracerFactory.class, FirstTracer.class, SecondTracer.class); - System.setProperty(TracerFactory.class.getName(), SecondTracer.class.getName()); + File serviceFile = + createService(TracerFactory.class, FirstTracerFactory.class, SecondTracerFactory.class); + System.setProperty(TracerFactory.class.getName(), SecondTracerFactory.class.getName()); try { - assertThat(OpenTelemetry.getTracer()).isInstanceOf(SecondTracer.class); - assertThat(OpenTelemetry.getTracer()).isEqualTo(OpenTelemetry.getTracer()); + assertThat(OpenTelemetry.getTracer()).isInstanceOf(SecondTracerFactory.class); } finally { serviceFile.delete(); } @@ -212,27 +212,27 @@ private static File createService(Class service, Class... impls) throws IO return file; } - public static class SecondTracer extends FirstTracer { + public static class SecondTracerFactory extends FirstTracerFactory { @Override - public Tracer create() { - return new SecondTracer(); + public Tracer get(String instrumentationName) { + return new SecondTracerFactory(); } @Override public Tracer get(String instrumentationName, String instrumentationVersion) { - return create(); + return get(instrumentationName); } } - public static class FirstTracer implements Tracer, TracerFactory { + public static class FirstTracerFactory implements Tracer, TracerFactory { @Override - public Tracer create() { - return new FirstTracer(); + public Tracer get(String instrumentationName) { + return new FirstTracerFactory(); } @Override public Tracer get(String instrumentationName, String instrumentationVersion) { - return create(); + return get(instrumentationName); } @Nullable diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java index 4e01849a5c7..310341de09a 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java @@ -33,8 +33,8 @@ public class TracerSdkFactory implements TracerFactory { Collections.synchronizedMap(new HashMap()); @Override - public Tracer create() { - return new TracerSdk(); + public Tracer get(String instrumentationName) { + return get(instrumentationName, null); } @Override diff --git a/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java b/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java index f480cbbcbe7..b92088bc411 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/trace/TracerSdkProviderTest.java @@ -27,6 +27,6 @@ public class TracerSdkProviderTest { @Test public void testDefault() { - assertThat(new TracerSdkFactory().create()).isInstanceOf(TracerSdk.class); + assertThat(new TracerSdkFactory().get("testInstrumentation")).isInstanceOf(TracerSdk.class); } } From 5eb46564e1b914b9724c1e99e19bd6ab4ff9b3a7 Mon Sep 17 00:00:00 2001 From: jwatson Date: Fri, 11 Oct 2019 07:48:17 -0700 Subject: [PATCH 3/8] Introduce another layer of factory for the provider --- .../java/io/opentelemetry/OpenTelemetry.java | 21 ++++++++-- .../{ => trace}/DefaultTracerFactory.java | 6 +-- .../trace/DefaultTracerFactoryProvider.java | 32 ++++++++++++++ .../trace/{spi => }/TracerFactory.java | 12 ++---- .../trace/spi/TracerFactoryProvider.java | 42 +++++++++++++++++++ .../io/opentelemetry/OpenTelemetryTest.java | 27 ++++++++---- .../sdk/trace/TracerSdkFactory.java | 2 +- .../sdk/trace/TracerSdkFactoryProvider.java | 28 +++++++++++++ .../io.opentelemetry.trace.spi.TracerFactory | 1 - ...ntelemetry.trace.spi.TracerFactoryProvider | 1 + 10 files changed, 146 insertions(+), 26 deletions(-) rename api/src/main/java/io/opentelemetry/{ => trace}/DefaultTracerFactory.java (86%) create mode 100644 api/src/main/java/io/opentelemetry/trace/DefaultTracerFactoryProvider.java rename api/src/main/java/io/opentelemetry/trace/{spi => }/TracerFactory.java (74%) create mode 100644 api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java create mode 100644 sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactoryProvider.java delete mode 100644 sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory create mode 100644 sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider diff --git a/api/src/main/java/io/opentelemetry/OpenTelemetry.java b/api/src/main/java/io/opentelemetry/OpenTelemetry.java index cf9cb1befca..b07e2061897 100644 --- a/api/src/main/java/io/opentelemetry/OpenTelemetry.java +++ b/api/src/main/java/io/opentelemetry/OpenTelemetry.java @@ -23,8 +23,10 @@ import io.opentelemetry.metrics.Meter; import io.opentelemetry.metrics.spi.MeterProvider; import io.opentelemetry.trace.DefaultTracer; +import io.opentelemetry.trace.DefaultTracerFactoryProvider; import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerFactory; +import io.opentelemetry.trace.TracerFactory; +import io.opentelemetry.trace.spi.TracerFactoryProvider; import java.util.ServiceLoader; import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; @@ -56,9 +58,16 @@ public final class OpenTelemetry { * @since 0.1.0 */ public static Tracer getTracer() { - return getTracer("defaultName", "defaultVersion"); + return getTracer("defaultInstrumentationName", "defaultInstrumentationVersion"); } + /** + * Returns a named {@link Tracer} with the provided instrumentation name and version. + * + * @return registered tracer or default via {@link DefaultTracer#getInstance()}. + * @throws IllegalStateException if a specified tracer (via system properties) could not be found. + * @since 0.1.0 + */ public static Tracer getTracer(String instrumentationName, String instrumentationVersion) { return getInstance().tracerFactory.get(instrumentationName, instrumentationVersion); } @@ -100,8 +109,12 @@ private static OpenTelemetry getInstance() { } private OpenTelemetry() { - TracerFactory tracerFactory = loadSpi(TracerFactory.class); - this.tracerFactory = tracerFactory != null ? tracerFactory : DefaultTracerFactory.getInstance(); + TracerFactoryProvider tracerFactoryProvider = loadSpi(TracerFactoryProvider.class); + this.tracerFactory = + tracerFactoryProvider != null + ? tracerFactoryProvider.create() + : DefaultTracerFactoryProvider.getInstance().create(); + MeterProvider meterProvider = loadSpi(MeterProvider.class); meter = meterProvider != null ? meterProvider.create() : DefaultMeter.getInstance(); DistributedContextManagerProvider contextManagerProvider = diff --git a/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java similarity index 86% rename from api/src/main/java/io/opentelemetry/DefaultTracerFactory.java rename to api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java index 226e5d772ca..7ed2775f081 100644 --- a/api/src/main/java/io/opentelemetry/DefaultTracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java @@ -14,11 +14,7 @@ * limitations under the License. */ -package io.opentelemetry; - -import io.opentelemetry.trace.DefaultTracer; -import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerFactory; +package io.opentelemetry.trace; public class DefaultTracerFactory implements TracerFactory { diff --git a/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactoryProvider.java b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactoryProvider.java new file mode 100644 index 00000000000..0b31d4bd7b0 --- /dev/null +++ b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactoryProvider.java @@ -0,0 +1,32 @@ +/* + * Copyright 2019, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opentelemetry.trace; + +import io.opentelemetry.trace.spi.TracerFactoryProvider; + +public class DefaultTracerFactoryProvider implements TracerFactoryProvider { + private static final TracerFactoryProvider instance = new DefaultTracerFactoryProvider(); + + public static TracerFactoryProvider getInstance() { + return instance; + } + + @Override + public TracerFactory create() { + return DefaultTracerFactory.getInstance(); + } +} diff --git a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java similarity index 74% rename from api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java rename to api/src/main/java/io/opentelemetry/trace/TracerFactory.java index 91ecc9310ac..cdae6544cc0 100644 --- a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java @@ -14,20 +14,16 @@ * limitations under the License. */ -package io.opentelemetry.trace.spi; +package io.opentelemetry.trace; -import io.opentelemetry.trace.Tracer; import javax.annotation.concurrent.ThreadSafe; /** - * TracerFactory is a service provider for {@link Tracer}s. Fully qualified class name of the - * implementation should be registered in {@code - * META-INF/services/io.opentelemetry.trace.spi.TracerFactory}.
- *
- * A specific implementation can be selected by a system property {@code - * io.opentelemetry.trace.spi.TracerFactory} with value of fully qualified class name. + * A factory for creating named {@link Tracer}s. * * @see io.opentelemetry.OpenTelemetry + * @see io.opentelemetry.trace.Tracer + * @since 0.1.0 */ @ThreadSafe public interface TracerFactory { diff --git a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java new file mode 100644 index 00000000000..7cd11047906 --- /dev/null +++ b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opentelemetry.trace.spi; + +import io.opentelemetry.trace.TracerFactory; +import javax.annotation.concurrent.ThreadSafe; + +/** + * TracerFactoryProvider is a service provider for a {@link TracerFactory}s. Fully qualified class + * name of the implementation should be registered in {@code + * META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider}.
+ *
+ * A specific implementation can be selected by a system property {@code + * io.opentelemetry.trace.spi.TracerFactoryProvider} with value of fully qualified class name. + * + * @see io.opentelemetry.OpenTelemetry + */ +@ThreadSafe +public interface TracerFactoryProvider { + + /** + * Creates a new TracerFactory. + * + * @return a new TracerFactory. + * @since 0.1.0 + */ + TracerFactory create(); +} diff --git a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java index c0dc0cae0df..174fbf90139 100644 --- a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java +++ b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java @@ -42,7 +42,8 @@ import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerFactory; +import io.opentelemetry.trace.TracerFactory; +import io.opentelemetry.trace.spi.TracerFactoryProvider; import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -70,7 +71,7 @@ public static void beforeClass() { @After public void after() { OpenTelemetry.reset(); - System.clearProperty(TracerFactory.class.getName()); + System.clearProperty(TracerFactoryProvider.class.getName()); System.clearProperty(MeterProvider.class.getName()); System.clearProperty(DistributedContextManagerProvider.class.getName()); } @@ -90,7 +91,8 @@ public void testDefault() { @Test public void testTracerLoadArbitrary() throws IOException { File serviceFile = - createService(TracerFactory.class, FirstTracerFactory.class, SecondTracerFactory.class); + createService( + TracerFactoryProvider.class, FirstTracerFactory.class, SecondTracerFactory.class); try { assertTrue( (OpenTelemetry.getTracer() instanceof FirstTracerFactory) @@ -103,8 +105,9 @@ public void testTracerLoadArbitrary() throws IOException { @Test public void testTracerSystemProperty() throws IOException { File serviceFile = - createService(TracerFactory.class, FirstTracerFactory.class, SecondTracerFactory.class); - System.setProperty(TracerFactory.class.getName(), SecondTracerFactory.class.getName()); + createService( + TracerFactoryProvider.class, FirstTracerFactory.class, SecondTracerFactory.class); + System.setProperty(TracerFactoryProvider.class.getName(), SecondTracerFactory.class.getName()); try { assertThat(OpenTelemetry.getTracer()).isInstanceOf(SecondTracerFactory.class); } finally { @@ -114,7 +117,7 @@ public void testTracerSystemProperty() throws IOException { @Test public void testTracerNotFound() { - System.setProperty(TracerFactory.class.getName(), "io.does.not.exists"); + System.setProperty(TracerFactoryProvider.class.getName(), "io.does.not.exists"); thrown.expect(IllegalStateException.class); OpenTelemetry.getTracer(); } @@ -222,9 +225,14 @@ public Tracer get(String instrumentationName) { public Tracer get(String instrumentationName, String instrumentationVersion) { return get(instrumentationName); } + + @Override + public TracerFactory create() { + return new SecondTracerFactory(); + } } - public static class FirstTracerFactory implements Tracer, TracerFactory { + public static class FirstTracerFactory implements Tracer, TracerFactory, TracerFactoryProvider { @Override public Tracer get(String instrumentationName) { return new FirstTracerFactory(); @@ -264,6 +272,11 @@ public BinaryFormat getBinaryFormat() { public HttpTextFormat getHttpTextFormat() { return null; } + + @Override + public TracerFactory create() { + return new FirstTracerFactory(); + } } public static class SecondMeter extends FirstMeter { diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java index 310341de09a..0081d93fb3b 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactory.java @@ -17,7 +17,7 @@ package io.opentelemetry.sdk.trace; import io.opentelemetry.trace.Tracer; -import io.opentelemetry.trace.spi.TracerFactory; +import io.opentelemetry.trace.TracerFactory; import java.util.Collections; import java.util.HashMap; import java.util.Map; diff --git a/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactoryProvider.java b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactoryProvider.java new file mode 100644 index 00000000000..cf1a7ba2155 --- /dev/null +++ b/sdk/src/main/java/io/opentelemetry/sdk/trace/TracerSdkFactoryProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright 2019, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opentelemetry.sdk.trace; + +import io.opentelemetry.trace.TracerFactory; +import io.opentelemetry.trace.spi.TracerFactoryProvider; + +/** SDK implementation of the TracerProviderFactory for SPI. */ +public class TracerSdkFactoryProvider implements TracerFactoryProvider { + @Override + public TracerFactory create() { + return new TracerSdkFactory(); + } +} diff --git a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory deleted file mode 100644 index 45a5d30d51f..00000000000 --- a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactory +++ /dev/null @@ -1 +0,0 @@ -io.opentelemetry.sdk.trace.TracerSdkFactory diff --git a/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider new file mode 100644 index 00000000000..6be0bc33c27 --- /dev/null +++ b/sdk/src/main/resources/META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider @@ -0,0 +1 @@ +io.opentelemetry.sdk.trace.TracerSdkFactoryProvider From b959240d7a086714747e5262e8d7c899fe710228 Mon Sep 17 00:00:00 2001 From: jwatson Date: Mon, 14 Oct 2019 13:55:20 -0700 Subject: [PATCH 4/8] remove convenience tracer methods from the OpenTelemetry class. --- .../java/io/opentelemetry/OpenTelemetry.java | 24 ++++++------------- .../io/opentelemetry/OpenTelemetryTest.java | 14 ++++++----- .../opentracingshim/TraceShim.java | 4 +++- .../opentelemetry/sdk/OpenTelemetrySdk.java | 9 +++---- .../sdk/OpenTelemetrySdkTest.java | 3 ++- 5 files changed, 25 insertions(+), 29 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/OpenTelemetry.java b/api/src/main/java/io/opentelemetry/OpenTelemetry.java index b07e2061897..cbce580e7c4 100644 --- a/api/src/main/java/io/opentelemetry/OpenTelemetry.java +++ b/api/src/main/java/io/opentelemetry/OpenTelemetry.java @@ -22,7 +22,7 @@ import io.opentelemetry.metrics.DefaultMeter; import io.opentelemetry.metrics.Meter; import io.opentelemetry.metrics.spi.MeterProvider; -import io.opentelemetry.trace.DefaultTracer; +import io.opentelemetry.trace.DefaultTracerFactory; import io.opentelemetry.trace.DefaultTracerFactoryProvider; import io.opentelemetry.trace.Tracer; import io.opentelemetry.trace.TracerFactory; @@ -51,25 +51,15 @@ public final class OpenTelemetry { private final DistributedContextManager contextManager; /** - * Returns a singleton {@link Tracer}. + * Returns a singleton {@link TracerFactory}. * - * @return registered tracer or default via {@link DefaultTracer#getInstance()}. - * @throws IllegalStateException if a specified tracer (via system properties) could not be found. - * @since 0.1.0 - */ - public static Tracer getTracer() { - return getTracer("defaultInstrumentationName", "defaultInstrumentationVersion"); - } - - /** - * Returns a named {@link Tracer} with the provided instrumentation name and version. - * - * @return registered tracer or default via {@link DefaultTracer#getInstance()}. - * @throws IllegalStateException if a specified tracer (via system properties) could not be found. + * @return registered TracerFactory of default via {@link DefaultTracerFactory#getInstance()}. + * @throws IllegalStateException if a specified TracerFactory (via system properties) could not be + * found. * @since 0.1.0 */ - public static Tracer getTracer(String instrumentationName, String instrumentationVersion) { - return getInstance().tracerFactory.get(instrumentationName, instrumentationVersion); + public static TracerFactory getTracerFactory() { + return getInstance().tracerFactory; } /** diff --git a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java index 174fbf90139..7c64e7c3700 100644 --- a/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java +++ b/api/src/test/java/io/opentelemetry/OpenTelemetryTest.java @@ -78,8 +78,10 @@ public void after() { @Test public void testDefault() { - assertThat(OpenTelemetry.getTracer()).isInstanceOf(DefaultTracer.getInstance().getClass()); - assertThat(OpenTelemetry.getTracer()).isEqualTo(OpenTelemetry.getTracer()); + assertThat(OpenTelemetry.getTracerFactory().get("testTracer")) + .isInstanceOf(DefaultTracer.getInstance().getClass()); + assertThat(OpenTelemetry.getTracerFactory().get("testTracer")) + .isEqualTo(OpenTelemetry.getTracerFactory().get("testTracer")); assertThat(OpenTelemetry.getMeter()).isInstanceOf(DefaultMeter.getInstance().getClass()); assertThat(OpenTelemetry.getMeter()).isEqualTo(OpenTelemetry.getMeter()); assertThat(OpenTelemetry.getDistributedContextManager()) @@ -95,8 +97,8 @@ public void testTracerLoadArbitrary() throws IOException { TracerFactoryProvider.class, FirstTracerFactory.class, SecondTracerFactory.class); try { assertTrue( - (OpenTelemetry.getTracer() instanceof FirstTracerFactory) - || (OpenTelemetry.getTracer() instanceof SecondTracerFactory)); + (OpenTelemetry.getTracerFactory() instanceof FirstTracerFactory) + || (OpenTelemetry.getTracerFactory() instanceof SecondTracerFactory)); } finally { serviceFile.delete(); } @@ -109,7 +111,7 @@ public void testTracerSystemProperty() throws IOException { TracerFactoryProvider.class, FirstTracerFactory.class, SecondTracerFactory.class); System.setProperty(TracerFactoryProvider.class.getName(), SecondTracerFactory.class.getName()); try { - assertThat(OpenTelemetry.getTracer()).isInstanceOf(SecondTracerFactory.class); + assertThat(OpenTelemetry.getTracerFactory()).isInstanceOf(SecondTracerFactory.class); } finally { serviceFile.delete(); } @@ -119,7 +121,7 @@ public void testTracerSystemProperty() throws IOException { public void testTracerNotFound() { System.setProperty(TracerFactoryProvider.class.getName(), "io.does.not.exists"); thrown.expect(IllegalStateException.class); - OpenTelemetry.getTracer(); + OpenTelemetry.getTracerFactory().get("testTracer"); } @Test diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/TraceShim.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/TraceShim.java index 50086716ed2..68ac7baca6f 100644 --- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/TraceShim.java +++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/TraceShim.java @@ -32,7 +32,9 @@ private TraceShim() {} */ public static io.opentracing.Tracer createTracerShim() { return new TracerShim( - new TelemetryInfo(OpenTelemetry.getTracer(), OpenTelemetry.getDistributedContextManager())); + new TelemetryInfo( + OpenTelemetry.getTracerFactory().get("openTracingShim"), + OpenTelemetry.getDistributedContextManager())); } /** diff --git a/sdk/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java b/sdk/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java index a85b75e6fec..7d3d6c66194 100644 --- a/sdk/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java +++ b/sdk/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java @@ -20,6 +20,7 @@ import io.opentelemetry.sdk.distributedcontext.DistributedContextManagerSdk; import io.opentelemetry.sdk.metrics.MeterSdk; import io.opentelemetry.sdk.trace.TracerSdk; +import io.opentelemetry.sdk.trace.TracerSdkFactory; import javax.annotation.concurrent.ThreadSafe; /** @@ -34,13 +35,13 @@ @ThreadSafe public final class OpenTelemetrySdk { /** - * Returns a {@link TracerSdk}. + * Returns a {@link TracerSdkFactory}. * - * @return tracer returned by {@link OpenTelemetry#getTracer()}. + * @return TracerFactory returned by {@link OpenTelemetry#getTracerFactory()}. * @since 0.1.0 */ - public static TracerSdk getTracer() { - return (TracerSdk) OpenTelemetry.getTracer(); + public static TracerSdkFactory getTracerFactory() { + return (TracerSdkFactory) OpenTelemetry.getTracerFactory(); } /** diff --git a/sdk/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java b/sdk/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java index d4391c0b5a8..87c543edfb8 100644 --- a/sdk/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java +++ b/sdk/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java @@ -28,7 +28,8 @@ public class OpenTelemetrySdkTest { @Test public void testDefault() { - assertThat(OpenTelemetrySdk.getTracer()).isSameInstanceAs(OpenTelemetry.getTracer()); + assertThat(OpenTelemetrySdk.getTracerFactory()) + .isSameInstanceAs(OpenTelemetry.getTracerFactory()); assertThat(OpenTelemetrySdk.getDistributedContextManager()) .isSameInstanceAs(OpenTelemetry.getDistributedContextManager()); assertThat(OpenTelemetrySdk.getMeter()).isSameInstanceAs(OpenTelemetry.getMeter()); From 3fdb6344dd6a9b1e93bcd8927ead46a31da65e79 Mon Sep 17 00:00:00 2001 From: John Watson Date: Tue, 15 Oct 2019 09:48:17 -0700 Subject: [PATCH 5/8] Update api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java Co-Authored-By: Armin Ruech --- .../java/io/opentelemetry/trace/spi/TracerFactoryProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java index 7cd11047906..8f052284862 100644 --- a/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java +++ b/api/src/main/java/io/opentelemetry/trace/spi/TracerFactoryProvider.java @@ -20,7 +20,7 @@ import javax.annotation.concurrent.ThreadSafe; /** - * TracerFactoryProvider is a service provider for a {@link TracerFactory}s. Fully qualified class + * TracerFactoryProvider is a service provider for a {@link TracerFactory}. Fully qualified class * name of the implementation should be registered in {@code * META-INF/services/io.opentelemetry.trace.spi.TracerFactoryProvider}.
*
From 65d9869bf1f0e7ea7b8782c74b97f4e0f93e2278 Mon Sep 17 00:00:00 2001 From: John Watson Date: Tue, 15 Oct 2019 09:48:35 -0700 Subject: [PATCH 6/8] Update api/src/main/java/io/opentelemetry/trace/TracerFactory.java Co-Authored-By: Armin Ruech --- api/src/main/java/io/opentelemetry/trace/TracerFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/io/opentelemetry/trace/TracerFactory.java b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java index cdae6544cc0..505f95770cb 100644 --- a/api/src/main/java/io/opentelemetry/trace/TracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java @@ -29,7 +29,7 @@ public interface TracerFactory { /** - * Creates a new tracer instance. + * Gets or creates a named tracer instance. * * @param instrumentationName The name of the instrumentation library. * @return a tracer instance. From d8f4283999fd4bc80427ef9f25a4c0a7f08677df Mon Sep 17 00:00:00 2001 From: jwatson Date: Tue, 15 Oct 2019 11:03:39 -0700 Subject: [PATCH 7/8] Add clarifying javadoc, per PR review --- api/src/main/java/io/opentelemetry/trace/TracerFactory.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/trace/TracerFactory.java b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java index 505f95770cb..f1ef1b671ca 100644 --- a/api/src/main/java/io/opentelemetry/trace/TracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/TracerFactory.java @@ -31,7 +31,8 @@ public interface TracerFactory { /** * Gets or creates a named tracer instance. * - * @param instrumentationName The name of the instrumentation library. + * @param instrumentationName The name of the instrumentation library, not the name of the + * instrument*ed* library. * @return a tracer instance. * @since 0.1.0 */ @@ -40,7 +41,8 @@ public interface TracerFactory { /** * Gets or creates a named and versioned tracer instance. * - * @param instrumentationName The name of the instrumentation library. + * @param instrumentationName The name of the instrumentation library, not the name of the + * instrument*ed* library. * @param instrumentationVersion The version of the instrumentation library. * @return a tracer instance. * @since 0.1.0 From 11f30edd6b7bcda3533bd98ac911d08093a5fdaf Mon Sep 17 00:00:00 2001 From: jwatson Date: Mon, 21 Oct 2019 08:49:44 -0700 Subject: [PATCH 8/8] reverse who calls whom --- .../java/io/opentelemetry/trace/DefaultTracerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java index 7ed2775f081..72a31145c12 100644 --- a/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java +++ b/api/src/main/java/io/opentelemetry/trace/DefaultTracerFactory.java @@ -26,11 +26,11 @@ public static TracerFactory getInstance() { @Override public Tracer get(String instrumentationName) { - return DefaultTracer.getInstance(); + return get(instrumentationName, null); } @Override public Tracer get(String instrumentationName, String instrumentationVersion) { - return get(instrumentationName); + return DefaultTracer.getInstance(); } }