aryangupta1998 commented on a change in pull request #1702:
URL: https://github.com/apache/ozone/pull/1702#discussion_r547485893



##########
File path: 
hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java
##########
@@ -158,65 +190,167 @@ private void createToDeleteBlocks(ContainerSet 
containerSet,
     }
     byte[] arr = randomAlphanumeric(1048576).getBytes(UTF_8);
     ChunkBuffer buffer = ChunkBuffer.wrap(ByteBuffer.wrap(arr));
+    int txnID = 0;
     for (int x = 0; x < numOfContainers; x++) {
       long containerID = ContainerTestHelper.getTestContainerID();
       KeyValueContainerData data =
           new KeyValueContainerData(containerID, layout,
               ContainerTestHelper.CONTAINER_MAX_SIZE,
               UUID.randomUUID().toString(), datanodeUuid);
       data.closeContainer();
+      data.setSchemaVersion(schemaVersion);
       KeyValueContainer container = new KeyValueContainer(data, conf);
       container.create(volumeSet,
           new RoundRobinVolumeChoosingPolicy(), scmId);
       containerSet.addContainer(container);
       data = (KeyValueContainerData) containerSet.getContainer(
           containerID).getContainerData();
-      long chunkLength = 100;
-      try(ReferenceCountedDB metadata = BlockUtils.getDB(data, conf)) {
-        for (int j = 0; j < numOfBlocksPerContainer; j++) {
+      if (data.getSchemaVersion().equals(SCHEMA_V1)) {
+        try(ReferenceCountedDB metadata = BlockUtils.getDB(data, conf)) {
+          for (int j = 0; j < numOfBlocksPerContainer; j++) {
+            BlockID blockID =
+                ContainerTestHelper.getTestBlockID(containerID);
+            String deleteStateName = OzoneConsts.DELETING_KEY_PREFIX +
+                blockID.getLocalID();
+            BlockData kd = new BlockData(blockID);
+            List<ContainerProtos.ChunkInfo> chunks = Lists.newArrayList();
+            putChunksInBlock(numOfChunksPerBlock, j, chunks, buffer,
+                chunkManager, container, blockID);
+            kd.setChunks(chunks);
+            metadata.getStore().getBlockDataTable().put(
+                deleteStateName, kd);
+            container.getContainerData().incrPendingDeletionBlocks(1);
+          }
+          updateMetaData(data, container, numOfBlocksPerContainer,
+              numOfChunksPerBlock);
+        }
+      } else if (data.getSchemaVersion().equals(SCHEMA_V2)) {
+        Map<Long, List<Long>> containerBlocks = new HashMap<>();
+        int blockCount = 0;
+        for (int i = 0; i < numOfBlocksPerContainer; i++) {
+          txnID = txnID + 1;
           BlockID blockID =
               ContainerTestHelper.getTestBlockID(containerID);
-          String deleteStateName = OzoneConsts.DELETING_KEY_PREFIX +
-              blockID.getLocalID();
           BlockData kd = new BlockData(blockID);
           List<ContainerProtos.ChunkInfo> chunks = Lists.newArrayList();
-          for (int k = 0; k < numOfChunksPerBlock; k++) {
-            final String chunkName = String.format("block.%d.chunk.%d", j, k);
-            final long offset = k * chunkLength;
-            ContainerProtos.ChunkInfo info =
-                ContainerProtos.ChunkInfo.newBuilder()
-                    .setChunkName(chunkName)
-                    .setLen(chunkLength)
-                    .setOffset(offset)
-                    .setChecksumData(Checksum.getNoChecksumDataProto())
-                    .build();
-            chunks.add(info);
-            ChunkInfo chunkInfo = new ChunkInfo(chunkName, offset, 
chunkLength);
-            ChunkBuffer chunkData = buffer.duplicate(0, (int) chunkLength);
-            chunkManager.writeChunk(container, blockID, chunkInfo, chunkData,
-                WRITE_STAGE);
-            chunkManager.writeChunk(container, blockID, chunkInfo, chunkData,
-                COMMIT_STAGE);
-          }
+          putChunksInBlock(numOfChunksPerBlock, i, chunks, buffer, 
chunkManager,
+              container, blockID);
           kd.setChunks(chunks);
-          metadata.getStore().getBlockDataTable().put(
-                  deleteStateName, kd);
+          try(ReferenceCountedDB metadata = BlockUtils.getDB(data, conf)) {
+            String bID = blockID.getLocalID()+"";
+            metadata.getStore().getBlockDataTable().put(bID, kd);
+          }
           container.getContainerData().incrPendingDeletionBlocks(1);
+
+          // In below if statements we are checking if a single container
+          // consists of more blocks than 'blockLimitPerTask' then we create
+          // (totalBlocksInContainer / blockLimitPerTask) transactions which
+          // consists of blocks equal to blockLimitPerTask and last transaction
+          // consists of blocks equal to
+          // (totalBlocksInContainer % blockLimitPerTask).
+          if (blockCount < blockLimitPerTask) {
+            if (containerBlocks.containsKey(containerID)) {
+              containerBlocks.get(containerID).add(blockID.getLocalID());
+            } else {
+              List<Long> item = new ArrayList<>();
+              item.add(blockID.getLocalID());
+              containerBlocks.put(containerID, item);
+            }
+            blockCount++;
+          }
+          boolean flag = false;
+          if (blockCount == blockLimitPerTask) {
+            createTxn(data, containerBlocks, txnID);
+            containerBlocks.clear();
+            blockCount = 0;
+            flag = true;
+          }
+          if (i == (numOfBlocksPerContainer - 1) && !flag) {
+            createTxn(data, containerBlocks, txnID);
+          }

Review comment:
       Thanks for this suggestion, made the necessary changes.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to