This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch 133-active-load-read-only in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit fedaa30a08003517f5a62fd1ec7fa1d6b96cc1c3 Author: YC27 <[email protected]> AuthorDate: Tue Oct 8 12:08:48 2024 +0800 Active Load: Fix load tsfile failed when system is read only (#13646) Co-authored-by: Steve Yurong Su <[email protected]> (cherry picked from commit 2ec48d28a6c057a209febad829941c3f324e97c2) --- .../storageengine/load/active/ActiveLoadDirScanner.java | 13 +++++++++++++ .../storageengine/load/active/ActiveLoadTsFileLoader.java | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadDirScanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadDirScanner.java index a9d30b8a7f7..f6c079cb060 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadDirScanner.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadDirScanner.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.storageengine.load.active; import org.apache.iotdb.commons.concurrent.ThreadName; +import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.db.storageengine.load.metrics.ActiveLoadingFilesNumberMetricsSet; import org.apache.iotdb.db.storageengine.load.metrics.ActiveLoadingFilesSizeMetricsSet; @@ -39,6 +40,7 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; public class ActiveLoadDirScanner extends ActiveLoadScheduledExecutorService { @@ -53,6 +55,8 @@ public class ActiveLoadDirScanner extends ActiveLoadScheduledExecutorService { private final Set<String> noPermissionDirs = new CopyOnWriteArraySet<>(); + private final AtomicBoolean isReadOnlyLogPrinted = new AtomicBoolean(false); + private final ActiveLoadTsFileLoader activeLoadTsFileLoader; public ActiveLoadDirScanner(final ActiveLoadTsFileLoader activeLoadTsFileLoader) { @@ -72,6 +76,15 @@ public class ActiveLoadDirScanner extends ActiveLoadScheduledExecutorService { } private void scan() throws IOException { + if (CommonDescriptor.getInstance().getConfig().isReadOnly()) { + if (!isReadOnlyLogPrinted.get()) { + LOGGER.warn("Current system is read-only mode. Skip active load dir scanning."); + isReadOnlyLogPrinted.set(true); + } + return; + } + isReadOnlyLogPrinted.set(false); + hotReloadActiveLoadDirs(); for (final String listeningDir : listeningDirs) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java index e64075ade2a..2f30da15e55 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java @@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.concurrent.IoTThreadFactory; import org.apache.iotdb.commons.concurrent.ThreadName; import org.apache.iotdb.commons.concurrent.threadpool.WrappedThreadPoolExecutor; +import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.db.auth.AuthorityChecker; import org.apache.iotdb.db.conf.IoTDBConfig; import org.apache.iotdb.db.conf.IoTDBDescriptor; @@ -77,6 +78,10 @@ public class ActiveLoadTsFileLoader { } public void tryTriggerTsFileLoad(String absolutePath, boolean isGeneratedByPipe) { + if (CommonDescriptor.getInstance().getConfig().isReadOnly()) { + return; + } + if (pendingQueue.enqueue(absolutePath, isGeneratedByPipe)) { initFailDirIfNecessary(); adjustExecutorIfNecessary(); @@ -211,6 +216,11 @@ public class ActiveLoadTsFileLoader { "Rejecting auto load tsfile {} (isGeneratedByPipe = {}) due to memory constraints, will retry later.", filePair.getLeft(), filePair.getRight()); + } else if (status.getMessage() != null && status.getMessage().contains("read only")) { + LOGGER.info( + "Rejecting auto load tsfile {} (isGeneratedByPipe = {}) due to the system is read only, will retry later.", + filePair.getLeft(), + filePair.getRight()); } else { LOGGER.warn( "Failed to auto load tsfile {} (isGeneratedByPipe = {}), status: {}. File will be moved to fail directory.", @@ -235,6 +245,11 @@ public class ActiveLoadTsFileLoader { "Rejecting auto load tsfile {} (isGeneratedByPipe = {}) due to memory constraints, will retry later.", filePair.getLeft(), filePair.getRight()); + } else if (e.getMessage() != null && e.getMessage().contains("read only")) { + LOGGER.info( + "Rejecting auto load tsfile {} (isGeneratedByPipe = {}) due to the system is read only, will retry later.", + filePair.getLeft(), + filePair.getRight()); } else { LOGGER.warn( "Failed to auto load tsfile {} (isGeneratedByPipe = {}) because of an unexpected exception. File will be moved to fail directory.",
