This is an automated email from the ASF dual-hosted git repository. JackieTien97 pushed a commit to branch ty/atmos-test in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ae410a68ed22d987a157e1c2a2f603b08854cb04 Author: JackieTien97 <[email protected]> AuthorDate: Sun Oct 11 08:04:02 2026 +0800 Print open reader io --- .../iotdb/db/service/DataNodeShutdownHook.java | 2 ++ .../dataregion/read/control/FileReaderManager.java | 23 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java index 828c4b811ac..3493cc50d61 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeShutdownHook.java @@ -45,6 +45,7 @@ import org.apache.iotdb.db.protocol.client.ConfigNodeClient; import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager; import org.apache.iotdb.db.protocol.client.ConfigNodeInfo; import org.apache.iotdb.db.storageengine.StorageEngine; +import org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager; import org.apache.iotdb.db.storageengine.dataregion.wal.WALManager; import org.apache.iotdb.db.utils.MemUtils; import org.apache.iotdb.rpc.TSStatusCode; @@ -97,6 +98,7 @@ public class DataNodeShutdownHook extends Thread { @Override public void run() { logger.info(DataNodeMiscMessages.DATANODE_EXITING); + FileReaderManager.getInstance().printReaderCost(); AuditLogFields fields = new AuditLogFields( -1, diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java index a0b9d0f169f..d386fd953e4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.LongConsumer; /** @@ -103,6 +104,12 @@ public class FileReaderManager { */ private int pins; + private final AtomicLong openReaderCost = new AtomicLong(0); + private final AtomicLong openReaderCount = new AtomicLong(0); + + private final AtomicLong closeReaderCost = new AtomicLong(0); + private final AtomicLong closeReaderCount = new AtomicLong(0); + private FileReaderManager() {} public static FileReaderManager getInstance() { @@ -357,12 +364,15 @@ public class FileReaderManager { synchronized (entry) { Slot slot = entry.slot(isClosed); if (slot.reader == null) { + long startTime = System.nanoTime(); slot.reader = isClosed ? new TsFileSequenceReader( path, recorder, EncryptDBUtils.getFirstEncryptParamFromTSFilePath(path)) : new UnClosedTsFileReader( path, EncryptDBUtils.getFirstEncryptParamFromTSFilePath(path), recorder); + openReaderCount.incrementAndGet(); + openReaderCost.addAndGet(System.nanoTime() - startTime); int count = slot.count.incrementAndGet(); if (count >= MAX_CACHED_FILE_SIZE && count % PRINT_INTERVAL == 0) { logger.warn(StorageEngineMessages.QUERY_OPENED_FILES, count); @@ -452,6 +462,7 @@ public class FileReaderManager { } } // New references may now register, but their get() waits for this entry's close to finish. + long startTime = System.nanoTime(); try { closeSlot( slot, @@ -462,6 +473,9 @@ public class FileReaderManager { .LOG_READER_FOR_UNCLOSED_TSFILE_ARG_IS_CLOSED_BECAUSE_ITS_REFERENCE_COUNT_REACHED_ZERO_088BDEF8); } catch (IOException e) { // Slot.close already logged the error and discarded the unusable handle. + } finally { + closeReaderCount.incrementAndGet(); + closeReaderCost.addAndGet(System.nanoTime() - startTime); } } } finally { @@ -595,6 +609,15 @@ public class FileReaderManager { return result; } + public void printReaderCost() { + logger.info( + "openReaderCount: {}, openReaderCost: {}, closeReaderCount: {}, closeReaderCost: {}", + openReaderCount.get(), + openReaderCost.get(), + closeReaderCount.get(), + closeReaderCost.get()); + } + @TestOnly public void setReaderForTest(TsFileID key, boolean isClosed, TsFileSequenceReader reader) throws IOException {
