Skip to content

Commit f7992dd

Browse files
authored
Pipe: Fixed the insert node EMA logic for degrading (#15741)
1 parent 5d5e047 commit f7992dd

4 files changed

Lines changed: 31 additions & 60 deletions

File tree

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/metric/overview/PipeDataNodeRemainingEventAndTimeOperator.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ class PipeDataNodeRemainingEventAndTimeOperator extends PipeRemainingOperator {
5959
private Timer insertNodeTransferTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
6060
private Timer tsfileTransferTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
6161

62-
private volatile long lastInsertNodeEventCountSmoothingTime = Long.MIN_VALUE;
63-
private final Meter insertNodeEventCountMeter =
64-
new Meter(new ExponentialMovingAverages(), Clock.defaultClock());
62+
private final InsertNodeEMA insertNodeEventCountEMA = new InsertNodeEMA();
6563

6664
private double lastDataRegionCommitSmoothingValue = Long.MAX_VALUE;
6765
private double lastSchemaRegionCommitSmoothingValue = Long.MAX_VALUE;
@@ -105,17 +103,8 @@ void decreaseHeartbeatEventCount() {
105103
}
106104

107105
double getRemainingInsertEventSmoothingCount() {
108-
if (PipeConfig.getInstance().getPipeRemainingInsertNodeCountAverage() == PipeRateAverage.NONE) {
109-
return insertNodeEventCount.get();
110-
}
111-
if (System.currentTimeMillis() - lastInsertNodeEventCountSmoothingTime
112-
>= PipeConfig.getInstance().getPipeRemainingInsertEventCountSmoothingIntervalSeconds()) {
113-
insertNodeEventCountMeter.mark(insertNodeEventCount.get());
114-
lastInsertNodeEventCountSmoothingTime = System.currentTimeMillis();
115-
}
116-
return PipeConfig.getInstance()
117-
.getPipeRemainingInsertNodeCountAverage()
118-
.getMeterRate(insertNodeEventCountMeter);
106+
insertNodeEventCountEMA.update(insertNodeEventCount.get());
107+
return insertNodeEventCountEMA.insertNodeEMAValue;
119108
}
120109

121110
long getRemainingEvents() {
@@ -277,4 +266,17 @@ public synchronized void freezeRate(final boolean isStopPipe) {
277266
dataRegionCommitMeter.set(null);
278267
schemaRegionCommitMeter.set(null);
279268
}
269+
270+
private static class InsertNodeEMA {
271+
private double insertNodeEMAValue;
272+
273+
public void update(final double newValue) {
274+
final double alpha = PipeConfig.getInstance().getPipeRemainingInsertNodeCountEMAAlpha();
275+
if (insertNodeEMAValue == 0) {
276+
insertNodeEMAValue = newValue;
277+
} else {
278+
insertNodeEMAValue = alpha * newValue + (1 - alpha) * insertNodeEMAValue;
279+
}
280+
}
281+
}
280282
}

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,6 @@ public class CommonConfig {
285285
private long pipeStorageEngineFlushTimeIntervalMs = Long.MAX_VALUE;
286286
private int pipeMaxAllowedRemainingInsertEventCountPerPipe = 10000;
287287
private int pipeMaxAllowedTotalRemainingInsertEventCount = 50000;
288-
private int pipeRemainingEventCountSmoothingIntervalSeconds = 10;
289288

290289
private int pipeMetaReportMaxLogNumPerRound = 10;
291290
private int pipeMetaReportMaxLogIntervalRounds = 36;
@@ -307,7 +306,7 @@ public class CommonConfig {
307306
private int pipeSnapshotExecutionMaxBatchSize = 1000;
308307
private long pipeRemainingTimeCommitRateAutoSwitchSeconds = 30;
309308
private PipeRateAverage pipeRemainingTimeCommitRateAverageTime = PipeRateAverage.FIVE_MINUTES;
310-
private PipeRateAverage pipeRemainingInsertNodeCountAverage = PipeRateAverage.ONE_MINUTE;
309+
private double pipeRemainingInsertNodeCountEMAAlpha = 0.1;
311310
private double pipeTsFileScanParsingThreshold = 0.05;
312311
private double pipeDynamicMemoryHistoryWeight = 0.5;
313312
private double pipeDynamicMemoryAdjustmentThreshold = 0.05;
@@ -1591,23 +1590,6 @@ public void setPipeMaxAllowedTotalRemainingInsertEventCount(
15911590
pipeMaxAllowedTotalRemainingInsertEventCount);
15921591
}
15931592

1594-
public int getPipeRemainingInsertEventCountSmoothingIntervalSeconds() {
1595-
return pipeRemainingEventCountSmoothingIntervalSeconds;
1596-
}
1597-
1598-
public void setPipeRemainingInsertEventCountSmoothingIntervalSeconds(
1599-
int pipeRemainingEventCountSmoothingIntervalSeconds) {
1600-
if (this.pipeRemainingEventCountSmoothingIntervalSeconds
1601-
== pipeRemainingEventCountSmoothingIntervalSeconds) {
1602-
return;
1603-
}
1604-
this.pipeRemainingEventCountSmoothingIntervalSeconds =
1605-
pipeRemainingEventCountSmoothingIntervalSeconds;
1606-
logger.info(
1607-
"pipeRemainingEventCountSmoothingIntervalSeconds is set to {}",
1608-
pipeRemainingEventCountSmoothingIntervalSeconds);
1609-
}
1610-
16111593
public void setPipeStuckRestartIntervalSeconds(long pipeStuckRestartIntervalSeconds) {
16121594
if (this.pipeStuckRestartIntervalSeconds == pipeStuckRestartIntervalSeconds) {
16131595
return;
@@ -1923,19 +1905,19 @@ public void setPipeRemainingTimeCommitRateAverageTime(
19231905
pipeRemainingTimeCommitRateAverageTime);
19241906
}
19251907

1926-
public PipeRateAverage getPipeRemainingInsertNodeCountAverage() {
1927-
return pipeRemainingInsertNodeCountAverage;
1908+
public double getPipeRemainingInsertNodeCountEMAAlpha() {
1909+
return pipeRemainingInsertNodeCountEMAAlpha;
19281910
}
19291911

1930-
public void setPipeRemainingInsertNodeCountAverage(
1931-
PipeRateAverage pipeRemainingInsertNodeCountAverage) {
1912+
public void setPipeRemainingInsertNodeCountEMAAlpha(
1913+
final double pipeRemainingInsertNodeCountEMAAlpha) {
19321914
if (Objects.equals(
1933-
this.pipeRemainingInsertNodeCountAverage, pipeRemainingInsertNodeCountAverage)) {
1915+
this.pipeRemainingInsertNodeCountEMAAlpha, pipeRemainingInsertNodeCountEMAAlpha)) {
19341916
return;
19351917
}
1936-
this.pipeRemainingInsertNodeCountAverage = pipeRemainingInsertNodeCountAverage;
1918+
this.pipeRemainingInsertNodeCountEMAAlpha = pipeRemainingInsertNodeCountEMAAlpha;
19371919
logger.info(
1938-
"pipeRemainingInsertEventCountAverage is set to {}", pipeRemainingInsertNodeCountAverage);
1920+
"pipeRemainingInsertEventCountAverage is set to {}", pipeRemainingInsertNodeCountEMAAlpha);
19391921
}
19401922

19411923
public double getPipeTsFileScanParsingThreshold() {

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/config/PipeConfig.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,8 @@ public PipeRateAverage getPipeRemainingTimeCommitRateAverageTime() {
251251
return COMMON_CONFIG.getPipeRemainingTimeCommitRateAverageTime();
252252
}
253253

254-
public PipeRateAverage getPipeRemainingInsertNodeCountAverage() {
255-
return COMMON_CONFIG.getPipeRemainingInsertNodeCountAverage();
254+
public double getPipeRemainingInsertNodeCountEMAAlpha() {
255+
return COMMON_CONFIG.getPipeRemainingInsertNodeCountEMAAlpha();
256256
}
257257

258258
public double getPipeTsFileScanParsingThreshold() {
@@ -383,10 +383,6 @@ public int getPipeMaxAllowedTotalRemainingInsertEventCount() {
383383
return COMMON_CONFIG.getPipeMaxAllowedTotalRemainingInsertEventCount();
384384
}
385385

386-
public int getPipeRemainingInsertEventCountSmoothingIntervalSeconds() {
387-
return COMMON_CONFIG.getPipeRemainingInsertEventCountSmoothingIntervalSeconds();
388-
}
389-
390386
/////////////////////////////// Logger ///////////////////////////////
391387

392388
public int getPipeMetaReportMaxLogNumPerRound() {
@@ -551,7 +547,7 @@ public void printAllConfigs() {
551547
LOGGER.info(
552548
"PipeRemainingTimeCommitRateAverageTime: {}", getPipeRemainingTimeCommitRateAverageTime());
553549
LOGGER.info(
554-
"PipePipeRemainingInsertEventCountAverage: {}", getPipeRemainingInsertNodeCountAverage());
550+
"PipePipeRemainingInsertEventCountAverage: {}", getPipeRemainingInsertNodeCountEMAAlpha());
555551
LOGGER.info("PipeTsFileScanParsingThreshold(): {}", getPipeTsFileScanParsingThreshold());
556552
LOGGER.info("PipeTransferTsFileSync: {}", isTransferTsFileSync());
557553

@@ -644,9 +640,6 @@ public void printAllConfigs() {
644640
LOGGER.info(
645641
"PipeMaxAllowedTotalRemainingInsertEventCount: {}",
646642
getPipeMaxAllowedTotalRemainingInsertEventCount());
647-
LOGGER.info(
648-
"PipeRemainingInsertEventCountSmoothingIntervalSeconds: {}",
649-
getPipeRemainingInsertEventCountSmoothingIntervalSeconds());
650643

651644
LOGGER.info("PipeMetaReportMaxLogNumPerRound: {}", getPipeMetaReportMaxLogNumPerRound());
652645
LOGGER.info("PipeMetaReportMaxLogIntervalRounds: {}", getPipeMetaReportMaxLogIntervalRounds());

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/config/PipeDescriptor.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,12 @@ public static void loadPipeStaticConfig(CommonConfig config, TrimProperties prop
208208
"pipe_remaining_time_commit_rate_average_time",
209209
String.valueOf(config.getPipeRemainingTimeCommitRateAverageTime()))
210210
.trim()));
211-
config.setPipeRemainingInsertNodeCountAverage(
212-
PipeRateAverage.valueOf(
211+
config.setPipeRemainingInsertNodeCountEMAAlpha(
212+
Double.parseDouble(
213213
properties
214214
.getProperty(
215-
"pipe_remaining_insert_node_count_average",
216-
String.valueOf(config.getPipeRemainingInsertNodeCountAverage()))
215+
"pipe_remaining_insert_node_count_ema_alpha",
216+
String.valueOf(config.getPipeRemainingInsertNodeCountEMAAlpha()))
217217
.trim()));
218218
}
219219

@@ -476,12 +476,6 @@ public static void loadPipeInternalConfig(CommonConfig config, TrimProperties pr
476476
properties.getProperty(
477477
"pipe_max_allowed_total_remaining_insert_event_count",
478478
String.valueOf(config.getPipeMaxAllowedTotalRemainingInsertEventCount()))));
479-
config.setPipeRemainingInsertEventCountSmoothingIntervalSeconds(
480-
Integer.parseInt(
481-
properties.getProperty(
482-
"pipe_remaining_insert_event_count_smoothing_interval_seconds",
483-
String.valueOf(
484-
config.getPipeRemainingInsertEventCountSmoothingIntervalSeconds()))));
485479
config.setPipeStuckRestartMinIntervalMs(
486480
Long.parseLong(
487481
properties.getProperty(

0 commit comments

Comments
 (0)