You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/06/27 06:44:50 UTC

[incubator-iotdb] branch feature_async_close_tsfile updated: fix lognode not delete memory leak bug

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

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


The following commit(s) were added to refs/heads/feature_async_close_tsfile by this push:
     new d160dc7  fix lognode not delete memory leak bug
     new 5390b32  Merge remote-tracking branch 'origin/feature_async_close_tsfile' into feature_async_close_tsfile
d160dc7 is described below

commit d160dc7ab176895628b43684f31460b35467b1e8
Author: qiaojialin <64...@qq.com>
AuthorDate: Thu Jun 27 14:43:53 2019 +0800

    fix lognode not delete memory leak bug
---
 .../db/engine/filenodeV2/FileNodeProcessorV2.java     |  9 ++++++---
 .../engine/filenodeV2/UnsealedTsFileProcessorV2.java  | 19 +++++++++++++------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/FileNodeProcessorV2.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/FileNodeProcessorV2.java
index 8f396bc..7c093b8 100755
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/FileNodeProcessorV2.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/FileNodeProcessorV2.java
@@ -48,6 +48,7 @@ import org.apache.iotdb.db.exception.UnsealedTsFileProcessorException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
 import org.apache.iotdb.db.writelog.recover.TsFileRecoverPerformer;
 import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -609,9 +610,11 @@ public class FileNodeProcessorV2 {
   // TODO please consider concurrency with query and insert method.
   public void closeUnsealedTsFileProcessorCallback(
       UnsealedTsFileProcessorV2 unsealedTsFileProcessor) {
-    // end time with one start time
-    TsFileResourceV2 resource = unsealedTsFileProcessor.getTsFileResource();
-    resource.setClosed(true);
+    try {
+      unsealedTsFileProcessor.close();
+    } catch (IOException e) {
+      LOGGER.error("storage group: {} close unsealedTsFileProcessor failed", storageGroupName, e);
+    }
     if (closingSequenceTsFileProcessor.contains(unsealedTsFileProcessor)) {
       closingSequenceTsFileProcessor.remove(unsealedTsFileProcessor);
     } else {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/UnsealedTsFileProcessorV2.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/UnsealedTsFileProcessorV2.java
index 41bd619..2464821 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/UnsealedTsFileProcessorV2.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenodeV2/UnsealedTsFileProcessorV2.java
@@ -100,8 +100,6 @@ public class UnsealedTsFileProcessorV2 {
     this.tsFileResource = new TsFileResourceV2(tsfile, this);
     this.versionController = versionController;
     this.writer = new NativeRestorableIOWriter(tsfile);
-    this.logNode = MultiFileLogNodeManager.getInstance()
-        .getNode(storageGroupName + "-" + tsfile.getName());
     this.closeUnsealedFileCallback = closeUnsealedFileCallback;
     this.flushUpdateLatestFlushTimeCallback = flushUpdateLatestFlushTimeCallback;
     LOGGER.info("create a new tsfile processor {}", tsfile.getAbsolutePath());
@@ -133,7 +131,7 @@ public class UnsealedTsFileProcessorV2 {
 
     if (IoTDBDescriptor.getInstance().getConfig().isEnableWal()) {
       try {
-        logNode.write(insertPlan);
+        getLogNode().write(insertPlan);
       } catch (IOException e) {
         LOGGER.error("write WAL failed", e);
         return false;
@@ -271,7 +269,7 @@ public class UnsealedTsFileProcessorV2 {
         return;
       }
       if (IoTDBDescriptor.getInstance().getConfig().isEnableWal()) {
-        logNode.notifyStartFlush();
+        getLogNode().notifyStartFlush();
       }
       flushingMemTables.addLast(workMemTable);
       workMemTable.setVersion(versionController.nextVersion());
@@ -323,7 +321,7 @@ public class UnsealedTsFileProcessorV2 {
         LOGGER.info("release a memtable cost: {}", elapse);
       }
       if (IoTDBDescriptor.getInstance().getConfig().isEnableWal()) {
-        logNode.notifyEndFlush();
+        getLogNode().notifyEndFlush();
       }
       LOGGER.info("flush a memtable has finished");
     } else {
@@ -382,10 +380,19 @@ public class UnsealedTsFileProcessorV2 {
     return managedByFlushManager;
   }
 
-  public WriteLogNode getLogNode() {
+  public WriteLogNode getLogNode() throws IOException {
+    if (logNode == null) {
+      logNode = MultiFileLogNodeManager.getInstance()
+          .getNode(storageGroupName + "-" + tsFileResource.getFile().getName());
+    }
     return logNode;
   }
 
+  public void close() throws IOException {
+    tsFileResource.setClosed(true);
+    MultiFileLogNodeManager.getInstance().deleteNode(storageGroupName + "-" + tsFileResource.getFile().getName());
+  }
+
   public void setManagedByFlushManager(boolean managedByFlushManager) {
     this.managedByFlushManager = managedByFlushManager;
   }