Class AsyncMetricEntityStateTwoEnums<E1 extends Enum<E1> & VeniceDimensionInterface,E2 extends Enum<E2> & VeniceDimensionInterface>
java.lang.Object
com.linkedin.venice.stats.metrics.AsyncMetricEntityStateTwoEnums<E1,E2>
public class AsyncMetricEntityStateTwoEnums<E1 extends Enum<E1> & VeniceDimensionInterface,E2 extends Enum<E2> & VeniceDimensionInterface>
extends Object
Async state wrapper for a metric with two enum dimensions (
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.LiveStateResolverTwoEnums— maps an(e1, e2)pair to its backing state, ornullwhen the pair is dormant. Thenullreturn is the liveness signal: the SDK never sees an attribute set for a dormant pair, so the cardinality cap is only charged for pairs that actually have data.AsyncMetricResolvers.ValueResolverTwoEnums— reads the numeric value from the resolved state plus both enum values (useful when the value logic branches on the enums). Only invoked whenAsyncMetricResolvers.LiveStateResolverTwoEnums.resolve(E1, E2)returned non-null.
Attribute sets are precomputed once per pair at construction and cached. Per-collection cost
is O(|E1| × |E2|) liveStateResolver calls plus one
measurement.record(...) per emitted pair.
-
Method Summary
Modifier and TypeMethodDescriptionstatic <E1 extends Enum<E1> & VeniceDimensionInterface,E2 extends Enum<E2> & VeniceDimensionInterface, S>
AsyncMetricEntityStateTwoEnums<E1,E2> create(MetricEntity metricEntity, VeniceOpenTelemetryMetricsRepository otelRepository, Map<VeniceMetricsDimensions, String> baseDimensionsMap, Class<E1> enumTypeClass1, Class<E2> enumTypeClass2, AsyncMetricResolvers.LiveStateResolverTwoEnums<E1, E2, S> liveStateResolver, AsyncMetricResolvers.ValueResolverTwoEnums<S, E1, E2> valueResolver) Creates a state wrapper and registers a single multi-emit observable gauge.booleanVisible for testing — the cached attributes per(e1, e2), ornullif OTel is disabled.Visible for testing — the underlying SDK instrument handle, ornullif OTel disabled.
-
Method Details
-
create
public static <E1 extends Enum<E1> & VeniceDimensionInterface,E2 extends Enum<E2> & VeniceDimensionInterface, AsyncMetricEntityStateTwoEnums<E1,S> E2> create(MetricEntity metricEntity, VeniceOpenTelemetryMetricsRepository otelRepository, Map<VeniceMetricsDimensions, String> baseDimensionsMap, Class<E1> enumTypeClass1, Class<E2> enumTypeClass2, AsyncMetricResolvers.LiveStateResolverTwoEnums<E1, E2, S> liveStateResolver, AsyncMetricResolvers.ValueResolverTwoEnums<S, E1, E2> valueResolver) Creates a state wrapper and registers a single multi-emit observable gauge. On every collection the SDK invokes the callback, which for each(e1, e2)pair:- calls
liveStateResolver.resolve(e1, e2)— ifnull, skips this pair for this cycle; - otherwise calls
valueResolver.extractValue(state, e1, e2)and emits a data point with the precomputed attributes.
- Type Parameters:
S- the state type returned byliveStateResolver. Any reference type — the infra never inspects it beyond null-check.
- calls
-
emitOpenTelemetryMetrics
public boolean emitOpenTelemetryMetrics() -
getAttributesByEnum
Visible for testing — the cached attributes per(e1, e2), ornullif OTel is disabled. -
getInstrument
Visible for testing — the underlying SDK instrument handle, ornullif OTel disabled.
-