Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public class PipeTaskInfo implements SnapshotProcessor {
private final PipeMetaKeeper pipeMetaKeeper;

// Tracks runtime exception changes that have not yet been persisted through consensus.
private volatile boolean pipeMetaExceptionPersistencePending;
private final AtomicBoolean pipeMetaExceptionPersistencePending = new AtomicBoolean(false);

// Pure in-memory object, not involved in snapshot serialization and deserialization.
private final PipeTaskInfoVersion pipeTaskInfoVersion;
Expand Down Expand Up @@ -1171,19 +1171,21 @@ public boolean recordDataNodePushPipeMetaExceptions(
try {
final boolean hasException =
recordDataNodePushPipeMetaExceptionsInternal(respMap, fallbackPipeStaticMeta);
pipeMetaExceptionPersistencePending |= hasException;
if (hasException) {
pipeMetaExceptionPersistencePending.set(true);
}
return hasException;
} finally {
releaseWriteLock();
}
}

public boolean hasPendingPipeMetaExceptionPersistence() {
return pipeMetaExceptionPersistencePending;
return pipeMetaExceptionPersistencePending.get();
}

public void markPipeMetaExceptionsPersisted() {
pipeMetaExceptionPersistencePending = false;
pipeMetaExceptionPersistencePending.set(false);
}

private boolean recordDataNodePushPipeMetaExceptionsInternal(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;

public class PipeResourceMetrics implements IMetricSet {

Expand Down Expand Up @@ -65,8 +66,9 @@ public enum TsFileParserAdmissionRejectReason {
}
}

private volatile Map<TsFileParserAdmissionRejectReason, Counter>
tsFileParserAdmissionRejectCounters = Collections.emptyMap();
// Replaced as a whole on bind/unbind; the published map is never modified.
private final AtomicReference<Map<TsFileParserAdmissionRejectReason, Counter>>
tsFileParserAdmissionRejectCounters = new AtomicReference<>(Collections.emptyMap());
private volatile Counter tsFileParserAdmissionYieldCounter =
DoNothingMetricManager.DO_NOTHING_COUNTER;
private volatile Timer tsFileParserAdmissionWaitTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
Expand Down Expand Up @@ -144,7 +146,7 @@ public void bindTo(final AbstractMetricService metricService) {
Tag.REASON.toString(),
reason.tag));
}
tsFileParserAdmissionRejectCounters = rejectCounters;
tsFileParserAdmissionRejectCounters.set(Collections.unmodifiableMap(rejectCounters));
tsFileParserAdmissionYieldCounter =
metricService.getOrCreateCounter(
Metric.PIPE_TSFILE_PARSER_ADMISSION_YIELD.toString(), MetricLevel.IMPORTANT);
Expand Down Expand Up @@ -210,7 +212,7 @@ public void unbindFrom(final AbstractMetricService metricService) {
metricService.remove(MetricType.TIMER, Metric.PIPE_TSFILE_PARSER_ADMISSION_WAIT.toString());
metricService.remove(MetricType.AUTO_GAUGE, Metric.PIPE_TSFILE_PARSER_IN_FLIGHT.toString());
metricService.remove(MetricType.AUTO_GAUGE, Metric.PIPE_TSFILE_PARSER_WAITING.toString());
tsFileParserAdmissionRejectCounters = Collections.emptyMap();
tsFileParserAdmissionRejectCounters.set(Collections.emptyMap());
tsFileParserAdmissionRejectCounter = DoNothingMetricManager.DO_NOTHING_COUNTER;
tsFileParserAdmissionYieldCounter = DoNothingMetricManager.DO_NOTHING_COUNTER;
tsFileParserAdmissionWaitTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
Expand All @@ -223,6 +225,7 @@ public void recordDiskIO(final long bytes) {
public void recordTsFileParserAdmissionReject(final TsFileParserAdmissionRejectReason reason) {
tsFileParserAdmissionRejectCounter.inc();
tsFileParserAdmissionRejectCounters
.get()
.getOrDefault(reason, DoNothingMetricManager.DO_NOTHING_COUNTER)
.inc();
}
Expand Down
Loading