Class DefaultSynchronousMetricStorage<T extends PointData,U extends ExemplarData>
- java.lang.Object
-
- io.opentelemetry.sdk.metrics.internal.state.DefaultSynchronousMetricStorage<T,U>
-
- All Implemented Interfaces:
MetricStorage
,SynchronousMetricStorage
,WriteableMetricStorage
public final class DefaultSynchronousMetricStorage<T extends PointData,U extends ExemplarData> extends java.lang.Object implements SynchronousMetricStorage
Stores aggregatedMetricData
for synchronous instruments.This class is internal and is hence not for public use. Its APIs are unstable and can change at any time.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
DefaultSynchronousMetricStorage.AggregatorHolder<T extends PointData,U extends ExemplarData>
-
Field Summary
Fields Modifier and Type Field Description private AggregationTemporality
aggregationTemporality
private Aggregator<T,U>
aggregator
private java.util.concurrent.ConcurrentLinkedQueue<AggregatorHandle<T,U>>
aggregatorHandlePool
private DefaultSynchronousMetricStorage.AggregatorHolder<T,U>
aggregatorHolder
private AttributesProcessor
attributesProcessor
private static java.util.logging.Logger
internalLogger
private ThrottlingLogger
logger
private int
maxCardinality
This field is set to 1 less than the actual intended cardinality limit, allowing the last slot to be filled by theMetricStorage.CARDINALITY_OVERFLOW
series.private MemoryMode
memoryMode
private MetricDescriptor
metricDescriptor
private java.util.concurrent.ConcurrentHashMap<Attributes,AggregatorHandle<T,U>>
previousCollectionAggregatorHandles
private RegisteredReader
registeredReader
private java.util.ArrayList<T>
reusableResultList
-
Fields inherited from interface io.opentelemetry.sdk.metrics.internal.state.MetricStorage
CARDINALITY_OVERFLOW, DEFAULT_MAX_CARDINALITY
-
-
Constructor Summary
Constructors Constructor Description DefaultSynchronousMetricStorage(RegisteredReader registeredReader, MetricDescriptor metricDescriptor, Aggregator<T,U> aggregator, AttributesProcessor attributesProcessor, int maxCardinality)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description MetricData
collect(Resource resource, InstrumentationScopeInfo instrumentationScopeInfo, long startEpochNanos, long epochNanos)
Collects the metrics from this storage.private AggregatorHandle<T,U>
getAggregatorHandle(java.util.concurrent.ConcurrentHashMap<Attributes,AggregatorHandle<T,U>> aggregatorHandles, Attributes attributes, Context context)
(package private) java.util.Queue<AggregatorHandle<T,U>>
getAggregatorHandlePool()
private DefaultSynchronousMetricStorage.AggregatorHolder<T,U>
getHolderForRecord()
Obtain the AggregatorHolder for recording measurements, re-reading the volatile this.aggregatorHolder until we access one where recordsInProgress is even.MetricDescriptor
getMetricDescriptor()
Returns a description of the metric produced in this storage.boolean
isEnabled()
Returnstrue
if the storage is actively recording measurements, andfalse
otherwise (i.e.void
recordDouble(double value, Attributes attributes, Context context)
Records a measurement.void
recordLong(long value, Attributes attributes, Context context)
Records a measurement.private void
releaseHolderForRecord(DefaultSynchronousMetricStorage.AggregatorHolder<T,U> aggregatorHolder)
Called on theDefaultSynchronousMetricStorage.AggregatorHolder
obtained fromgetHolderForRecord()
to indicate that recording is complete, and it is safe to collect.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.opentelemetry.sdk.metrics.internal.state.MetricStorage
isEmpty
-
-
-
-
Field Detail
-
internalLogger
private static final java.util.logging.Logger internalLogger
-
logger
private final ThrottlingLogger logger
-
registeredReader
private final RegisteredReader registeredReader
-
metricDescriptor
private final MetricDescriptor metricDescriptor
-
aggregationTemporality
private final AggregationTemporality aggregationTemporality
-
aggregator
private final Aggregator<T extends PointData,U extends ExemplarData> aggregator
-
aggregatorHolder
private volatile DefaultSynchronousMetricStorage.AggregatorHolder<T extends PointData,U extends ExemplarData> aggregatorHolder
-
attributesProcessor
private final AttributesProcessor attributesProcessor
-
memoryMode
private final MemoryMode memoryMode
-
previousCollectionAggregatorHandles
private volatile java.util.concurrent.ConcurrentHashMap<Attributes,AggregatorHandle<T extends PointData,U extends ExemplarData>> previousCollectionAggregatorHandles
-
maxCardinality
private final int maxCardinality
This field is set to 1 less than the actual intended cardinality limit, allowing the last slot to be filled by theMetricStorage.CARDINALITY_OVERFLOW
series.
-
aggregatorHandlePool
private final java.util.concurrent.ConcurrentLinkedQueue<AggregatorHandle<T extends PointData,U extends ExemplarData>> aggregatorHandlePool
-
-
Constructor Detail
-
DefaultSynchronousMetricStorage
DefaultSynchronousMetricStorage(RegisteredReader registeredReader, MetricDescriptor metricDescriptor, Aggregator<T,U> aggregator, AttributesProcessor attributesProcessor, int maxCardinality)
-
-
Method Detail
-
getAggregatorHandlePool
java.util.Queue<AggregatorHandle<T,U>> getAggregatorHandlePool()
-
recordLong
public void recordLong(long value, Attributes attributes, Context context)
Description copied from interface:WriteableMetricStorage
Records a measurement.- Specified by:
recordLong
in interfaceWriteableMetricStorage
-
recordDouble
public void recordDouble(double value, Attributes attributes, Context context)
Description copied from interface:WriteableMetricStorage
Records a measurement.- Specified by:
recordDouble
in interfaceWriteableMetricStorage
-
isEnabled
public boolean isEnabled()
Description copied from interface:WriteableMetricStorage
Returnstrue
if the storage is actively recording measurements, andfalse
otherwise (i.e. noop / empty metric storage is installed).- Specified by:
isEnabled
in interfaceWriteableMetricStorage
-
getHolderForRecord
private DefaultSynchronousMetricStorage.AggregatorHolder<T,U> getHolderForRecord()
Obtain the AggregatorHolder for recording measurements, re-reading the volatile this.aggregatorHolder until we access one where recordsInProgress is even. Collect sets recordsInProgress to odd as a signal that AggregatorHolder is stale and is being replaced. Record operations increment recordInProgress by 2. Callers MUST callreleaseHolderForRecord(AggregatorHolder)
when record operation completes to signal to that its safe to proceed with Collect operations.
-
releaseHolderForRecord
private void releaseHolderForRecord(DefaultSynchronousMetricStorage.AggregatorHolder<T,U> aggregatorHolder)
Called on theDefaultSynchronousMetricStorage.AggregatorHolder
obtained fromgetHolderForRecord()
to indicate that recording is complete, and it is safe to collect.
-
getAggregatorHandle
private AggregatorHandle<T,U> getAggregatorHandle(java.util.concurrent.ConcurrentHashMap<Attributes,AggregatorHandle<T,U>> aggregatorHandles, Attributes attributes, Context context)
-
collect
public MetricData collect(Resource resource, InstrumentationScopeInfo instrumentationScopeInfo, long startEpochNanos, long epochNanos)
Description copied from interface:MetricStorage
Collects the metrics from this storage. If storingAggregationTemporality.DELTA
metrics, reset for the next collection period.Note: This is a stateful operation and will reset any interval-related state for the
collector
.- Specified by:
collect
in interfaceMetricStorage
- Parameters:
resource
- The resource associated with the metrics.instrumentationScopeInfo
- The instrumentation scope generating the metrics.startEpochNanos
- The start timestamp for this SDK.epochNanos
- The timestamp for this collection.- Returns:
- The
MetricData
from this collection period.
-
getMetricDescriptor
public MetricDescriptor getMetricDescriptor()
Description copied from interface:MetricStorage
Returns a description of the metric produced in this storage.- Specified by:
getMetricDescriptor
in interfaceMetricStorage
-
-