This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch fix_negative_compression_ratio_after_restart in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b5492ba229309cdc066ad126b03fc4576d27662b Author: HTHou <[email protected]> AuthorDate: Mon Jul 8 21:01:05 2024 +0800 Fix negative compression ratios after restart --- .../recover/file/UnsealedTsFileRecoverPerformer.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java index 6bb9ef59898..78ce9550144 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.pipe.agent.PipeDataNodeAgent; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode; +import org.apache.iotdb.db.storageengine.dataregion.flush.CompressionRatio; import org.apache.iotdb.db.storageengine.dataregion.flush.MemTableFlushTask; import org.apache.iotdb.db.storageengine.dataregion.memtable.IMemTable; import org.apache.iotdb.db.storageengine.dataregion.memtable.IWritableMemChunk; @@ -259,6 +260,24 @@ public class UnsealedTsFileRecoverPerformer extends AbstractTsFileRecoverPerform // set recover progress index for pipe PipeDataNodeAgent.runtime().assignProgressIndexForTsFileRecovery(tsFileResource); + try { + long memTableSize = recoveryMemTable.memSize(); + double compressionRatio = ((double) memTableSize) / writer.getPos(); + logger.info( + "The compression ratio of tsfile {} is {}, totalMemTableSize: {}, the file size: {}", + writer.getFile().getAbsolutePath(), + String.format("%.2f", compressionRatio), + memTableSize, + writer.getPos()); + CompressionRatio.getInstance().updateRatio(memTableSize, writer.getPos()); + } catch (IOException e) { + logger.error( + "{}: {} update compression ratio failed", + databaseName, + tsFileResource.getTsFile().getName(), + e); + } + // if we put following codes in the 'if' clause above, this file can be continued writing // into it // currently, we close this file anyway
