Class AsyncMetricEntityStateOneEnum<E extends Enum<E> & VeniceDimensionInterface>
java.lang.Object
com.linkedin.venice.stats.metrics.AsyncMetricEntityStateOneEnum<E>
public class AsyncMetricEntityStateOneEnum<E extends Enum<E> & VeniceDimensionInterface>
extends Object
Async state wrapper for a metric with one enum dimension (
MetricType.ASYNC_GAUGE or
MetricType.ASYNC_DOUBLE_GAUGE).
Two-callback contract (enforces cardinality control)
This class registers exactly ONE OTel observable gauge per metric entity. The caller provides:AsyncMetricResolvers.LiveStateResolverOneEnum— maps an enum value to its backing state, ornullwhen the combo is dormant. Thenullreturn is the liveness signal: the SDK never sees an attribute set for a dormant combo, so the cardinality cap is only charged for combos that actually have data.AsyncMetricResolvers.ValueResolverOneEnum— reads the numeric value from the resolved state. Only invoked whenAsyncMetricResolvers.LiveStateResolverOneEnum.resolve(E)returned non-null.
Attribute sets are precomputed once per enum value at construction and cached. Per-collection
cost is O(|E|) liveStateResolver calls plus one measurement.record(...)
per emitted combo.
-
Method Summary
Modifier and TypeMethodDescriptionstatic <E extends Enum<E> & VeniceDimensionInterface,S>
AsyncMetricEntityStateOneEnum<E>create(MetricEntity metricEntity, VeniceOpenTelemetryMetricsRepository otelRepository, Map<VeniceMetricsDimensions, String> baseDimensionsMap, Class<E> enumTypeClass, AsyncMetricResolvers.LiveStateResolverOneEnum<E, S> liveStateResolver, AsyncMetricResolvers.ValueResolverOneEnum<S, E> valueResolver) Creates a state wrapper and registers a single multi-emit observable gauge.booleanVisible for testing — the cached attributes per enum value, ornullif OTel is disabled.Visible for testing — the underlying SDK instrument handle, ornullif OTel disabled.
-
Method Details
-
create
public static <E extends Enum<E> & VeniceDimensionInterface,S> AsyncMetricEntityStateOneEnum<E> create(MetricEntity metricEntity, VeniceOpenTelemetryMetricsRepository otelRepository, Map<VeniceMetricsDimensions, String> baseDimensionsMap, Class<E> enumTypeClass, AsyncMetricResolvers.LiveStateResolverOneEnum<E, S> liveStateResolver, AsyncMetricResolvers.ValueResolverOneEnum<S, E> valueResolver) Creates a state wrapper and registers a single multi-emit observable gauge. On every collection the SDK invokes the callback, which for each enum value:- calls
liveStateResolver.resolve(enumValue)— ifnull, skips this combo for this cycle; - otherwise calls
valueResolver.extractValue(state, enumValue)and emits a data point with the precomputed attributes.
When OTel is disabled, no registration happens and neither callback is invoked.
- Type Parameters:
S- the state type returned byliveStateResolver. Can be any reference type (wrapper, task, counter, etc.) — the infra never inspects it beyond null-check.
- calls
-
emitOpenTelemetryMetrics
public boolean emitOpenTelemetryMetrics() -
getAttributesByEnum
Visible for testing — the cached attributes per enum value, ornullif OTel is disabled. -
getInstrument
Visible for testing — the underlying SDK instrument handle, ornullif OTel disabled.
-