Skip to content

Commit 1371683

Browse files
committed
fix impl
1 parent 4613e7c commit 1371683

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.opentelemetry.sdk.resources.Resource;
2323
import java.util.Collection;
2424
import java.util.List;
25+
import java.util.concurrent.atomic.AtomicBoolean;
2526
import java.util.function.Supplier;
2627
import javax.annotation.Nullable;
2728
import javax.annotation.concurrent.ThreadSafe;
@@ -112,7 +113,7 @@ public MetricData toMetricData(
112113
}
113114

114115
static final class Handle extends AggregatorHandle<DoublePointData, DoubleExemplarData> {
115-
private volatile boolean set = false;
116+
private final AtomicBoolean set = new AtomicBoolean(false);
116117
private volatile double current = 0;
117118

118119
// Only used when memoryMode is REUSABLE_DATA
@@ -135,12 +136,9 @@ protected DoublePointData doAggregateThenMaybeReset(
135136
List<DoubleExemplarData> exemplars,
136137
boolean reset) {
137138
double currentLocal = current;
138-
if (!set) {
139+
if ((reset && !set.compareAndSet(true, false)) || (!reset && !set.get())) {
139140
throw new NullPointerException();
140141
}
141-
if (reset) {
142-
set = false;
143-
}
144142

145143
DoublePointData output;
146144
if (reusablePoint != null) {
@@ -151,14 +149,13 @@ protected DoublePointData doAggregateThenMaybeReset(
151149
ImmutableDoublePointData.create(
152150
startEpochNanos, epochNanos, attributes, currentLocal, exemplars);
153151
}
154-
155152
return output;
156153
}
157154

158155
@Override
159156
protected void doRecordDouble(double value) {
160157
current = value;
161-
set = true;
158+
set.set(true);
162159
}
163160
}
164161
}

0 commit comments

Comments
 (0)