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:50:44 UTC

[incubator-iotdb] branch feature_async_close_tsfile_stable_625 updated: fix lognode memory release bug

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

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


The following commit(s) were added to refs/heads/feature_async_close_tsfile_stable_625 by this push:
     new d887ed5  fix lognode memory release bug
d887ed5 is described below

commit d887ed5e805f1196fd5918e90a427e85f71fefef
Author: qiaojialin <64...@qq.com>
AuthorDate: Thu Jun 27 14:50:21 2019 +0800

    fix lognode memory release bug
---
 .../db/engine/filenodeV2/FileNodeProcessorV2.java   |  7 +++++--
 .../filenodeV2/UnsealedTsFileProcessorV2.java       | 21 +++++++++++++++------
 2 files changed, 20 insertions(+), 8 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 eeb0795..c4afa4a 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
@@ -586,8 +586,11 @@ public class FileNodeProcessorV2 {
   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 d6c860a..758f01f 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());
@@ -128,7 +126,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;
@@ -258,7 +256,7 @@ public class UnsealedTsFileProcessorV2 {
       if (workMemTable == null) {
         return;
       }
-      logNode.notifyStartFlush();
+      getLogNode().notifyStartFlush();
       flushingMemTables.addLast(workMemTable);
       workMemTable.setVersion(versionController.nextVersion());
       FlushManager.getInstance().registerUnsealedTsFileProcessor(this);
@@ -304,7 +302,7 @@ public class UnsealedTsFileProcessorV2 {
           this::releaseFlushedMemTableCallback);
       flushTask.flushMemTable();
       MemTablePool.getInstance().putBack(memTableToFlush, storageGroupName);
-      logNode.notifyEndFlush();
+      getLogNode().notifyEndFlush();
       LOGGER.info("flush a memtable has finished");
     } else {
       LOGGER.info(
@@ -362,10 +360,21 @@ 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;
   }