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 {

Reply via email to