Skip to content

Commit 6d00153

Browse files
committed
Remove ExemplarReservoir generic type
1 parent 6a7a620 commit 6d00153

File tree

48 files changed

+490
-621
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+490
-621
lines changed

sdk/metrics/src/jmh/java/io/opentelemetry/sdk/metrics/internal/aggregator/HistogramAggregationParam.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,27 @@ public enum HistogramAggregationParam {
1717
new DoubleExplicitBucketHistogramAggregator(
1818
ExplicitBucketHistogramUtils.createBoundaryArray(
1919
ExplicitBucketHistogramUtils.DEFAULT_HISTOGRAM_BUCKET_BOUNDARIES),
20-
ExemplarReservoir::doubleNoSamples,
20+
ExemplarReservoir::noSamples,
2121
IMMUTABLE_DATA)),
2222
EXPLICIT_SINGLE_BUCKET(
2323
new DoubleExplicitBucketHistogramAggregator(
2424
ExplicitBucketHistogramUtils.createBoundaryArray(Collections.emptyList()),
25-
ExemplarReservoir::doubleNoSamples,
25+
ExemplarReservoir::noSamples,
2626
IMMUTABLE_DATA)),
2727
EXPONENTIAL_SMALL_CIRCULAR_BUFFER(
2828
new DoubleBase2ExponentialHistogramAggregator(
29-
ExemplarReservoir::doubleNoSamples, 20, 0, IMMUTABLE_DATA)),
29+
ExemplarReservoir::noSamples, 20, 0, IMMUTABLE_DATA)),
3030
EXPONENTIAL_CIRCULAR_BUFFER(
3131
new DoubleBase2ExponentialHistogramAggregator(
32-
ExemplarReservoir::doubleNoSamples, 160, 0, IMMUTABLE_DATA));
32+
ExemplarReservoir::noSamples, 160, 0, IMMUTABLE_DATA));
3333

34-
private final Aggregator<?, ?> aggregator;
34+
private final Aggregator<?> aggregator;
3535

36-
HistogramAggregationParam(Aggregator<?, ?> aggregator) {
36+
HistogramAggregationParam(Aggregator<?> aggregator) {
3737
this.aggregator = aggregator;
3838
}
3939

40-
public Aggregator<?, ?> getAggregator() {
40+
public Aggregator<?> getAggregator() {
4141
return this.aggregator;
4242
}
4343
}

sdk/metrics/src/jmh/java/io/opentelemetry/sdk/metrics/internal/aggregator/HistogramBenchmark.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class HistogramBenchmark {
3333
public static class ThreadState {
3434
@Param HistogramValueGenerator valueGen;
3535
@Param HistogramAggregationParam aggregation;
36-
private AggregatorHandle<?, ?> aggregatorHandle;
36+
private AggregatorHandle<?> aggregatorHandle;
3737
private DoubleSupplier valueSupplier;
3838

3939
@Setup(Level.Trial)

sdk/metrics/src/jmh/java/io/opentelemetry/sdk/metrics/internal/aggregator/HistogramScaleBenchmark.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class HistogramScaleBenchmark {
3939
public static class ThreadState {
4040
@Param HistogramValueGenerator valueGen;
4141
@Param HistogramAggregationParam aggregation;
42-
private AggregatorHandle<?, ?> aggregatorHandle;
42+
private AggregatorHandle<?> aggregatorHandle;
4343
private DoubleSupplier valueSupplier;
4444

4545
@Setup(Level.Invocation)

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ WriteableMetricStorage registerSynchronousMetricStorage(InstrumentDescriptor ins
304304
/** Register new asynchronous storage associated with a given instrument. */
305305
SdkObservableMeasurement registerObservableMeasurement(
306306
InstrumentDescriptor instrumentDescriptor) {
307-
List<AsynchronousMetricStorage<?, ?>> registeredStorages = new ArrayList<>();
307+
List<AsynchronousMetricStorage<?>> registeredStorages = new ArrayList<>();
308308
for (Map.Entry<RegisteredReader, MetricStorageRegistry> entry :
309309
readerStorageRegistries.entrySet()) {
310310
RegisteredReader reader = entry.getKey();

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/AbstractSumAggregator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor;
1212

1313
abstract class AbstractSumAggregator<T extends PointData, U extends ExemplarData>
14-
implements Aggregator<T, U> {
14+
implements Aggregator<T> {
1515
private final boolean isMonotonic;
1616

1717
AbstractSumAggregator(InstrumentDescriptor instrumentDescriptor) {

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/Aggregator.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
99
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
10-
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
11-
import io.opentelemetry.sdk.metrics.data.ExemplarData;
1210
import io.opentelemetry.sdk.metrics.data.MetricData;
1311
import io.opentelemetry.sdk.metrics.data.MetricDataType;
1412
import io.opentelemetry.sdk.metrics.data.PointData;
@@ -25,9 +23,9 @@
2523
* at any time.
2624
*/
2725
@Immutable
28-
public interface Aggregator<T extends PointData, U extends ExemplarData> {
26+
public interface Aggregator<T extends PointData> {
2927
/** Returns the drop aggregator, an aggregator that drops measurements. */
30-
static Aggregator<?, DoubleExemplarData> drop() {
28+
static Aggregator<?> drop() {
3129
return DropAggregator.INSTANCE;
3230
}
3331

@@ -37,7 +35,7 @@ static Aggregator<?, DoubleExemplarData> drop() {
3735
*
3836
* @return a new {@link AggregatorHandle}.
3937
*/
40-
AggregatorHandle<T, U> createHandle();
38+
AggregatorHandle<T> createHandle();
4139

4240
/**
4341
* Returns a new DELTA point by computing the difference between two cumulative points.

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/AggregatorFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.opentelemetry.sdk.metrics.internal.aggregator;
77

88
import io.opentelemetry.sdk.common.export.MemoryMode;
9-
import io.opentelemetry.sdk.metrics.data.ExemplarData;
109
import io.opentelemetry.sdk.metrics.data.PointData;
1110
import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor;
1211
import io.opentelemetry.sdk.metrics.internal.exemplar.ExemplarFilter;
@@ -31,7 +30,7 @@ public interface AggregatorFactory {
3130
* @return a new {@link Aggregator}. {@link Aggregator#drop()} indicates no measurements should be
3231
* recorded.
3332
*/
34-
<T extends PointData, U extends ExemplarData> Aggregator<T, U> createAggregator(
33+
<T extends PointData> Aggregator<T> createAggregator(
3534
InstrumentDescriptor instrumentDescriptor,
3635
ExemplarFilter exemplarFilter,
3736
MemoryMode memoryMode);

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/AggregatorHandle.java

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
import io.opentelemetry.api.common.Attributes;
99
import io.opentelemetry.context.Context;
10-
import io.opentelemetry.sdk.metrics.data.ExemplarData;
10+
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
11+
import io.opentelemetry.sdk.metrics.data.LongExemplarData;
1112
import io.opentelemetry.sdk.metrics.data.PointData;
1213
import io.opentelemetry.sdk.metrics.internal.exemplar.ExemplarReservoir;
1314
import java.util.List;
@@ -24,14 +25,16 @@
2425
* at any time.
2526
*/
2627
@ThreadSafe
27-
public abstract class AggregatorHandle<T extends PointData, U extends ExemplarData> {
28+
public abstract class AggregatorHandle<T extends PointData> {
2829

2930
// A reservoir of sampled exemplars for this time period.
30-
private final ExemplarReservoir<U> exemplarReservoir;
31+
private final ExemplarReservoir exemplarReservoir;
3132
private volatile boolean valuesRecorded = false;
33+
private final boolean isDoubleType;
3234

33-
protected AggregatorHandle(ExemplarReservoir<U> exemplarReservoir) {
35+
protected AggregatorHandle(ExemplarReservoir exemplarReservoir) {
3436
this.exemplarReservoir = exemplarReservoir;
37+
this.isDoubleType = isDoubleType();
3538
}
3639

3740
/**
@@ -44,21 +47,54 @@ public final T aggregateThenMaybeReset(
4447
valuesRecorded = false;
4548
}
4649

47-
return doAggregateThenMaybeReset(
50+
if (isDoubleType) {
51+
return doAggregateThenMaybeResetDoubles(
52+
startEpochNanos,
53+
epochNanos,
54+
attributes,
55+
exemplarReservoir.collectAndResetDoubles(attributes),
56+
reset);
57+
}
58+
return doAggregateThenMaybeResetLongs(
4859
startEpochNanos,
4960
epochNanos,
5061
attributes,
51-
exemplarReservoir.collectAndReset(attributes),
62+
exemplarReservoir.collectAndResetLongs(attributes),
5263
reset);
5364
}
5465

66+
/**
67+
* Indicates whether this {@link AggregatorHandle} supports double or long values.
68+
*
69+
* <p>If it supports doubles, it MUST implement {@link #doAggregateThenMaybeResetDoubles(long,
70+
* long, Attributes, List, boolean)} and {@link #doRecordDouble(double)}.
71+
*
72+
* <p>If it supports long, it MUST implement {@link #doAggregateThenMaybeResetLongs(long, long,
73+
* Attributes, List, boolean)} and {@link #doRecordLong(long)}.
74+
*
75+
* @return true if it supports doubles, false if it supports longs.
76+
*/
77+
protected abstract boolean isDoubleType();
78+
79+
/** Implementation of the {@link #aggregateThenMaybeReset(long, long, Attributes, boolean)} . */
80+
protected T doAggregateThenMaybeResetDoubles(
81+
long startEpochNanos,
82+
long epochNanos,
83+
Attributes attributes,
84+
List<DoubleExemplarData> exemplars,
85+
boolean reset) {
86+
throw new UnsupportedOperationException("This aggregator does not support double values.");
87+
}
88+
5589
/** Implementation of the {@link #aggregateThenMaybeReset(long, long, Attributes, boolean)} . */
56-
protected abstract T doAggregateThenMaybeReset(
90+
protected T doAggregateThenMaybeResetLongs(
5791
long startEpochNanos,
5892
long epochNanos,
5993
Attributes attributes,
60-
List<U> exemplars,
61-
boolean reset);
94+
List<LongExemplarData> exemplars,
95+
boolean reset) {
96+
throw new UnsupportedOperationException("This aggregator does not support long values.");
97+
}
6298

6399
public final void recordLong(long value, Attributes attributes, Context context) {
64100
exemplarReservoir.offerLongMeasurement(value, attributes, context);
@@ -82,8 +118,7 @@ public final void recordLong(long value) {
82118
* values.
83119
*/
84120
protected void doRecordLong(long value) {
85-
throw new UnsupportedOperationException(
86-
"This aggregator does not support recording long values.");
121+
throw new UnsupportedOperationException("This aggregator does not support long values.");
87122
}
88123

89124
public final void recordDouble(double value, Attributes attributes, Context context) {
@@ -108,8 +143,7 @@ public final void recordDouble(double value) {
108143
* double values.
109144
*/
110145
protected void doRecordDouble(double value) {
111-
throw new UnsupportedOperationException(
112-
"This aggregator does not support recording double values.");
146+
throw new UnsupportedOperationException("This aggregator does not support double values.");
113147
}
114148

115149
/**

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/DoubleBase2ExponentialHistogramAggregator.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
* at any time.
3636
*/
3737
public final class DoubleBase2ExponentialHistogramAggregator
38-
implements Aggregator<ExponentialHistogramPointData, DoubleExemplarData> {
38+
implements Aggregator<ExponentialHistogramPointData> {
3939

40-
private final Supplier<ExemplarReservoir<DoubleExemplarData>> reservoirSupplier;
40+
private final Supplier<ExemplarReservoir> reservoirSupplier;
4141
private final int maxBuckets;
4242
private final int maxScale;
4343
private final MemoryMode memoryMode;
@@ -48,7 +48,7 @@ public final class DoubleBase2ExponentialHistogramAggregator
4848
* @param reservoirSupplier Supplier of exemplar reservoirs per-stream.
4949
*/
5050
public DoubleBase2ExponentialHistogramAggregator(
51-
Supplier<ExemplarReservoir<DoubleExemplarData>> reservoirSupplier,
51+
Supplier<ExemplarReservoir> reservoirSupplier,
5252
int maxBuckets,
5353
int maxScale,
5454
MemoryMode memoryMode) {
@@ -59,7 +59,7 @@ public DoubleBase2ExponentialHistogramAggregator(
5959
}
6060

6161
@Override
62-
public AggregatorHandle<ExponentialHistogramPointData, DoubleExemplarData> createHandle() {
62+
public AggregatorHandle<ExponentialHistogramPointData> createHandle() {
6363
return new Handle(reservoirSupplier.get(), maxBuckets, maxScale, memoryMode);
6464
}
6565

@@ -79,8 +79,7 @@ public MetricData toMetricData(
7979
ImmutableExponentialHistogramData.create(temporality, points));
8080
}
8181

82-
static final class Handle
83-
extends AggregatorHandle<ExponentialHistogramPointData, DoubleExemplarData> {
82+
static final class Handle extends AggregatorHandle<ExponentialHistogramPointData> {
8483
private final int maxBuckets;
8584
private final int maxScale;
8685
@Nullable private DoubleBase2ExponentialHistogramBuckets positiveBuckets;
@@ -96,11 +95,7 @@ static final class Handle
9695
// Used only when MemoryMode = REUSABLE_DATA
9796
@Nullable private final MutableExponentialHistogramPointData reusablePoint;
9897

99-
Handle(
100-
ExemplarReservoir<DoubleExemplarData> reservoir,
101-
int maxBuckets,
102-
int maxScale,
103-
MemoryMode memoryMode) {
98+
Handle(ExemplarReservoir reservoir, int maxBuckets, int maxScale, MemoryMode memoryMode) {
10499
super(reservoir);
105100
this.maxBuckets = maxBuckets;
106101
this.maxScale = maxScale;
@@ -118,7 +113,7 @@ static final class Handle
118113
}
119114

120115
@Override
121-
protected synchronized ExponentialHistogramPointData doAggregateThenMaybeReset(
116+
protected synchronized ExponentialHistogramPointData doAggregateThenMaybeResetDoubles(
122117
long startEpochNanos,
123118
long epochNanos,
124119
Attributes attributes,
@@ -261,6 +256,11 @@ protected synchronized void doRecordDouble(double value) {
261256
}
262257
}
263258

259+
@Override
260+
protected boolean isDoubleType() {
261+
return true;
262+
}
263+
264264
@Override
265265
protected void doRecordLong(long value) {
266266
doRecordDouble((double) value);

sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/aggregator/DoubleExplicitBucketHistogramAggregator.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636
* at any time.
3737
*/
3838
public final class DoubleExplicitBucketHistogramAggregator
39-
implements Aggregator<HistogramPointData, DoubleExemplarData> {
39+
implements Aggregator<HistogramPointData> {
4040
private final double[] boundaries;
4141
private final MemoryMode memoryMode;
4242

4343
// a cache for converting to MetricData
4444
private final List<Double> boundaryList;
4545

46-
private final Supplier<ExemplarReservoir<DoubleExemplarData>> reservoirSupplier;
46+
private final Supplier<ExemplarReservoir> reservoirSupplier;
4747

4848
/**
4949
* Constructs an explicit bucket histogram aggregator.
@@ -53,9 +53,7 @@ public final class DoubleExplicitBucketHistogramAggregator
5353
* @param memoryMode The {@link MemoryMode} to use in this aggregator.
5454
*/
5555
public DoubleExplicitBucketHistogramAggregator(
56-
double[] boundaries,
57-
Supplier<ExemplarReservoir<DoubleExemplarData>> reservoirSupplier,
58-
MemoryMode memoryMode) {
56+
double[] boundaries, Supplier<ExemplarReservoir> reservoirSupplier, MemoryMode memoryMode) {
5957
this.boundaries = boundaries;
6058
this.memoryMode = memoryMode;
6159

@@ -68,7 +66,7 @@ public DoubleExplicitBucketHistogramAggregator(
6866
}
6967

7068
@Override
71-
public AggregatorHandle<HistogramPointData, DoubleExemplarData> createHandle() {
69+
public AggregatorHandle<HistogramPointData> createHandle() {
7270
return new Handle(this.boundaryList, this.boundaries, reservoirSupplier.get(), memoryMode);
7371
}
7472

@@ -88,7 +86,7 @@ public MetricData toMetricData(
8886
ImmutableHistogramData.create(temporality, pointData));
8987
}
9088

91-
static final class Handle extends AggregatorHandle<HistogramPointData, DoubleExemplarData> {
89+
static final class Handle extends AggregatorHandle<HistogramPointData> {
9290
// read-only
9391
private final List<Double> boundaryList;
9492
// read-only
@@ -117,7 +115,7 @@ static final class Handle extends AggregatorHandle<HistogramPointData, DoubleExe
117115
Handle(
118116
List<Double> boundaryList,
119117
double[] boundaries,
120-
ExemplarReservoir<DoubleExemplarData> reservoir,
118+
ExemplarReservoir reservoir,
121119
MemoryMode memoryMode) {
122120
super(reservoir);
123121
this.boundaryList = boundaryList;
@@ -133,7 +131,12 @@ static final class Handle extends AggregatorHandle<HistogramPointData, DoubleExe
133131
}
134132

135133
@Override
136-
protected HistogramPointData doAggregateThenMaybeReset(
134+
protected boolean isDoubleType() {
135+
return true;
136+
}
137+
138+
@Override
139+
protected HistogramPointData doAggregateThenMaybeResetDoubles(
137140
long startEpochNanos,
138141
long epochNanos,
139142
Attributes attributes,

0 commit comments

Comments
 (0)