diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java index 4378bb9c7b8a..886d681ef598 100644 --- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java +++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java @@ -21,8 +21,10 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.beam.sdk.annotations.Experimental; import org.apache.beam.sdk.annotations.Experimental.Kind; +import org.apache.beam.sdk.annotations.Internal; import org.apache.beam.sdk.metrics.Counter; import org.apache.beam.sdk.metrics.MetricName; +import org.apache.beam.sdk.metrics.MetricsContainer; /** * Tracks the current value (and delta) for a Counter metric for a specific context and bundle. @@ -40,10 +42,12 @@ public class CounterCell implements Counter, MetricCell { private final MetricName name; /** - * Package-visibility because all {@link CounterCell CounterCells} should be created by - * {@link MetricsContainerImpl#getCounter(MetricName)}. + * Generally, runners should construct instances using the methods in + * {@link MetricsContainerImpl}, unless they need to define their own version of + * {@link MetricsContainer}. These constructors are *only* public so runners can instantiate. */ - CounterCell(MetricName name) { + @Internal + public CounterCell(MetricName name) { this.name = name; } diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java index 532fc2a36f9b..19760495da7d 100644 --- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java +++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java @@ -22,6 +22,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.apache.beam.sdk.annotations.Experimental; import org.apache.beam.sdk.annotations.Experimental.Kind; +import org.apache.beam.sdk.annotations.Internal; /** * Atomically tracks the dirty-state of a metric. @@ -42,7 +43,8 @@ * completed. */ @Experimental(Kind.METRICS) -class DirtyState implements Serializable { +@Internal +public class DirtyState implements Serializable { private enum State { /** Indicates that there have been changes to the MetricCell since last commit. */ DIRTY, diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java index 5a5099a95cc7..8713ec4a54d5 100644 --- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java +++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java @@ -21,8 +21,10 @@ import java.util.concurrent.atomic.AtomicReference; import org.apache.beam.sdk.annotations.Experimental; import org.apache.beam.sdk.annotations.Experimental.Kind; +import org.apache.beam.sdk.annotations.Internal; import org.apache.beam.sdk.metrics.Distribution; import org.apache.beam.sdk.metrics.MetricName; +import org.apache.beam.sdk.metrics.MetricsContainer; /** * Tracks the current value (and delta) for a Distribution metric. @@ -41,10 +43,12 @@ public class DistributionCell implements Distribution, MetricCell { private final MetricName name; /** - * Package-visibility because all {@link GaugeCell GaugeCells} should be created by - * {@link MetricsContainerImpl#getGauge(MetricName)}. + * Generally, runners should construct instances using the methods in + * {@link MetricsContainerImpl}, unless they need to define their own version of + * {@link MetricsContainer}. These constructors are *only* public so runners can instantiate. */ - GaugeCell(MetricName name) { + @Internal + public GaugeCell(MetricName name) { this.name = name; } @@ -70,7 +74,6 @@ public GaugeData getCumulative() { return gaugeValue.get(); } - @Override public MetricName getName() { return name; diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java index 6967bf0d85b9..99d745474fc6 100644 --- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java +++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java @@ -31,7 +31,9 @@ import org.apache.beam.sdk.metrics.MetricsContainer; /** - * Holds the metrics for a single step and unit-of-commit (bundle). + * Holds the metrics for a single step and uses metric cells that allow extracting the cumulative + * value. Generally, this implementation should be used for a specific unit of commitment (bundle) + * that wishes to report the values since the start of the bundle (eg., for committed metrics). * *

This class is thread-safe. It is intended to be used with 1 (or more) threads are updating * metrics and at-most 1 thread is extracting updates by calling {@link #getUpdates} and diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/metrics/MetricsContainer.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/metrics/MetricsContainer.java index 62b0806906fc..361c75f0e8a6 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/metrics/MetricsContainer.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/metrics/MetricsContainer.java @@ -23,7 +23,8 @@ import org.apache.beam.sdk.annotations.Experimental.Kind; /** - * Holds the metrics for a single step and unit-of-commit (bundle). + * Holds the metrics for a single step. Each of the methods should return an implementation of the + * appropriate metrics interface for the "current" step. */ @Experimental(Kind.METRICS) public interface MetricsContainer extends Serializable {