This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new 9f31e15a3d5 Pipe: Increase the injection frequency of HeartBeatEvent
to reduce the delay in log transferring (#10970) (#10978)
9f31e15a3d5 is described below
commit 9f31e15a3d59f80345c0ad9cada255e5ee5da2da
Author: Steve Yurong Su <[email protected]>
AuthorDate: Mon Aug 28 23:24:51 2023 +0800
Pipe: Increase the injection frequency of HeartBeatEvent to reduce the
delay in log transferring (#10970) (#10978)
(cherry picked from commit daebc419e0ecab1b8d60cfcc82d688a843cd6b75)
---
iotdb-connector/flink-sql-iotdb-connector/pom.xml | 2 +-
.../pipe/agent/runtime/PipeCronEventInjector.java | 70 ++++++++++++++++++++++
.../db/pipe/agent/runtime/PipeRuntimeAgent.java | 7 ++-
.../iotdb/db/pipe/agent/task/PipeTaskAgent.java | 2 +-
.../config/constant/PipeConnectorConstant.java | 2 +-
.../event/common/heartbeat/PipeHeartbeatEvent.java | 12 ++--
.../event/realtime/PipeRealtimeEventFactory.java | 6 +-
.../listener/PipeInsertionDataNodeListener.java | 6 +-
.../iotdb/commons/concurrent/ThreadName.java | 2 +
9 files changed, 97 insertions(+), 12 deletions(-)
diff --git a/iotdb-connector/flink-sql-iotdb-connector/pom.xml
b/iotdb-connector/flink-sql-iotdb-connector/pom.xml
index 85657b35701..dd4c49ee66d 100644
--- a/iotdb-connector/flink-sql-iotdb-connector/pom.xml
+++ b/iotdb-connector/flink-sql-iotdb-connector/pom.xml
@@ -29,7 +29,7 @@
</parent>
<artifactId>flink-sql-iotdb-connector</artifactId>
<version>1.2.0-SNAPSHOT</version>
- <name>IoTDB: Connector: Apache Flink SQL Connector</name>
+ <name>IoTDB: Connector: Apache Flink SQL</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flink.version>1.17.0</flink.version>
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeCronEventInjector.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeCronEventInjector.java
new file mode 100644
index 00000000000..8ec9798e187
--- /dev/null
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeCronEventInjector.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.pipe.agent.runtime;
+
+import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
+import org.apache.iotdb.commons.concurrent.ThreadName;
+import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
+import
org.apache.iotdb.db.pipe.extractor.realtime.listener.PipeInsertionDataNodeListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+public class PipeCronEventInjector {
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(PipeCronEventInjector.class);
+
+ private static final int CRON_EVENT_INJECTOR_INTERVAL_SECONDS = 1;
+
+ private static final ScheduledExecutorService CRON_EVENT_INJECTOR_EXECUTOR =
+ IoTDBThreadPoolFactory.newSingleThreadScheduledExecutor(
+ ThreadName.PIPE_RUNTIME_CRON_EVENT_INJECTOR.getName());
+
+ private Future<?> injectorFuture;
+
+ public synchronized void start() {
+ if (injectorFuture == null) {
+ injectorFuture =
+ ScheduledExecutorUtil.safelyScheduleWithFixedDelay(
+ CRON_EVENT_INJECTOR_EXECUTOR,
+ this::inject,
+ CRON_EVENT_INJECTOR_INTERVAL_SECONDS,
+ CRON_EVENT_INJECTOR_INTERVAL_SECONDS,
+ TimeUnit.SECONDS);
+ LOGGER.info("Pipe cron event injector is started successfully.");
+ }
+ }
+
+ private synchronized void inject() {
+ PipeInsertionDataNodeListener.getInstance().listenToHeartbeat(false);
+ }
+
+ public synchronized void stop() {
+ if (injectorFuture != null) {
+ injectorFuture.cancel(false);
+ injectorFuture = null;
+ LOGGER.info("Pipe cron event injector is stopped successfully.");
+ }
+ }
+}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeRuntimeAgent.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeRuntimeAgent.java
index 0f91b346611..dacd51d4684 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeRuntimeAgent.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/runtime/PipeRuntimeAgent.java
@@ -43,7 +43,9 @@ public class PipeRuntimeAgent implements IService {
private static final Logger LOGGER =
LoggerFactory.getLogger(PipeRuntimeAgent.class);
private static final int DATA_NODE_ID =
IoTDBDescriptor.getInstance().getConfig().getDataNodeId();
- private static final AtomicBoolean isShutdown = new AtomicBoolean(false);
+ private final AtomicBoolean isShutdown = new AtomicBoolean(false);
+
+ private final PipeCronEventInjector pipeCronEventInjector = new
PipeCronEventInjector();
private final SimpleConsensusProgressIndexAssigner
simpleConsensusProgressIndexAssigner =
new SimpleConsensusProgressIndexAssigner();
@@ -66,6 +68,7 @@ public class PipeRuntimeAgent implements IService {
public synchronized void start() throws StartupException {
PipeConfig.getInstance().printAllConfigs();
PipeAgentLauncher.launchPipeTaskAgent();
+ pipeCronEventInjector.start();
isShutdown.set(false);
}
@@ -77,6 +80,7 @@ public class PipeRuntimeAgent implements IService {
}
isShutdown.set(true);
+ pipeCronEventInjector.stop();
PipeAgent.task().dropAllPipeTasks();
}
@@ -96,6 +100,7 @@ public class PipeRuntimeAgent implements IService {
}
////////////////////// Recover ProgressIndex Assigner //////////////////////
+
public void assignRecoverProgressIndexForTsFileRecovery(TsFileResource
tsFileResource) {
tsFileResource.recoverProgressIndex(
new RecoverProgressIndex(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/PipeTaskAgent.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/PipeTaskAgent.java
index 660b9d962e4..e54203f0f7c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/PipeTaskAgent.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/PipeTaskAgent.java
@@ -843,6 +843,6 @@ public class PipeTaskAgent {
}
resp.setPipeMetaList(pipeMetaBinaryList);
- PipeInsertionDataNodeListener.getInstance().listenToHeartbeat();
+ PipeInsertionDataNodeListener.getInstance().listenToHeartbeat(true);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
index 3c870a9ba15..2a5b8e0a47a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
@@ -33,7 +33,7 @@ public class PipeConnectorConstant {
public static final boolean CONNECTOR_IOTDB_BATCH_MODE_ENABLED_DEFAULT_VALUE
= true;
public static final String CONNECTOR_IOTDB_BATCH_DELAY_KEY =
"connector.batch.max-delay-seconds";
- public static final int CONNECTOR_IOTDB_BATCH_DELAY_DEFAULT_VALUE = 10;
+ public static final int CONNECTOR_IOTDB_BATCH_DELAY_DEFAULT_VALUE = 1;
public static final String CONNECTOR_IOTDB_BATCH_SIZE_KEY =
"connector.batch.size-bytes";
public static final long CONNECTOR_IOTDB_BATCH_SIZE_DEFAULT_VALUE = 16 * MB;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/heartbeat/PipeHeartbeatEvent.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/heartbeat/PipeHeartbeatEvent.java
index f194182b832..71d65a6b7cd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/heartbeat/PipeHeartbeatEvent.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/heartbeat/PipeHeartbeatEvent.java
@@ -40,15 +40,19 @@ public class PipeHeartbeatEvent extends EnrichedEvent {
private long timeProcessed;
private long timeTransferred;
- public PipeHeartbeatEvent(String dataRegionId) {
+ private final boolean shouldPrintMessage;
+
+ public PipeHeartbeatEvent(String dataRegionId, boolean shouldPrintMessage) {
super(null, null);
this.dataRegionId = dataRegionId;
+ this.shouldPrintMessage = shouldPrintMessage;
}
- public PipeHeartbeatEvent(String dataRegionId, long timePublished) {
+ public PipeHeartbeatEvent(String dataRegionId, long timePublished, boolean
shouldPrintMessage) {
super(null, null);
this.dataRegionId = dataRegionId;
this.timePublished = timePublished;
+ this.shouldPrintMessage = shouldPrintMessage;
}
@Override
@@ -60,7 +64,7 @@ public class PipeHeartbeatEvent extends EnrichedEvent {
public boolean internallyDecreaseResourceReferenceCount(String
holderMessage) {
// PipeName == null indicates that the event is the raw event at disruptor,
// not the event copied and passed to the extractor
- if (pipeName != null && LOGGER.isInfoEnabled()) {
+ if (shouldPrintMessage && pipeName != null && LOGGER.isInfoEnabled()) {
LOGGER.info(this.toString());
}
return true;
@@ -74,7 +78,7 @@ public class PipeHeartbeatEvent extends EnrichedEvent {
@Override
public EnrichedEvent shallowCopySelfAndBindPipeTaskMetaForProgressReport(
PipeTaskMeta pipeTaskMeta, String pattern) {
- return new PipeHeartbeatEvent(dataRegionId, timePublished);
+ return new PipeHeartbeatEvent(dataRegionId, timePublished,
shouldPrintMessage);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/realtime/PipeRealtimeEventFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/realtime/PipeRealtimeEventFactory.java
index 72c15279878..3a95f9ccf26 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/realtime/PipeRealtimeEventFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/realtime/PipeRealtimeEventFactory.java
@@ -49,8 +49,10 @@ public class PipeRealtimeEventFactory {
resource);
}
- public static PipeRealtimeEvent createRealtimeEvent(String dataRegionId) {
- return new PipeRealtimeEvent(new PipeHeartbeatEvent(dataRegionId), null,
null, null);
+ public static PipeRealtimeEvent createRealtimeEvent(
+ String dataRegionId, boolean shouldPrintMessage) {
+ return new PipeRealtimeEvent(
+ new PipeHeartbeatEvent(dataRegionId, shouldPrintMessage), null, null,
null);
}
private PipeRealtimeEventFactory() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/realtime/listener/PipeInsertionDataNodeListener.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/realtime/listener/PipeInsertionDataNodeListener.java
index 7446bef72ac..e3c7a62b6d9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/realtime/listener/PipeInsertionDataNodeListener.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/realtime/listener/PipeInsertionDataNodeListener.java
@@ -128,13 +128,15 @@ public class PipeInsertionDataNodeListener {
PipeRealtimeEventFactory.createRealtimeEvent(walEntryHandler,
insertNode, tsFileResource));
}
- public void listenToHeartbeat() {
+ public void listenToHeartbeat(boolean shouldPrintMessage) {
if (listenToInsertNodeExtractorCount.get() == 0 &&
listenToTsFileExtractorCount.get() == 0) {
return;
}
dataRegionId2Assigner.forEach(
- (key, value) ->
value.publishToAssign(PipeRealtimeEventFactory.createRealtimeEvent(key)));
+ (key, value) ->
+ value.publishToAssign(
+ PipeRealtimeEventFactory.createRealtimeEvent(key,
shouldPrintMessage)));
}
/////////////////////////////// singleton ///////////////////////////////
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
index 024d1c4386c..e1cb4a3ff1b 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadName.java
@@ -131,6 +131,7 @@ public enum ThreadName {
PIPE_RUNTIME_META_SYNCER("Pipe-Runtime-Meta-Syncer"),
PIPE_RUNTIME_HEARTBEAT("Pipe-Runtime-Heartbeat"),
PIPE_RUNTIME_PROCEDURE_SUBMITTER("Pipe-Runtime-Procedure-Submitter"),
+ PIPE_RUNTIME_CRON_EVENT_INJECTOR("Pipe-Runtime-Cron-Event-Injector"),
PIPE_ASYNC_CONNECTOR_CLIENT_POOL("Pipe-Async-Connector-Client-Pool"),
PIPE_WAL_RESOURCE_TTL_CHECKER("Pipe-WAL-Resource-TTL-Checker"),
PIPE_RECEIVER_AIR_GAP_AGENT("Pipe-Receiver-Air-Gap-Agent"),
@@ -267,6 +268,7 @@ public enum ThreadName {
PIPE_RUNTIME_META_SYNCER,
PIPE_RUNTIME_HEARTBEAT,
PIPE_RUNTIME_PROCEDURE_SUBMITTER,
+ PIPE_RUNTIME_CRON_EVENT_INJECTOR,
PIPE_ASYNC_CONNECTOR_CLIENT_POOL,
PIPE_WAL_RESOURCE_TTL_CHECKER,
PIPE_RECEIVER_AIR_GAP_AGENT,