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;
}