You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ea...@apache.org on 2020/01/13 07:35:32 UTC

[incubator-iotdb] 02/02: fix bugs

This is an automated email from the ASF dual-hosted git repository.

east pushed a commit to branch nvmlogging
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 1fa591da92691ed0093bc10b4f6d89eb703bd47a
Author: mdf369 <95...@qq.com>
AuthorDate: Mon Jan 13 15:35:09 2020 +0800

    fix bugs
---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  2 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |  2 ++
 .../iotdb/db/nvm/rescon/NVMPrimitiveArrayPool.java |  2 +-
 .../writelog/recover/TsFileRecoverPerformer.java   | 34 +++++++++++++---------
 4 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 250d39e..e6fe35f 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -591,7 +591,7 @@ public class IoTDBConfig {
   }
 
   public boolean isEnableWal() {
-    return enableWal;
+    return !enableNVM && enableWal;
   }
 
   public void setEnableWal(boolean enableWal) {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
index 8873dc4..cb5615c 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/flush/MemTableFlushTask.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.engine.flush.pool.FlushSubTaskPoolManager;
 import org.apache.iotdb.db.engine.memtable.IMemTable;
 import org.apache.iotdb.db.engine.memtable.IWritableMemChunk;
 import org.apache.iotdb.db.exception.runtime.FlushRunTimeException;
+import org.apache.iotdb.db.nvm.PerfMonitor;
 import org.apache.iotdb.db.utils.datastructure.AbstractTVList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.Pair;
@@ -93,6 +94,7 @@ public class MemTableFlushTask {
     logger.debug(
         "Storage group {} memtable {}, flushing into disk: data sort time cost {} ms.",
         storageGroup, memTable.getVersion(), sortTime);
+    PerfMonitor.add("sort", sortTime);
 
     ioTaskFuture.get();
 
diff --git a/server/src/main/java/org/apache/iotdb/db/nvm/rescon/NVMPrimitiveArrayPool.java b/server/src/main/java/org/apache/iotdb/db/nvm/rescon/NVMPrimitiveArrayPool.java
index aca3c81..e992781 100644
--- a/server/src/main/java/org/apache/iotdb/db/nvm/rescon/NVMPrimitiveArrayPool.java
+++ b/server/src/main/java/org/apache/iotdb/db/nvm/rescon/NVMPrimitiveArrayPool.java
@@ -44,7 +44,7 @@ public class NVMPrimitiveArrayPool {
       nvmSpace = NVMSpaceManager.getInstance().allocateDataSpace(size * ARRAY_SIZE, dataType, isTime);
     }
 
-    PerfMonitor.add("NVM.getDataList", System.currentTimeMillis() - time);
+    PerfMonitor.add("NVM.getDataList" + (isTime ? "Time" : "Value"), System.currentTimeMillis() - time);
     return nvmSpace;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
index 70d6a1a..6e56541 100644
--- a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
@@ -154,8 +154,10 @@ public class TsFileRecoverPerformer {
     } else {
       time = System.currentTimeMillis();
       redoLogs(restorableTsFileIOWriter);
+      PerfMonitor.add("TsFileRecoverPerformer.redoLogs", System.currentTimeMillis() - time);
 
       // clean logs
+      time = System.currentTimeMillis();
       try {
         MultiFileLogNodeManager.getInstance()
             .deleteNode(
@@ -218,36 +220,42 @@ public class TsFileRecoverPerformer {
     this.logReplayer = new LogReplayer(logNodePrefix, insertFilePath, tsFileResource.getModFile(),
         versionController,
         tsFileResource, schema, recoverMemTable, acceptUnseq);
+
+    long time = System.currentTimeMillis();
     logReplayer.replayLogs();
-    try {
-      if (!recoverMemTable.isEmpty()) {
-        // flush logs
+    PerfMonitor.add("LogReplayer.replayLogs", System.currentTimeMillis() - time);
 
-        MemTableFlushTask tableFlushTask = new MemTableFlushTask(recoverMemTable, schema,
-            restorableTsFileIOWriter, tsFileResource.getFile().getParentFile().getName());
-        tableFlushTask.syncFlushMemTable();
-      }
-      // close file
-      restorableTsFileIOWriter.endFile(schema);
-      tsFileResource.serialize();
-    } catch (IOException | InterruptedException | ExecutionException e) {
-      throw new StorageGroupProcessorException(e);
-    }
+    flushRecoverdMemtable(recoverMemTable, restorableTsFileIOWriter);
   }
 
   private void reloadNVMData(RestorableTsFileIOWriter restorableTsFileIOWriter)
       throws StorageGroupProcessorException {
     NVMPrimitiveMemTable recoverMemTable = new NVMPrimitiveMemTable(storageGroupId);
+
+    long time = System.currentTimeMillis();
     NVMMemtableRecoverPerformer.getInstance().reconstructMemtable(recoverMemTable, tsFileResource);
+    PerfMonitor.add("NVMMemtableRecoverPerformer.reconstructMemtable", System.currentTimeMillis() - time);
+
+    flushRecoverdMemtable(recoverMemTable, restorableTsFileIOWriter);
+  }
+
+  private void flushRecoverdMemtable(IMemTable recoverMemTable, RestorableTsFileIOWriter restorableTsFileIOWriter)
+      throws StorageGroupProcessorException {
+    long time;
     try {
       if (!recoverMemTable.isEmpty()) {
         MemTableFlushTask tableFlushTask = new MemTableFlushTask(recoverMemTable, schema,
             restorableTsFileIOWriter, tsFileResource.getFile().getParentFile().getName());
+
+        time = System.currentTimeMillis();
         tableFlushTask.syncFlushMemTable();
+        PerfMonitor.add("MemTableFlushTask.syncFlushMemTable", System.currentTimeMillis() - time);
       }
       // close file
+      time = System.currentTimeMillis();
       restorableTsFileIOWriter.endFile(schema);
       tsFileResource.serialize();
+      PerfMonitor.add("TsFileRecoverPerformer.closeFile", System.currentTimeMillis() - time);
     } catch (IOException | InterruptedException | ExecutionException e) {
       throw new StorageGroupProcessorException(e);
     }