You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by lj...@apache.org on 2020/10/19 14:01:22 UTC

[hadoop-ozone] branch master updated: HDDS-4297. Allow multiple transactions per container to be sent for deletion by SCM.

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

ljain pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 25e2046  HDDS-4297. Allow multiple transactions per container to be sent for deletion by SCM.
25e2046 is described below

commit 25e2046eefa9add8d5e5d45e39cbb188232b0fca
Author: Lokesh Jain <lj...@apache.org>
AuthorDate: Mon Sep 28 11:36:55 2020 +0530

    HDDS-4297. Allow multiple transactions per container to be sent for deletion by SCM.
---
 .../block/DatanodeDeletedBlockTransactions.java    | 32 ++++++++--------------
 .../hadoop/hdds/scm/block/TestDeletedBlockLog.java | 17 +++++-------
 2 files changed, 18 insertions(+), 31 deletions(-)

diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DatanodeDeletedBlockTransactions.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DatanodeDeletedBlockTransactions.java
index ce65a70..dca1529 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DatanodeDeletedBlockTransactions.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DatanodeDeletedBlockTransactions.java
@@ -82,30 +82,20 @@ public class DatanodeDeletedBlockTransactions {
   }
 
   private boolean addTransactionToDN(UUID dnID, DeletedBlocksTransaction tx) {
-    if (transactions.containsKey(dnID)) {
-      List<DeletedBlocksTransaction> txs = transactions.get(dnID);
-      if (txs != null && txs.size() < maximumAllowedTXNum) {
-        boolean hasContained = false;
-        for (DeletedBlocksTransaction t : txs) {
-          if (t.getContainerID() == tx.getContainerID()) {
-            hasContained = true;
-            break;
-          }
-        }
-
-        if (!hasContained) {
-          txs.add(tx);
-          currentTXNum++;
-          return true;
-        }
-      }
-    } else {
+    List<DeletedBlocksTransaction> txs = transactions.get(dnID);
+    if (txs == null || txs.size() < maximumAllowedTXNum) {
       currentTXNum++;
-      transactions.put(dnID, tx);
+      if (txs == null) {
+        transactions.put(dnID, tx);
+      } else {
+        txs.add(tx);
+      }
+      if (SCMBlockDeletingService.LOG.isDebugEnabled()) {
+        SCMBlockDeletingService.LOG
+            .debug("Transaction added: {} <- TX({})", dnID, tx.getTxID());
+      }
       return true;
     }
-    SCMBlockDeletingService.LOG
-        .debug("Transaction added: {} <- TX({})", dnID, tx.getTxID());
     return false;
   }
 
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestDeletedBlockLog.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestDeletedBlockLog.java
index 75ad662..d4e2553 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestDeletedBlockLog.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestDeletedBlockLog.java
@@ -375,30 +375,27 @@ public class TestDeletedBlockLog {
         transactions.getDatanodeTransactions(dnId1.getUuid()).size());
 
     int size = transactions.getDatanodeTransactions(dnId2.getUuid()).size();
-    // add duplicated container in dnID2, this should be failed.
+    // add two transactions for same container in dnID2
     DeletedBlocksTransaction.Builder builder =
         DeletedBlocksTransaction.newBuilder();
     builder.setTxID(11);
     builder.setContainerID(containerID);
     builder.setCount(0);
-    transactions.addTransaction(builder.build(),
-        null);
+    Assert.assertTrue(transactions.addTransaction(builder.build(), null));
 
-    // The number of TX in dnID2 should not be changed.
-    Assert.assertEquals(size,
+    // Total number of transactions reaches the maximum value
+    Assert.assertEquals(size + 1,
         transactions.getDatanodeTransactions(dnId2.getUuid()).size());
+    Assert.assertTrue(transactions.isFull());
 
-    // Add new TX in dnID2, then dnID2 will reach maximum value.
     containerID = RandomUtils.nextLong();
     builder = DeletedBlocksTransaction.newBuilder();
     builder.setTxID(12);
     builder.setContainerID(containerID);
     builder.setCount(0);
     mockContainerInfo(containerID, dnId2);
-    transactions.addTransaction(builder.build(),
-        null);
-    // Since all node are full, then transactions is full.
-    Assert.assertTrue(transactions.isFull());
+    // No more txns can be added as maximum number of transactions are reached
+    Assert.assertFalse(transactions.addTransaction(builder.build(), null));
   }
 
   private void mockContainerInfo(long containerID, DatanodeDetails dd)


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