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