diff --git a/api/metrics/src/main/java/io/opentelemetry/api/metrics/MeterProvider.java b/api/metrics/src/main/java/io/opentelemetry/api/metrics/MeterProvider.java
index 4a708d76c6..f10c6ff360 100644
--- a/api/metrics/src/main/java/io/opentelemetry/api/metrics/MeterProvider.java
+++ b/api/metrics/src/main/java/io/opentelemetry/api/metrics/MeterProvider.java
@@ -58,8 +58,8 @@ public interface MeterProvider {
*/
MeterBuilder meterBuilder(String instrumentationName);
- /** Returns a MeterProvider that does nothing. */
- public static MeterProvider noop() {
+ /** Returns a no-op {@link MeterProvider} which provides meters which do not record or emit. */
+ static MeterProvider noop() {
return NoopMeterProvider.getInstance();
}
}
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/MetricExporterConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/MetricExporterConfiguration.java
index 008846275f..a58ce1b908 100644
--- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/MetricExporterConfiguration.java
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/MetricExporterConfiguration.java
@@ -44,8 +44,6 @@ final class MetricExporterConfiguration {
"opentelemetry-exporter-logging");
configureLoggingMetrics(config, sdkMeterProviderBuilder);
return;
- case "none":
- return;
default:
MetricExporter spiExporter = configureSpiExporter(name, config);
if (spiExporter == null) {
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java
index 6e4cee3b61..7190264844 100644
--- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfiguration.java
@@ -6,6 +6,8 @@
package io.opentelemetry.sdk.autoconfigure;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.metrics.GlobalMeterProvider;
+import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
@@ -103,12 +105,13 @@ public final class OpenTelemetrySdkAutoConfiguration {
}
String exporterName = config.getString("otel.metrics.exporter");
- if (exporterName == null) {
- exporterName = "none";
+ if (exporterName == null || exporterName.equals("none")) {
+ // In the event no exporters are configured set a noop exporter
+ GlobalMeterProvider.set(MeterProvider.noop());
+ return;
}
MetricExporterConfiguration.configureExporter(exporterName, config, meterProviderBuilder);
- // In the event no exporters are configured, this returns a stubbed SdkMeterProvider.
SdkMeterProvider meterProvider = meterProviderBuilder.buildAndRegisterGlobal();
// Make sure metrics shut down when JVM shuts down.
diff --git a/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java b/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java
index 06b25cc452..baae8e0293 100644
--- a/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java
+++ b/sdk-extensions/autoconfigure/src/testInitializeRegistersGlobal/java/io/opentelemetry/sdk/autoconfigure/OpenTelemetrySdkAutoConfigurationTest.java
@@ -9,9 +9,8 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
+import io.opentelemetry.api.metrics.internal.NoopMeterProvider;
import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.metrics.SdkMeterProvider;
-import io.opentelemetry.sdk.metrics.testing.InMemoryMetricReader;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -20,6 +19,7 @@ class OpenTelemetrySdkAutoConfigurationTest {
@BeforeEach
void setUp() {
GlobalOpenTelemetry.resetForTest();
+ GlobalMeterProvider.set(null);
}
@Test
@@ -45,8 +45,7 @@ class OpenTelemetrySdkAutoConfigurationTest {
// OTEL_METRICS_EXPORTER=none so the metrics SDK should be completely disabled.
// This is a bit of an odd test, so we just ensure that we don't have the same impl class as if
// we instantiated an SDK with a reader.
- assertThat(GlobalMeterProvider.get())
- .doesNotHaveSameClassAs(
- SdkMeterProvider.builder().registerMetricReader(InMemoryMetricReader.create()).build());
+ OpenTelemetrySdkAutoConfiguration.initialize();
+ assertThat(GlobalMeterProvider.get()).isInstanceOf(NoopMeterProvider.class);
}
}
diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/DefaultSdkMeterProvider.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/DefaultSdkMeterProvider.java
deleted file mode 100644
index e34d24141d..0000000000
--- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/DefaultSdkMeterProvider.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.sdk.metrics;
-
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.metrics.MeterBuilder;
-import io.opentelemetry.sdk.common.Clock;
-import io.opentelemetry.sdk.common.CompletableResultCode;
-import io.opentelemetry.sdk.internal.ComponentRegistry;
-import io.opentelemetry.sdk.metrics.data.MetricData;
-import io.opentelemetry.sdk.metrics.exemplar.ExemplarFilter;
-import io.opentelemetry.sdk.metrics.export.MetricProducer;
-import io.opentelemetry.sdk.metrics.export.MetricReader;
-import io.opentelemetry.sdk.metrics.export.MetricReaderFactory;
-import io.opentelemetry.sdk.metrics.internal.export.CollectionHandle;
-import io.opentelemetry.sdk.metrics.internal.export.CollectionInfo;
-import io.opentelemetry.sdk.metrics.internal.state.MeterProviderSharedState;
-import io.opentelemetry.sdk.metrics.internal.view.ViewRegistry;
-import io.opentelemetry.sdk.resources.Resource;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.function.Supplier;
-import java.util.logging.Logger;
-import javax.annotation.Nullable;
-
-/**
- * Default implementation for {@link SdkMeterProvider}.
- *
- *
This class is not intended to be used in application code and it is used only by {@link
- * OpenTelemetry}.
- */
-final class DefaultSdkMeterProvider implements SdkMeterProvider {
-
- private static final Logger LOGGER = Logger.getLogger(DefaultSdkMeterProvider.class.getName());
- static final String DEFAULT_METER_NAME = "unknown";
-
- private final ComponentRegistry registry;
- private final MeterProviderSharedState sharedState;
- private final Set collectors;
- private final Map collectionInfoMap;
- private final AtomicBoolean isClosed = new AtomicBoolean(false);
- private final AtomicLong lastCollectionTimestamp;
-
- // Minimum amount of time we allow between synchronous collections.
- // This meant to reduce overhead when multiple exporters attempt to read metrics quickly.
- // TODO: This should be configurable at the SDK level.
- private static final long MINIMUM_COLLECTION_INTERVAL_NANOS = TimeUnit.MILLISECONDS.toNanos(100);
-
- DefaultSdkMeterProvider(
- List readerFactories,
- Clock clock,
- Resource resource,
- ViewRegistry viewRegistry,
- ExemplarFilter exemplarSampler) {
- this.sharedState =
- MeterProviderSharedState.create(clock, resource, viewRegistry, exemplarSampler);
- this.registry =
- new ComponentRegistry<>(
- instrumentationLibraryInfo -> new SdkMeter(sharedState, instrumentationLibraryInfo));
- this.lastCollectionTimestamp =
- new AtomicLong(clock.nanoTime() - MINIMUM_COLLECTION_INTERVAL_NANOS);
-
- // Here we construct our own unique handle ids for this SDK.
- // These are guaranteed to be unique per-reader for this SDK, and only this SDK.
- // These are *only* mutated in our constructor, and safe to use concurrently after construction.
- collectors = CollectionHandle.mutableSet();
- collectionInfoMap = new HashMap<>();
- Supplier handleSupplier = CollectionHandle.createSupplier();
- for (MetricReaderFactory readerFactory : readerFactories) {
- CollectionHandle handle = handleSupplier.get();
- // TODO: handle failure in creation or just crash?
- MetricReader reader = readerFactory.apply(new LeasedMetricProducer(handle));
- collectionInfoMap.put(handle, CollectionInfo.create(handle, collectors, reader));
- collectors.add(handle);
- }
- }
-
- @Override
- public MeterBuilder meterBuilder(@Nullable String instrumentationName) {
- if (instrumentationName == null || instrumentationName.isEmpty()) {
- LOGGER.fine("Meter requested without instrumentation name.");
- instrumentationName = DEFAULT_METER_NAME;
- }
- return new SdkMeterBuilder(registry, instrumentationName);
- }
-
- @Override
- public CompletableResultCode forceFlush() {
- List results = new ArrayList<>();
- for (CollectionInfo collectionInfo : collectionInfoMap.values()) {
- results.add(collectionInfo.getReader().shutdown());
- }
- return CompletableResultCode.ofAll(results);
- }
-
- @Override
- public CompletableResultCode close() {
- if (!isClosed.compareAndSet(false, true)) {
- LOGGER.info("Multiple close calls");
- return CompletableResultCode.ofSuccess();
- }
- List results = new ArrayList<>();
- for (CollectionInfo info : collectionInfoMap.values()) {
- results.add(info.getReader().shutdown());
- }
- return CompletableResultCode.ofAll(results);
- }
-
- @Override
- public CompletableResultCode shutdown() {
- return close();
- }
-
- /** Helper class to expose registered metric exports. */
- private class LeasedMetricProducer implements MetricProducer {
- private final CollectionHandle handle;
-
- LeasedMetricProducer(CollectionHandle handle) {
- this.handle = handle;
- }
-
- @Override
- public Collection collectAllMetrics() {
- Collection meters = registry.getComponents();
- // Suppress too-frequent-collection.
- long currentNanoTime = sharedState.getClock().nanoTime();
- long pastNanoTime = lastCollectionTimestamp.get();
- // It hasn't been long enough since the last collection.
- boolean disableSynchronousCollection =
- (currentNanoTime - pastNanoTime) < MINIMUM_COLLECTION_INTERVAL_NANOS;
- // If we're not disabling metrics, write the current collection time.
- // We don't care if this happens in more than one thread, suppression is optimistic, and the
- // interval is small enough some jitter isn't important.
- if (!disableSynchronousCollection) {
- lastCollectionTimestamp.lazySet(currentNanoTime);
- }
-
- List result = new ArrayList<>(meters.size());
- for (SdkMeter meter : meters) {
- result.addAll(
- meter.collectAll(
- collectionInfoMap.get(handle),
- sharedState.getClock().now(),
- disableSynchronousCollection));
- }
- return Collections.unmodifiableCollection(result);
- }
- }
-}
diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopMeterProvider.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopMeterProvider.java
new file mode 100644
index 0000000000..e6e6e0c86d
--- /dev/null
+++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopMeterProvider.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.sdk.metrics;
+
+import io.opentelemetry.api.metrics.MeterBuilder;
+import io.opentelemetry.api.metrics.MeterProvider;
+
+/** Implementation of {@link MeterProvider} which does not record or emit metrics. */
+final class NoopMeterProvider implements MeterProvider {
+
+ @Override
+ public MeterBuilder meterBuilder(String instrumentationName) {
+ return MeterProvider.noop().meterBuilder(instrumentationName);
+ }
+}
diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopSdkMeterProvider.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopSdkMeterProvider.java
deleted file mode 100644
index a35f05a42a..0000000000
--- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/NoopSdkMeterProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.sdk.metrics;
-
-import io.opentelemetry.api.metrics.MeterBuilder;
-import io.opentelemetry.api.metrics.MeterProvider;
-import io.opentelemetry.sdk.common.CompletableResultCode;
-
-/** Implementation of SdkMeterProvider which does not collect metrics. */
-final class NoopSdkMeterProvider implements SdkMeterProvider {
-
- @Override
- public MeterBuilder meterBuilder(String instrumentationName) {
- return MeterProvider.noop().meterBuilder(instrumentationName);
- }
-
- @Override
- public CompletableResultCode forceFlush() {
- return CompletableResultCode.ofSuccess();
- }
-
- @Override
- public CompletableResultCode close() {
- return CompletableResultCode.ofSuccess();
- }
-
- @Override
- public CompletableResultCode shutdown() {
- return close();
- }
-}
diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProvider.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProvider.java
index 8152402856..1b09e52584 100644
--- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProvider.java
+++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProvider.java
@@ -5,32 +5,167 @@
package io.opentelemetry.sdk.metrics;
+import io.opentelemetry.api.metrics.MeterBuilder;
import io.opentelemetry.api.metrics.MeterProvider;
+import io.opentelemetry.sdk.common.Clock;
import io.opentelemetry.sdk.common.CompletableResultCode;
+import io.opentelemetry.sdk.internal.ComponentRegistry;
+import io.opentelemetry.sdk.metrics.data.MetricData;
+import io.opentelemetry.sdk.metrics.exemplar.ExemplarFilter;
+import io.opentelemetry.sdk.metrics.export.MetricProducer;
+import io.opentelemetry.sdk.metrics.export.MetricReader;
+import io.opentelemetry.sdk.metrics.export.MetricReaderFactory;
+import io.opentelemetry.sdk.metrics.internal.export.CollectionHandle;
+import io.opentelemetry.sdk.metrics.internal.export.CollectionInfo;
+import io.opentelemetry.sdk.metrics.internal.state.MeterProviderSharedState;
+import io.opentelemetry.sdk.metrics.internal.view.ViewRegistry;
+import io.opentelemetry.sdk.resources.Resource;
+import java.io.Closeable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Supplier;
+import java.util.logging.Logger;
+import javax.annotation.Nullable;
-/**
- * {@code SdkMeterProvider} provides SDK extensions for {@link MeterProvider}.
- *
- * This class is not intended to be used in application code and it is used only by {@link
- * io.opentelemetry.api.OpenTelemetry}.
- */
-public interface SdkMeterProvider extends MeterProvider {
+/** SDK implementation for {@link MeterProvider}. */
+public final class SdkMeterProvider implements MeterProvider, Closeable {
- /** Forces metric readers to immediately read metrics, if able. */
- CompletableResultCode forceFlush();
+ private static final Logger LOGGER = Logger.getLogger(SdkMeterProvider.class.getName());
+ static final String DEFAULT_METER_NAME = "unknown";
- /** Shuts down metric collection and all associated metric readers. */
- CompletableResultCode close();
+ private final ComponentRegistry registry;
+ private final MeterProviderSharedState sharedState;
+ private final Map collectionInfoMap;
+ private final AtomicBoolean isClosed = new AtomicBoolean(false);
+ private final AtomicLong lastCollectionTimestamp;
- /** Shuts down metric collection and all associated metric readers. */
- CompletableResultCode shutdown();
+ // Minimum amount of time we allow between synchronous collections.
+ // This meant to reduce overhead when multiple exporters attempt to read metrics quickly.
+ // TODO: This should be configurable at the SDK level.
+ private static final long MINIMUM_COLLECTION_INTERVAL_NANOS = TimeUnit.MILLISECONDS.toNanos(100);
/**
* Returns a new {@link SdkMeterProviderBuilder} for {@link SdkMeterProvider}.
*
* @return a new {@link SdkMeterProviderBuilder} for {@link SdkMeterProvider}.
*/
- static SdkMeterProviderBuilder builder() {
+ public static SdkMeterProviderBuilder builder() {
return new SdkMeterProviderBuilder();
}
+
+ SdkMeterProvider(
+ List readerFactories,
+ Clock clock,
+ Resource resource,
+ ViewRegistry viewRegistry,
+ ExemplarFilter exemplarSampler) {
+ this.sharedState =
+ MeterProviderSharedState.create(clock, resource, viewRegistry, exemplarSampler);
+ this.registry =
+ new ComponentRegistry<>(
+ instrumentationLibraryInfo -> new SdkMeter(sharedState, instrumentationLibraryInfo));
+ this.lastCollectionTimestamp =
+ new AtomicLong(clock.nanoTime() - MINIMUM_COLLECTION_INTERVAL_NANOS);
+
+ // Here we construct our own unique handle ids for this SDK.
+ // These are guaranteed to be unique per-reader for this SDK, and only this SDK.
+ // These are *only* mutated in our constructor, and safe to use concurrently after construction.
+ Set collectors = CollectionHandle.mutableSet();
+ collectionInfoMap = new HashMap<>();
+ Supplier handleSupplier = CollectionHandle.createSupplier();
+ for (MetricReaderFactory readerFactory : readerFactories) {
+ CollectionHandle handle = handleSupplier.get();
+ // TODO: handle failure in creation or just crash?
+ MetricReader reader = readerFactory.apply(new LeasedMetricProducer(handle));
+ collectionInfoMap.put(handle, CollectionInfo.create(handle, collectors, reader));
+ collectors.add(handle);
+ }
+ }
+
+ @Override
+ public MeterBuilder meterBuilder(@Nullable String instrumentationName) {
+ if (instrumentationName == null || instrumentationName.isEmpty()) {
+ LOGGER.fine("Meter requested without instrumentation name.");
+ instrumentationName = DEFAULT_METER_NAME;
+ }
+ return new SdkMeterBuilder(registry, instrumentationName);
+ }
+
+ /**
+ * Call {@link MetricReader#flush()} on all metric readers associated with this provider. The
+ * resulting {@link CompletableResultCode} completes when all complete.
+ */
+ public CompletableResultCode forceFlush() {
+ List results = new ArrayList<>();
+ for (CollectionInfo collectionInfo : collectionInfoMap.values()) {
+ results.add(collectionInfo.getReader().flush());
+ }
+ return CompletableResultCode.ofAll(results);
+ }
+
+ /**
+ * Shutdown the provider. Calls {@link MetricReader#shutdown()} on all metric readers associated
+ * with this provider. The resulting {@link CompletableResultCode} completes when all complete.
+ */
+ public CompletableResultCode shutdown() {
+ if (!isClosed.compareAndSet(false, true)) {
+ LOGGER.info("Multiple close calls");
+ return CompletableResultCode.ofSuccess();
+ }
+ List results = new ArrayList<>();
+ for (CollectionInfo info : collectionInfoMap.values()) {
+ results.add(info.getReader().shutdown());
+ }
+ return CompletableResultCode.ofAll(results);
+ }
+
+ /** Close the meter provider. Calls {@link #shutdown()} and blocks waiting for it to complete. */
+ @Override
+ public void close() {
+ shutdown().join(10, TimeUnit.SECONDS);
+ }
+
+ /** Helper class to expose registered metric exports. */
+ private class LeasedMetricProducer implements MetricProducer {
+ private final CollectionHandle handle;
+
+ LeasedMetricProducer(CollectionHandle handle) {
+ this.handle = handle;
+ }
+
+ @Override
+ public Collection collectAllMetrics() {
+ Collection meters = registry.getComponents();
+ // Suppress too-frequent-collection.
+ long currentNanoTime = sharedState.getClock().nanoTime();
+ long pastNanoTime = lastCollectionTimestamp.get();
+ // It hasn't been long enough since the last collection.
+ boolean disableSynchronousCollection =
+ (currentNanoTime - pastNanoTime) < MINIMUM_COLLECTION_INTERVAL_NANOS;
+ // If we're not disabling metrics, write the current collection time.
+ // We don't care if this happens in more than one thread, suppression is optimistic, and the
+ // interval is small enough some jitter isn't important.
+ if (!disableSynchronousCollection) {
+ lastCollectionTimestamp.lazySet(currentNanoTime);
+ }
+
+ List result = new ArrayList<>(meters.size());
+ for (SdkMeter meter : meters) {
+ result.addAll(
+ meter.collectAll(
+ collectionInfoMap.get(handle),
+ sharedState.getClock().now(),
+ disableSynchronousCollection));
+ }
+ return Collections.unmodifiableCollection(result);
+ }
+ }
}
diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilder.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilder.java
index 20cb4ae3ab..fb0cdd4b34 100644
--- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilder.java
+++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilder.java
@@ -134,11 +134,7 @@ public final class SdkMeterProviderBuilder {
* @see GlobalMeterProvider
*/
public SdkMeterProvider build() {
- // If no exporters are configured, optimize by returning no-op implementation.
- if (metricReaders.isEmpty()) {
- return new NoopSdkMeterProvider();
- }
- return new DefaultSdkMeterProvider(
+ return new SdkMeterProvider(
metricReaders, clock, resource, viewRegistryBuilder.build(), exemplarFilter);
}
}
diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilderTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilderTest.java
index 7b1f5abfda..c46263bb4f 100644
--- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilderTest.java
+++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterProviderBuilderTest.java
@@ -34,12 +34,4 @@ class SdkMeterProviderBuilderTest {
.extracting("sharedState")
.hasFieldOrPropertyWithValue("resource", Resource.getDefault());
}
-
- @Test
- void stubsWithNoReaders() {
- // We need a reader to have a resource.
- SdkMeterProvider meterProvider = SdkMeterProvider.builder().build();
-
- assertThat(meterProvider).isInstanceOf(NoopSdkMeterProvider.class);
- }
}
diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterRegistryTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterRegistryTest.java
index 8079bc53dc..28c735b86c 100644
--- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterRegistryTest.java
+++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkMeterRegistryTest.java
@@ -137,21 +137,21 @@ class SdkMeterRegistryTest {
void suppliesDefaultMeterForNullName() {
SdkMeter meter = (SdkMeter) meterProvider.get(null);
assertThat(meter.getInstrumentationLibraryInfo().getName())
- .isEqualTo(DefaultSdkMeterProvider.DEFAULT_METER_NAME);
+ .isEqualTo(SdkMeterProvider.DEFAULT_METER_NAME);
meter = (SdkMeter) meterProvider.meterBuilder(null).build();
assertThat(meter.getInstrumentationLibraryInfo().getName())
- .isEqualTo(DefaultSdkMeterProvider.DEFAULT_METER_NAME);
+ .isEqualTo(SdkMeterProvider.DEFAULT_METER_NAME);
}
@Test
void suppliesDefaultMeterForEmptyName() {
SdkMeter meter = (SdkMeter) meterProvider.get("");
assertThat(meter.getInstrumentationLibraryInfo().getName())
- .isEqualTo(DefaultSdkMeterProvider.DEFAULT_METER_NAME);
+ .isEqualTo(SdkMeterProvider.DEFAULT_METER_NAME);
meter = (SdkMeter) meterProvider.meterBuilder("").build();
assertThat(meter.getInstrumentationLibraryInfo().getName())
- .isEqualTo(DefaultSdkMeterProvider.DEFAULT_METER_NAME);
+ .isEqualTo(SdkMeterProvider.DEFAULT_METER_NAME);
}
}