You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by sz...@apache.org on 2026/10/09 17:53:52 UTC
(ozone) branch master updated: HDDS-16730. [hsync] FinalizeBlock does not persist the last chunk merge (#11414)
This is an automated email from the ASF dual-hosted git repository.
szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 84f5594a6a2 HDDS-16730. [hsync] FinalizeBlock does not persist the last chunk merge (#11414)
84f5594a6a2 is described below
commit 84f5594a6a2dd378d6adef2f4576080978c969da
Author: Peter Lee <pe...@gmail.com>
AuthorDate: Sat Oct 10 01:53:46 2026 +0800
HDDS-16730. [hsync] FinalizeBlock does not persist the last chunk merge (#11414)
---
.../container/keyvalue/impl/BlockManagerImpl.java | 3 +--
.../keyvalue/impl/TestBlockManagerImpl.java | 29 ++++++++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java
index 6e69ed0480f..d10ad6f2f0d 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java
@@ -336,9 +336,8 @@ public void finalizeBlock(Container container, BlockID blockId)
.initBatchOperation()) {
db.getStore().getFinalizeBlocksTable().putWithBatch(batch,
kvContainer.getContainerData().getBlockKey(localID), localID);
- db.getStore().getBatchHandler().commitBatchOperation(batch);
-
mergeLastChunkForBlockFinalization(blockId, db, kvContainer, batch, localID);
+ db.getStore().getBatchHandler().commitBatchOperation(batch);
}
}
}
diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java
index eb58ac3ce84..bd56751486f 100644
--- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java
+++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java
@@ -23,6 +23,7 @@
import static org.apache.hadoop.ozone.container.keyvalue.impl.BlockManagerImpl.FULL_CHUNK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyLong;
@@ -468,4 +469,32 @@ public void testFlush3(ContainerTestVersionInfo versionInfo)
assertEquals(chunkLimit * i, chunkInfos.get(i).getOffset());
}
}
+
+ @ContainerTestVersionInfo.ContainerTest
+ public void testFinalizeBlockMergesLastChunk(ContainerTestVersionInfo versionInfo) throws Exception {
+ initTest(versionInfo);
+ Assumptions.assumeFalse(isSameSchemaVersion(schemaVersion, OzoneConsts.SCHEMA_V1));
+ // simulates writing a full chunk + 1024 bytes, hsync, write another 1024 bytes, hsync, then finalize
+ long containerID = 1;
+ long blockNo = 2;
+ long chunkLimit = 4 * 1024 * 1024;
+ blockData1 = createBlockDataWithOneFullChunk(containerID, blockNo, 2, chunkLimit, 1024, 1);
+ blockManager.putBlock(keyValueContainer, blockData1, false);
+ BlockData blockData2 = createBlockData(containerID, blockNo, 2, chunkLimit, 2048, 2);
+ blockManager.putBlock(keyValueContainer, blockData2, false);
+
+ blockManager.finalizeBlock(keyValueContainer, new BlockID(containerID, blockNo));
+
+ // the last chunk should be moved from the last chunk info table to the block data table
+ KeyValueContainerData containerData = keyValueContainer.getContainerData();
+ String blockKey = containerData.getBlockKey(blockNo);
+ try (DBHandle db = BlockUtils.getDB(containerData, config)) {
+ assertEquals(blockNo, db.getStore().getFinalizeBlocksTable().get(blockKey));
+ assertNull(db.getStore().getLastChunkInfoTable().get(blockKey));
+ BlockData persisted = db.getStore().getBlockDataTable().get(blockKey);
+ assertEquals(chunkLimit + 2048, persisted.getSize());
+ assertEquals(2, persisted.getChunks().size());
+ assertEquals(2, persisted.getBlockCommitSequenceId());
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org