aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorYang Song <songy23@users.noreply.github.com>2018-08-13 11:36:27 -0700
committerGitHub <noreply@github.com>2018-08-13 11:36:27 -0700
commit775816d699bd4f02788db5609a87386940e34aff (patch)
tree021d47fb4c67d0441a5861a9e4a69b8d168e572d /api
parent66ae2eed952579e6982b05c0bcebe0670afb0afe (diff)
downloadplatform_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')
-rw-r--r--api/src/main/java/io/opencensus/common/ToDoubleFunction.java4
-rw-r--r--api/src/main/java/io/opencensus/common/ToLongFunction.java4
-rw-r--r--api/src/main/java/io/opencensus/metrics/export/ExportComponent.java2
-rw-r--r--api/src/main/java/io/opencensus/metrics/export/MetricProducerManager.java62
-rw-r--r--api/src/test/java/io/opencensus/metrics/export/MetricProducerManagerTest.java40
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();
}