From ff35baa84919487332c35fecb4328de86d626ad0 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sun, 29 Sep 2024 20:01:11 +0800 Subject: [PATCH 1/8] HDDS-11498. Improve SCM deletion efficiency. --- .../DeleteBlocksCommandHandler.java | 8 ++-- .../DatanodeDeletedBlockTransactions.java | 3 +- .../hdds/scm/block/DeletedBlockLogImpl.java | 40 ++++++++++--------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java index bd7431c61452..0abfcbce8d6b 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java @@ -354,10 +354,11 @@ private void processCmd(DeleteCmdInfo cmd) { DeletedContainerBlocksSummary summary = DeletedContainerBlocksSummary.getFrom(containerBlocks); LOG.info("Summary of deleting container blocks, numOfTransactions={}, " - + "numOfContainers={}, numOfBlocks={}", + + "numOfContainers={}, numOfBlocks={}, commandId={}.", summary.getNumOfTxs(), summary.getNumOfContainers(), - summary.getNumOfBlocks()); + summary.getNumOfBlocks(), + cmd.getCmd().getId()); if (LOG.isDebugEnabled()) { LOG.debug("Start to delete container blocks, TXIDs={}", summary.getTxIDSummary()); @@ -384,7 +385,8 @@ private void processCmd(DeleteCmdInfo cmd) { LOG.debug("Sending following block deletion ACK to SCM"); for (DeleteBlockTransactionResult result : blockDeletionACK .getResultsList()) { - LOG.debug("{} : {}", result.getTxID(), result.getSuccess()); + LOG.debug("TxId = {} : ContainerId = {} : {}", + result.getTxID(), result.getContainerID(), result.getSuccess()); } } } 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 e485fcc98d93..99fd9c7b431d 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 @@ -47,7 +47,8 @@ void addTransactionToDN(UUID dnID, DeletedBlocksTransaction tx) { blocksDeleted += tx.getLocalIDCount(); if (SCMBlockDeletingService.LOG.isDebugEnabled()) { SCMBlockDeletingService.LOG - .debug("Transaction added: {} <- TX({})", dnID, tx.getTxID()); + .debug("Transaction added: {} <- TX({}), DN {} <- blocksDeleted Add {}.", + dnID, tx.getTxID(), dnID, tx.getLocalIDCount()); } } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 9d5377b9e3e6..0df61e5a6fc6 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -200,20 +200,6 @@ private DeletedBlocksTransaction constructNewTransaction( .build(); } - private boolean isTransactionFailed(DeleteBlockTransactionResult result) { - if (LOG.isDebugEnabled()) { - LOG.debug( - "Got block deletion ACK from datanode, TXIDs={}, " + "success={}", - result.getTxID(), result.getSuccess()); - } - if (!result.getSuccess()) { - LOG.warn("Got failed ACK for TXID={}, prepare to resend the " - + "TX in next interval", result.getTxID()); - return true; - } - return false; - } - @Override public int getNumOfValidTransactions() throws IOException { lock.lock(); @@ -300,6 +286,25 @@ private void getTransaction(DeletedBlocksTransaction tx, .setCount(transactionStatusManager.getOrDefaultRetryCount( tx.getTxID(), 0)) .build(); + + // We have made an improvement here, and we expect that all replicas + // of the Container being sent will be included in the dnList. + // This change benefits ACK confirmation and improves deletion speed. + // The principle behind it is that DN can receive the command to delete a certain Container at the same time and provide + // feedback to SCM at roughly the same time. + // This avoids the issue of deletion blocking, + // where some replicas of a Container are deleted while others do not receive the delete command. + long containerId = tx.getContainerID(); + for (ContainerReplica replica : replicas) { + DatanodeDetails datanodeDetails = replica.getDatanodeDetails(); + if (!dnList.contains(datanodeDetails)) { + DatanodeDetails dnDetail = replica.getDatanodeDetails(); + LOG.debug("Skip Container = {}, because DN= {} is not in dnList.", + containerId, dnDetail.getUuid()); + return; + } + } + for (ContainerReplica replica : replicas) { DatanodeDetails details = replica.getDatanodeDetails(); if (!dnList.contains(details)) { @@ -358,8 +363,8 @@ public DatanodeDeletedBlockTransactions getTransactions( // HDDS-7126. When container is under replicated, it is possible // that container is deleted, but transactions are not deleted. if (containerManager.getContainer(id).isDeleted()) { - LOG.warn("Container: " + id + " was deleted for the " + - "transaction: " + txn); + LOG.warn("Container: {} was deleted for the " + + "transaction: {}.", id, txn); txIDs.add(txn.getTxID()); } else if (txn.getCount() > -1 && txn.getCount() <= maxRetry && !containerManager.getContainer(id).isOpen()) { @@ -373,8 +378,7 @@ public DatanodeDeletedBlockTransactions getTransactions( txn, transactions, dnList, replicas, commandStatus); } } catch (ContainerNotFoundException ex) { - LOG.warn("Container: " + id + " was not found for the transaction: " - + txn); + LOG.warn("Container: {} was not found for the transaction: {}.", id, txn); txIDs.add(txn.getTxID()); } } From 2067624c1513a44f776667d6dc02bc144cb27fcf Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sun, 29 Sep 2024 20:44:55 +0800 Subject: [PATCH 2/8] HDDS-11498. Fix CheckStyle. --- .../org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 0df61e5a6fc6..1c38c2d34d2d 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -290,7 +290,8 @@ private void getTransaction(DeletedBlocksTransaction tx, // We have made an improvement here, and we expect that all replicas // of the Container being sent will be included in the dnList. // This change benefits ACK confirmation and improves deletion speed. - // The principle behind it is that DN can receive the command to delete a certain Container at the same time and provide + // The principle behind it is that + // DN can receive the command to delete a certain Container at the same time and provide // feedback to SCM at roughly the same time. // This avoids the issue of deletion blocking, // where some replicas of a Container are deleted while others do not receive the delete command. From 2d5db60b423c2d5b2af0ae53a8da1da85d52e08a Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sun, 29 Sep 2024 21:32:29 +0800 Subject: [PATCH 3/8] HDDS-11498. Fix CheckStyle. --- .../org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 1c38c2d34d2d..6c765b6ecb07 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -35,7 +35,6 @@ import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.CommandStatus; import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerBlocksDeletionACKProto; -import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerBlocksDeletionACKProto.DeleteBlockTransactionResult; import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.DeletedBlocksTransaction; import org.apache.hadoop.hdds.scm.command.CommandStatusReportHandler.DeleteBlockStatus; import org.apache.hadoop.hdds.scm.container.ContainerInfo; From 0a5b2b4511ec162190f2e7c3e3a039e2af582610 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Mon, 30 Sep 2024 16:17:37 +0800 Subject: [PATCH 4/8] HDDS-11498. Add Metrics. --- .../hdds/scm/block/DeletedBlockLogImpl.java | 8 ++--- .../block/ScmBlockDeletingServiceMetrics.java | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 6c765b6ecb07..7910c543642f 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -299,20 +299,19 @@ private void getTransaction(DeletedBlocksTransaction tx, DatanodeDetails datanodeDetails = replica.getDatanodeDetails(); if (!dnList.contains(datanodeDetails)) { DatanodeDetails dnDetail = replica.getDatanodeDetails(); - LOG.debug("Skip Container = {}, because DN= {} is not in dnList.", + LOG.debug("Skip Container = {}, because DN = {} is not in dnList.", containerId, dnDetail.getUuid()); + metrics.incrSkippedTransaction(); return; } } for (ContainerReplica replica : replicas) { DatanodeDetails details = replica.getDatanodeDetails(); - if (!dnList.contains(details)) { - continue; - } if (!transactionStatusManager.isDuplication( details, updatedTxn.getTxID(), commandStatus)) { transactions.addTransactionToDN(details.getUuid(), updatedTxn); + metrics.incrProcessedTransaction(); } } } @@ -374,6 +373,7 @@ public DatanodeDeletedBlockTransactions getTransactions( if (checkInadequateReplica(replicas, txn)) { continue; } + metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); getTransaction( txn, transactions, dnList, replicas, commandStatus); } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/ScmBlockDeletingServiceMetrics.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/ScmBlockDeletingServiceMetrics.java index 2cadca1d92a4..6637bd183293 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/ScmBlockDeletingServiceMetrics.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/ScmBlockDeletingServiceMetrics.java @@ -24,6 +24,7 @@ import org.apache.hadoop.metrics2.annotation.Metrics; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.lib.MutableCounterLong; +import org.apache.hadoop.metrics2.lib.MutableGaugeLong; /** * Metrics related to Block Deleting Service running in SCM. @@ -76,6 +77,15 @@ public final class ScmBlockDeletingServiceMetrics { @Metric(about = "The number of created txs which are added into DB.") private MutableCounterLong numBlockDeletionTransactionCreated; + @Metric(about = "The number of skipped transactions") + private MutableCounterLong numSkippedTransactions; + + @Metric(about = "The number of processed transactions") + private MutableCounterLong numProcessedTransactions; + + @Metric(about = "The number of dataNodes of delete transactions.") + private MutableGaugeLong numBlockDeletionTransactionDataNodes; + private ScmBlockDeletingServiceMetrics() { } @@ -130,6 +140,18 @@ public void incrBlockDeletionTransactionCreated(long count) { this.numBlockDeletionTransactionCreated.incr(count); } + public void incrSkippedTransaction() { + this.numSkippedTransactions.incr(); + } + + public void incrProcessedTransaction() { + this.numProcessedTransactions.incr(); + } + + public void setNumBlockDeletionTransactionDataNodes(long dataNodes) { + this.numBlockDeletionTransactionDataNodes.set(dataNodes); + } + public long getNumBlockDeletionCommandSent() { return numBlockDeletionCommandSent.value(); } @@ -162,6 +184,18 @@ public long getNumBlockDeletionTransactionCreated() { return numBlockDeletionTransactionCreated.value(); } + public long getNumSkippedTransactions() { + return numSkippedTransactions.value(); + } + + public long getNumProcessedTransactions() { + return numProcessedTransactions.value(); + } + + public long getNumBlockDeletionTransactionDataNodes() { + return numBlockDeletionTransactionDataNodes.value(); + } + @Override public String toString() { StringBuffer buffer = new StringBuffer(); From b21f16845cd999471b14142728dc7eaacc475855 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Mon, 30 Sep 2024 16:41:24 +0800 Subject: [PATCH 5/8] HDDS-11498. Add Metrics. --- .../org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java | 2 +- .../apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 7910c543642f..6e50f2934967 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -311,7 +311,6 @@ private void getTransaction(DeletedBlocksTransaction tx, if (!transactionStatusManager.isDuplication( details, updatedTxn.getTxID(), commandStatus)) { transactions.addTransactionToDN(details.getUuid(), updatedTxn); - metrics.incrProcessedTransaction(); } } } @@ -374,6 +373,7 @@ public DatanodeDeletedBlockTransactions getTransactions( continue; } metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); + metrics.incrProcessedTransaction(); getTransaction( txn, transactions, dnList, replicas, commandStatus); } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java index 7271d9dcba68..e6fc45cb5eee 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java @@ -203,9 +203,10 @@ public EmptyTaskResult call() throws Exception { } } LOG.info("Totally added {} blocks to be deleted for" - + " {} datanodes, task elapsed time: {}ms", + + " {} datanodes / {} totalnodes, task elapsed time: {}ms", transactions.getBlocksDeleted(), transactions.getDatanodeTransactionMap().size(), + included.size(), Time.monotonicNow() - startTime); deletedBlockLog.incrementCount(new ArrayList<>(processedTxIDs)); } catch (NotLeaderException nle) { From c695c136fc807cc1c5422768eed92dbb3dec1377 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Tue, 15 Oct 2024 10:26:40 +0800 Subject: [PATCH 6/8] HDDS-11498. Improve Some Code. --- .../hdds/scm/block/DeletedBlockLogImpl.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index 6e50f2934967..bf18b1ac2191 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -286,6 +286,27 @@ private void getTransaction(DeletedBlocksTransaction tx, tx.getTxID(), 0)) .build(); + for (ContainerReplica replica : replicas) { + DatanodeDetails details = replica.getDatanodeDetails(); + if (!transactionStatusManager.isDuplication( + details, updatedTxn.getTxID(), commandStatus)) { + transactions.addTransactionToDN(details.getUuid(), updatedTxn); + metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); + metrics.incrProcessedTransaction(); + } + } + } + + private Boolean checkInadequateReplica(Set replicas, + DeletedBlocksTransaction txn, + Set dnList) throws ContainerNotFoundException { + ContainerInfo containerInfo = containerManager + .getContainer(ContainerID.valueOf(txn.getContainerID())); + ReplicationManager replicationManager = + scmContext.getScm().getReplicationManager(); + ContainerHealthResult result = replicationManager + .getContainerReplicationHealth(containerInfo, replicas); + // We have made an improvement here, and we expect that all replicas // of the Container being sent will be included in the dnList. // This change benefits ACK confirmation and improves deletion speed. @@ -294,7 +315,7 @@ private void getTransaction(DeletedBlocksTransaction tx, // feedback to SCM at roughly the same time. // This avoids the issue of deletion blocking, // where some replicas of a Container are deleted while others do not receive the delete command. - long containerId = tx.getContainerID(); + long containerId = txn.getContainerID(); for (ContainerReplica replica : replicas) { DatanodeDetails datanodeDetails = replica.getDatanodeDetails(); if (!dnList.contains(datanodeDetails)) { @@ -302,27 +323,10 @@ private void getTransaction(DeletedBlocksTransaction tx, LOG.debug("Skip Container = {}, because DN = {} is not in dnList.", containerId, dnDetail.getUuid()); metrics.incrSkippedTransaction(); - return; + return true; } } - for (ContainerReplica replica : replicas) { - DatanodeDetails details = replica.getDatanodeDetails(); - if (!transactionStatusManager.isDuplication( - details, updatedTxn.getTxID(), commandStatus)) { - transactions.addTransactionToDN(details.getUuid(), updatedTxn); - } - } - } - - private Boolean checkInadequateReplica(Set replicas, - DeletedBlocksTransaction txn) throws ContainerNotFoundException { - ContainerInfo containerInfo = containerManager - .getContainer(ContainerID.valueOf(txn.getContainerID())); - ReplicationManager replicationManager = - scmContext.getScm().getReplicationManager(); - ContainerHealthResult result = replicationManager - .getContainerReplicationHealth(containerInfo, replicas); return result.getHealthState() != ContainerHealthResult.HealthState.HEALTHY; } @@ -369,11 +373,9 @@ public DatanodeDeletedBlockTransactions getTransactions( Set replicas = containerManager .getContainerReplicas( ContainerID.valueOf(txn.getContainerID())); - if (checkInadequateReplica(replicas, txn)) { + if (checkInadequateReplica(replicas, txn, dnList)) { continue; } - metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); - metrics.incrProcessedTransaction(); getTransaction( txn, transactions, dnList, replicas, commandStatus); } From 49b5b2b2577cff6291dd9ad6a688d961364060f0 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Tue, 15 Oct 2024 18:01:04 +0800 Subject: [PATCH 7/8] HDDS-11498. Improve Some Code. --- .../org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index bf18b1ac2191..bc96174d7a01 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -291,7 +291,6 @@ private void getTransaction(DeletedBlocksTransaction tx, if (!transactionStatusManager.isDuplication( details, updatedTxn.getTxID(), commandStatus)) { transactions.addTransactionToDN(details.getUuid(), updatedTxn); - metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); metrics.incrProcessedTransaction(); } } @@ -322,7 +321,6 @@ private Boolean checkInadequateReplica(Set replicas, DatanodeDetails dnDetail = replica.getDatanodeDetails(); LOG.debug("Skip Container = {}, because DN = {} is not in dnList.", containerId, dnDetail.getUuid()); - metrics.incrSkippedTransaction(); return true; } } @@ -374,10 +372,12 @@ public DatanodeDeletedBlockTransactions getTransactions( .getContainerReplicas( ContainerID.valueOf(txn.getContainerID())); if (checkInadequateReplica(replicas, txn, dnList)) { + metrics.incrSkippedTransaction(); continue; } getTransaction( txn, transactions, dnList, replicas, commandStatus); + metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); } } catch (ContainerNotFoundException ex) { LOG.warn("Container: {} was not found for the transaction: {}.", id, txn); From 43696f2b01150712f212f8b0be3eedeaebd08fd0 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Thu, 17 Oct 2024 11:08:29 +0800 Subject: [PATCH 8/8] HDDS-11498. Improve Some Code. --- .../org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java index bc96174d7a01..987f293dd14c 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java @@ -350,6 +350,7 @@ public DatanodeDeletedBlockTransactions getTransactions( .getCommandStatusByTxId(dnList.stream(). map(DatanodeDetails::getUuid).collect(Collectors.toSet())); ArrayList txIDs = new ArrayList<>(); + metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); // Here takes block replica count as the threshold to avoid the case // that part of replicas committed the TXN and recorded in the // SCMDeletedBlockTransactionStatusManager, while they are counted @@ -377,7 +378,8 @@ public DatanodeDeletedBlockTransactions getTransactions( } getTransaction( txn, transactions, dnList, replicas, commandStatus); - metrics.setNumBlockDeletionTransactionDataNodes(dnList.size()); + } else if (txn.getCount() >= maxRetry || containerManager.getContainer(id).isOpen()) { + metrics.incrSkippedTransaction(); } } catch (ContainerNotFoundException ex) { LOG.warn("Container: {} was not found for the transaction: {}.", id, txn);