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 8ee08e09156e3e8f4093ac6db113560ed10b4a94..84517ae3b2369d2f1bfcb693d792d1de03961f3e 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();