You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by di...@apache.org on 2021/02/14 04:49:11 UTC

[ozone] branch master updated: HDDS-4798. Check before updating container's BCSID (#1900)

This is an automated email from the ASF dual-hosted git repository.

dineshc 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 dd5e82d  HDDS-4798. Check before updating container's BCSID (#1900)
dd5e82d is described below

commit dd5e82d94347619ec233143fcde95a32401259ea
Author: Symious <yi...@foxmail.com>
AuthorDate: Sun Feb 14 12:49:00 2021 +0800

    HDDS-4798. Check before updating container's BCSID (#1900)
    
    Co-authored-by: Symious <yi...@gmail.com>
---
 .../container/keyvalue/impl/BlockManagerImpl.java  | 10 +++--
 .../keyvalue/impl/TestBlockManagerImpl.java        | 43 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 3 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 5980b92..066a0fd 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
@@ -130,8 +130,10 @@ public class BlockManagerImpl implements BlockManager {
               .initBatchOperation()) {
         db.getStore().getBlockDataTable().putWithBatch(
             batch, Long.toString(data.getLocalID()), data);
-        db.getStore().getMetadataTable().putWithBatch(
-            batch, OzoneConsts.BLOCK_COMMIT_SEQUENCE_ID, bcsId);
+        if (bcsId != 0) {
+          db.getStore().getMetadataTable().putWithBatch(
+              batch, OzoneConsts.BLOCK_COMMIT_SEQUENCE_ID, bcsId);
+        }
 
         // Set Bytes used, this bytes used will be updated for every write and
         // only get committed for every put block. In this way, when datanode
@@ -153,7 +155,9 @@ public class BlockManagerImpl implements BlockManager {
         db.getStore().getBatchHandler().commitBatchOperation(batch);
       }
 
-      container.updateBlockCommitSequenceId(bcsId);
+      if (bcsId != 0) {
+        container.updateBlockCommitSequenceId(bcsId);
+      }
       // Increment block count finally here for in-memory.
       if (incrKeyCount) {
         container.getContainerData().incrKeyCount();
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 3bba85b..51ba01c 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
@@ -70,8 +70,10 @@ public class TestBlockManagerImpl {
   private KeyValueContainerData keyValueContainerData;
   private KeyValueContainer keyValueContainer;
   private BlockData blockData;
+  private BlockData blockData1;
   private BlockManagerImpl blockManager;
   private BlockID blockID;
+  private BlockID blockID1;
 
   private final ChunkLayOutVersion layout;
 
@@ -120,12 +122,53 @@ public class TestBlockManagerImpl {
     chunkList.add(info.getProtoBufMessage());
     blockData.setChunks(chunkList);
 
+    // Creating BlockData
+    blockID1 = new BlockID(1L, 2L);
+    blockData1 = new BlockData(blockID1);
+    blockData1.addMetadata(OzoneConsts.VOLUME, OzoneConsts.OZONE);
+    blockData1.addMetadata(OzoneConsts.OWNER,
+        OzoneConsts.OZONE_SIMPLE_HDFS_USER);
+    List<ContainerProtos.ChunkInfo> chunkList1 = new ArrayList<>();
+    ChunkInfo info1 = new ChunkInfo(String.format("%d.data.%d", blockID1
+        .getLocalID(), 0), 0, 1024);
+    chunkList1.add(info1.getProtoBufMessage());
+    blockData1.setChunks(chunkList1);
+    blockData1.setBlockCommitSequenceId(1);
+
     // Create KeyValueContainerManager
     blockManager = new BlockManagerImpl(config);
 
   }
 
   @Test
+  public void testPutBlock() throws Exception {
+    assertEquals(0, keyValueContainer.getContainerData().getKeyCount());
+    //Put Block with bcsId != 0
+    blockManager.putBlock(keyValueContainer, blockData1);
+
+    BlockData fromGetBlockData;
+    //Check Container's bcsId
+    fromGetBlockData = blockManager.getBlock(keyValueContainer,
+        blockData1.getBlockID());
+    assertEquals(1, keyValueContainer.getContainerData().getKeyCount());
+    assertEquals(1,
+        keyValueContainer.getContainerData().getBlockCommitSequenceId());
+    assertEquals(1, fromGetBlockData.getBlockCommitSequenceId());
+
+    //Put Block with bcsId == 0
+    blockManager.putBlock(keyValueContainer, blockData);
+
+    //Check Container's bcsId
+    fromGetBlockData = blockManager.getBlock(keyValueContainer,
+        blockData.getBlockID());
+    assertEquals(2, keyValueContainer.getContainerData().getKeyCount());
+    assertEquals(0, fromGetBlockData.getBlockCommitSequenceId());
+    assertEquals(1,
+        keyValueContainer.getContainerData().getBlockCommitSequenceId());
+
+  }
+
+  @Test
   public void testPutAndGetBlock() throws Exception {
     assertEquals(0, keyValueContainer.getContainerData().getKeyCount());
     //Put Block


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org