diff options
| author | Yang Song <songy23@users.noreply.github.com> | 2018-08-13 11:36:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-13 11:36:27 -0700 |
| commit | 775816d699bd4f02788db5609a87386940e34aff (patch) | |
| tree | 021d47fb4c67d0441a5861a9e4a69b8d168e572d /api | |
| parent | 66ae2eed952579e6982b05c0bcebe0670afb0afe (diff) | |
| download | platform_external_opencensus-java-775816d699bd4f02788db5609a87386940e34aff.tar.gz platform_external_opencensus-java-775816d699bd4f02788db5609a87386940e34aff.tar.bz2 platform_external_opencensus-java-775816d699bd4f02788db5609a87386940e34aff.zip | |
Metrics: Implement ExportComponent, make ProducerManager abstract. (#1347)
* Metrics: Implement ExportComponent, make ProducerManager abstract.
* Metrics: Add impl and impllite.
* Resolve two TODOs.
* Fix import path, leave a TODO for getMetricRegistry.
* Make NoopMetricProducerManager private. Add missing since tag.
Diffstat (limited to 'api')
5 files changed, 38 insertions, 74 deletions
diff --git a/api/src/main/java/io/opencensus/common/ToDoubleFunction.java b/api/src/main/java/io/opencensus/common/ToDoubleFunction.java index 479270f1..eac85793 100644 --- a/api/src/main/java/io/opencensus/common/ToDoubleFunction.java +++ b/api/src/main/java/io/opencensus/common/ToDoubleFunction.java @@ -16,10 +16,8 @@ package io.opencensus.common; -// TODO(bdrutu): Change @code to @link when metrics is moved in the API. - /** - * Represents a function that produces a double-valued result. See {@code + * Represents a function that produces a double-valued result. See {@link * io.opencensus.metrics.MetricRegistry} for an example of its use. * * <p>Note: This class is based on the java.util.ToDoubleFunction class added in Java 1.8. We cannot diff --git a/api/src/main/java/io/opencensus/common/ToLongFunction.java b/api/src/main/java/io/opencensus/common/ToLongFunction.java index 9a6e9b19..26a27b18 100644 --- a/api/src/main/java/io/opencensus/common/ToLongFunction.java +++ b/api/src/main/java/io/opencensus/common/ToLongFunction.java @@ -16,10 +16,8 @@ package io.opencensus.common; -// TODO(bdrutu): Change @code to @link when metrics is moved in the API. - /** - * Represents a function that produces a long-valued result. See {@code + * Represents a function that produces a long-valued result. See {@link * io.opencensus.metrics.MetricRegistry} for an example of its use. * * <p>Note: This class is based on the java.util.ToLongFunction class added in Java 1.8. We cannot diff --git a/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java b/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java index f1511543..bab65d13 100644 --- a/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java +++ b/api/src/main/java/io/opencensus/metrics/export/ExportComponent.java @@ -50,7 +50,7 @@ public abstract class ExportComponent { private static final class NoopExportComponent extends ExportComponent { private static final MetricProducerManager METRIC_PRODUCER_MANAGER = - new MetricProducerManager(); + MetricProducerManager.newNoopMetricProducerManager(); @Override public MetricProducerManager getMetricProducerManager() { diff --git a/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java b/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java index 9600a023..c5acf174 100644 --- a/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java +++ b/api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java @@ -20,7 +20,6 @@ import io.opencensus.common.ExperimentalApi; import io.opencensus.internal.Utils; import io.opencensus.metrics.MetricProducer; import java.util.Collections; -import java.util.LinkedHashSet; import java.util.Set; import javax.annotation.concurrent.ThreadSafe; @@ -32,9 +31,7 @@ import javax.annotation.concurrent.ThreadSafe; */ @ExperimentalApi @ThreadSafe -public final class MetricProducerManager { - private volatile Set<MetricProducer> metricProducers = - Collections.unmodifiableSet(new LinkedHashSet<MetricProducer>()); +public abstract class MetricProducerManager { /** * Adds the {@link MetricProducer} to the manager if it is not already present. @@ -42,34 +39,15 @@ public final class MetricProducerManager { * @param metricProducer the {@code MetricProducer} to be added to the manager. * @since 0.16 */ - public synchronized void add(MetricProducer metricProducer) { - Utils.checkNotNull(metricProducer, "metricProducer"); - // Updating the set of MetricProducers happens under a lock to avoid multiple add or remove - // operations to happen in the same time. - Set<MetricProducer> newMetricProducers = new LinkedHashSet<MetricProducer>(metricProducers); - if (!newMetricProducers.add(metricProducer)) { - // The element already present, no need to update the current set of MetricProducers. - return; - } - metricProducers = Collections.unmodifiableSet(newMetricProducers); - } + public abstract void add(MetricProducer metricProducer); /** * Removes the {@link MetricProducer} to the manager if it is present. * * @param metricProducer the {@code MetricProducer} to be removed from the manager. + * @since 0.16 */ - public synchronized void remove(MetricProducer metricProducer) { - Utils.checkNotNull(metricProducer, "metricProducer"); - // Updating the set of MetricProducers happens under a lock to avoid multiple add or remove - // operations to happen in the same time. - Set<MetricProducer> newMetricProducers = new LinkedHashSet<MetricProducer>(metricProducers); - if (!newMetricProducers.remove(metricProducer)) { - // The element not present, no need to update the current set of MetricProducers. - return; - } - metricProducers = Collections.unmodifiableSet(newMetricProducers); - } + public abstract void remove(MetricProducer metricProducer); /** * Returns all registered {@link MetricProducer}s that should be exported. @@ -78,12 +56,34 @@ public final class MetricProducerManager { * {@code MetricProducer} registered with the {@code MetricProducerManager}. * * @return all registered {@code MetricProducer}s that should be exported. + * @since 0.16 */ - public Set<MetricProducer> getAllMetricProducer() { - return metricProducers; + public abstract Set<MetricProducer> getAllMetricProducer(); + + /** + * Returns a no-op implementation for {@link MetricProducerManager}. + * + * @return a no-op implementation for {@code MetricProducerManager}. + */ + static MetricProducerManager newNoopMetricProducerManager() { + return new NoopMetricProducerManager(); } - // Package protected to allow us to possibly change this to an abstract class in the future. This - // ensures that nobody can create an instance of this class except ExportComponent. - MetricProducerManager() {} + private static final class NoopMetricProducerManager extends MetricProducerManager { + + @Override + public void add(MetricProducer metricProducer) { + Utils.checkNotNull(metricProducer, "metricProducer"); + } + + @Override + public void remove(MetricProducer metricProducer) { + Utils.checkNotNull(metricProducer, "metricProducer"); + } + + @Override + public Set<MetricProducer> getAllMetricProducer() { + return Collections.emptySet(); + } + } } diff --git a/api/src/test/java/io/opencensus/metrics/export/MetricProducerManagerTest.java b/api/src/test/java/io/opencensus/metrics/export/MetricProducerManagerTest.java index b79de213..07854927 100644 --- a/api/src/test/java/io/opencensus/metrics/export/MetricProducerManagerTest.java +++ b/api/src/test/java/io/opencensus/metrics/export/MetricProducerManagerTest.java @@ -19,7 +19,6 @@ package io.opencensus.metrics.export; import static com.google.common.truth.Truth.assertThat; import io.opencensus.metrics.MetricProducer; -import java.util.Set; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -32,9 +31,9 @@ import org.mockito.MockitoAnnotations; /** Unit tests for {@link MetricProducerManager}. */ @RunWith(JUnit4.class) public class MetricProducerManagerTest { - private final MetricProducerManager metricProducerManager = new MetricProducerManager(); + private final MetricProducerManager metricProducerManager = + MetricProducerManager.newNoopMetricProducerManager(); @Mock private MetricProducer metricProducer; - @Mock private MetricProducer metricProducerOther; @Rule public final ExpectedException thrown = ExpectedException.none(); @@ -52,34 +51,13 @@ public class MetricProducerManagerTest { @Test public void add() { metricProducerManager.add(metricProducer); - assertThat(metricProducerManager.getAllMetricProducer()).containsExactly(metricProducer); - } - - @Test - public void add_DuplicateElement() { - metricProducerManager.add(metricProducer); - Set<MetricProducer> metricProducerSet = metricProducerManager.getAllMetricProducer(); - assertThat(metricProducerSet).containsExactly(metricProducer); - metricProducerManager.add(metricProducer); - // Returns the same object. - assertThat(metricProducerManager.getAllMetricProducer()).isSameAs(metricProducerSet); - } - - @Test - public void add_MultipleElements() { - metricProducerManager.add(metricProducer); - Set<MetricProducer> metricProducerSet = metricProducerManager.getAllMetricProducer(); - assertThat(metricProducerSet).containsExactly(metricProducer); - metricProducerManager.add(metricProducerOther); - // Returns the same object. - assertThat(metricProducerManager.getAllMetricProducer()) - .containsExactly(metricProducer, metricProducerOther); + assertThat(metricProducerManager.getAllMetricProducer()).isEmpty(); } @Test public void addAndRemove() { metricProducerManager.add(metricProducer); - assertThat(metricProducerManager.getAllMetricProducer()).containsExactly(metricProducer); + assertThat(metricProducerManager.getAllMetricProducer()).isEmpty(); metricProducerManager.remove(metricProducer); assertThat(metricProducerManager.getAllMetricProducer()).isEmpty(); } @@ -97,16 +75,6 @@ public class MetricProducerManagerTest { } @Test - public void remove_NotPresent() { - metricProducerManager.add(metricProducer); - Set<MetricProducer> metricProducerSet = metricProducerManager.getAllMetricProducer(); - assertThat(metricProducerSet).containsExactly(metricProducer); - metricProducerManager.remove(metricProducerOther); - // Returns the same object. - assertThat(metricProducerManager.getAllMetricProducer()).isSameAs(metricProducerSet); - } - - @Test public void getAllMetricProducer_empty() { assertThat(metricProducerManager.getAllMetricProducer()).isEmpty(); } |
