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/src/main/java/io/opencensus | |
parent | 66ae2eed952579e6982b05c0bcebe0670afb0afe (diff) | |
download | opencensus-java-775816d699bd4f02788db5609a87386940e34aff.tar.gz |
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/src/main/java/io/opencensus')
4 files changed, 34 insertions, 38 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(); + } + } } |