This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new 1a21db1a15b [To rel/1.2] fix wal npe when memTable has flushed.
(#10900)
1a21db1a15b is described below
commit 1a21db1a15ba654fa73e03adae7ae230ae93e71f
Author: Zhijia Cao <[email protected]>
AuthorDate: Thu Aug 31 15:24:43 2023 +0800
[To rel/1.2] fix wal npe when memTable has flushed. (#10900)
---
.../iotdb/db/storageengine/dataregion/wal/node/WALNode.java | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
index 8ee08e09156..84517ae3b23 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
@@ -451,7 +451,9 @@ public class WALNode implements IWALNode {
return false;
}
IMemTable oldestMemTable = oldestMemTableInfo.getMemTable();
-
+ if (oldestMemTable == null) {
+ return false;
+ }
// get memTable's virtual database processor
File oldestTsFile =
FSFactoryProducer.getFSFactory().getFile(oldestMemTableInfo.getTsFilePath());
@@ -477,8 +479,6 @@ public class WALNode implements IWALNode {
WRITING_METRICS.recordMemTableRamWhenCauseFlush(identifier,
oldestMemTableTVListsRamCost);
} else {
snapshotMemTable(dataRegion, oldestTsFile, oldestMemTableInfo);
- WRITING_METRICS.recordMemTableRamWhenCauseSnapshot(
- identifier, oldestMemTableTVListsRamCost);
}
return true;
}
@@ -527,8 +527,8 @@ public class WALNode implements IWALNode {
"CheckpointManager$DeleteOutdatedFileTask.snapshotOrFlushOldestMemTable");
try {
// make sure snapshot is made before memTable flush operation
- synchronized (memTable) {
- if (memTable.getFlushStatus() != FlushStatus.WORKING) {
+ synchronized (memTableInfo) {
+ if (memTable == null || memTable.getFlushStatus() !=
FlushStatus.WORKING) {
return;
}
@@ -555,6 +555,7 @@ public class WALNode implements IWALNode {
// it's low-risk to block writes awhile because this memTable
accumulates slowly
if (flushListener.waitForResult() == Status.FAILURE) {
logger.error("Fail to snapshot memTable of {}", tsFile,
flushListener.getCause());
+ return;
}
logger.info(
"WAL node-{} snapshots memTable-{} to wal files because
Effective information ratio {} is below wal min effective info ratio {},
memTable size is {}.",
@@ -563,6 +564,8 @@ public class WALNode implements IWALNode {
effectiveInfoRatio,
config.getWalMinEffectiveInfoRatio(),
memTable.getTVListsRamCost());
+ WRITING_METRICS.recordMemTableRamWhenCauseSnapshot(
+ identifier, memTable.getTVListsRamCost());
}
} finally {
dataRegion.writeUnlock();