From 4573bafac855a2aac1a594319cde9022bd8a946b Mon Sep 17 00:00:00 2001 From: tejaskriya Date: Fri, 22 Nov 2024 13:07:12 +0530 Subject: [PATCH] Fix incr to set, fail num --- .../helpers/BlockDeletingServiceMetrics.java | 30 ++++++++++++------- .../common/impl/BlockDeletingService.java | 6 ++-- .../background/BlockDeletingTask.java | 22 +++++++++----- .../common/TestBlockDeletingService.java | 4 +++ 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/BlockDeletingServiceMetrics.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/BlockDeletingServiceMetrics.java index 3f5d748ab73..0ea4b87cfec 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/BlockDeletingServiceMetrics.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/BlockDeletingServiceMetrics.java @@ -92,13 +92,13 @@ public final class BlockDeletingServiceMetrics { private MutableGaugeLong containerChosenCountInLastIteration; @Metric(about = "Total number of successful delete blocks in latest iteration.") - private MutableCounterLong successCountInLastIteration; + private MutableGaugeLong successCountInLastIteration; @Metric(about = "The total bytes for blocks successfully deleted in the latest iteration.") - private MutableCounterLong successBytesInLastIteration; + private MutableGaugeLong successBytesInLastIteration; @Metric(about = "The number of failed delete blocks in the latest iteration.") - private MutableCounterLong failureCountInLastIteration; + private MutableGaugeLong failureCountInLastIteration; private BlockDeletingServiceMetrics() { @@ -131,8 +131,8 @@ public void incrSuccessBytes(long bytes) { this.successBytes.incr(bytes); } - public void incrFailureCount() { - this.failureCount.incr(); + public void incrFailureCount(long delta) { + this.failureCount.incr(delta); } public void incrReceivedTransactionCount(long count) { @@ -225,16 +225,24 @@ public void setContainerChosenCountInLastIteration( this.containerChosenCountInLastIteration.set(containerChosenCountInLastIteration); } - public void incrSuccessCountInLastIteration(long delta) { - this.successCountInLastIteration.incr(delta); + public void setSuccessCountInLastIteration(long delta) { + this.successCountInLastIteration.set(delta); } - public void incrSuccessBytesInLastIteration(long delta) { - this.successBytesInLastIteration.incr(delta); + public void setSuccessBytesInLastIteration(long delta) { + this.successBytesInLastIteration.set(delta); } - public void incrFailureCountInLastIteration(long delta) { - this.failureCountInLastIteration.incr(delta); + public void setFailureCountInLastIteration(long delta) { + this.failureCountInLastIteration.set(delta); + } + + public long getBlockChosenCountInLastIteration() { + return blockChosenCountInLastIteration.value(); + } + + public long getContainerChosenCountInLastIteration() { + return containerChosenCountInLastIteration.value(); } @Override diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/BlockDeletingService.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/BlockDeletingService.java index 719d1d03505..6dcb2dfcead 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/BlockDeletingService.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/BlockDeletingService.java @@ -159,9 +159,9 @@ public BackgroundTaskQueue getTasks() { metrics.setContainerChosenCountInLastIteration(containers.size()); metrics.incrTotalBlockChosenCount(totalBlocks); metrics.incrTotalContainerChosenCount(containers.size()); - metrics.incrSuccessCountInLastIteration(BlockDeletingTask.getSuccessBlockDeleteInLastIteration()); - metrics.incrSuccessBytesInLastIteration(BlockDeletingTask.getSuccessBytesDeletedInLastIteration()); - metrics.incrFailureCountInLastIteration(BlockDeletingTask.getFailBlockDeleteInLastIteration()); + metrics.setSuccessCountInLastIteration(BlockDeletingTask.getSuccessBlockDeleteInLastIteration()); + metrics.setSuccessBytesInLastIteration(BlockDeletingTask.getSuccessBytesDeletedInLastIteration()); + metrics.setFailureCountInLastIteration(BlockDeletingTask.getFailBlockDeleteInLastIteration()); if (containers.size() > 0) { LOG.debug("Queued {} blocks from {} containers for deletion", totalBlocks, containers.size()); diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingTask.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingTask.java index 7d9a1b5d853..ebc4defd7f8 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingTask.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingTask.java @@ -183,6 +183,7 @@ public ContainerBackgroundTaskResult deleteViaSchema1( if (!checkDataDir(dataDir)) { return crr; } + int toBeDeletedNum = 0, deletedBlocksCount = 0; try { Table blockDataTable = meta.getStore().getBlockDataTable(); @@ -194,6 +195,7 @@ public ContainerBackgroundTaskResult deleteViaSchema1( .getSequentialRangeKVs(containerData.startKeyEmpty(), (int) blocksToDelete, containerData.containerPrefix(), filter); + toBeDeletedNum = toDeleteBlocks.size(); if (toDeleteBlocks.isEmpty()) { LOG.debug("No under deletion block found in container : {}", containerData.getContainerID()); @@ -202,7 +204,7 @@ public ContainerBackgroundTaskResult deleteViaSchema1( List succeedBlocks = new LinkedList<>(); LOG.debug("Container : {}, To-Delete blocks : {}", - containerData.getContainerID(), toDeleteBlocks.size()); + containerData.getContainerID(), toBeDeletedNum); Handler handler = Objects.requireNonNull(ozoneContainer.getDispatcher() .getHandler(container.getContainerType())); @@ -242,7 +244,7 @@ public ContainerBackgroundTaskResult deleteViaSchema1( // updated with decremented used bytes during deleteChunk. This is // done here so that all the DB update for block delete can be // batched together while committing to DB. - int deletedBlocksCount = succeedBlocks.size(); + deletedBlocksCount = succeedBlocks.size(); containerData.updateAndCommitDBCounters(meta, batch, deletedBlocksCount, releasedBytes); // Once DB update is persisted, check if there are any blocks @@ -275,8 +277,9 @@ public ContainerBackgroundTaskResult deleteViaSchema1( } catch (IOException exception) { LOG.warn("Deletion operation was not successful for container: " + container.getContainerData().getContainerID(), exception); - metrics.incrFailureCount(); - incrFailBlockDeleteInLastIteration(1); + int failed = toBeDeletedNum - deletedBlocksCount; + metrics.incrFailureCount(failed); + incrFailBlockDeleteInLastIteration(failed); throw exception; } } @@ -330,6 +333,7 @@ private ContainerBackgroundTaskResult deleteViaTransactionStore( if (!checkDataDir(dataDir)) { return crr; } + int toBeDeletedNum = 0, deletedBlocksCount = 0; try { Table blockDataTable = meta.getStore().getBlockDataTable(); @@ -346,6 +350,7 @@ private ContainerBackgroundTaskResult deleteViaTransactionStore( numBlocks += delTx.getLocalIDList().size(); delBlocks.add(delTx); } + toBeDeletedNum = delBlocks.size(); if (delBlocks.isEmpty()) { LOG.info("No transaction found in container {} with pending delete " + "block count {}", @@ -360,7 +365,7 @@ private ContainerBackgroundTaskResult deleteViaTransactionStore( } LOG.debug("Container : {}, To-Delete blocks : {}", - containerData.getContainerID(), delBlocks.size()); + containerData.getContainerID(), toBeDeletedNum); Handler handler = Objects.requireNonNull(ozoneContainer.getDispatcher() .getHandler(container.getContainerType())); @@ -368,7 +373,7 @@ private ContainerBackgroundTaskResult deleteViaTransactionStore( DeleteTransactionStats deleteBlocksResult = deleteTransactions(delBlocks, handler, blockDataTable, container); int deletedBlocksProcessed = deleteBlocksResult.getBlocksProcessed(); - int deletedBlocksCount = deleteBlocksResult.getBlocksDeleted(); + deletedBlocksCount = deleteBlocksResult.getBlocksDeleted(); long releasedBytes = deleteBlocksResult.getBytesReleased(); List deletedBlocksTxs = deleteBlocksResult.deletedBlocksTxs(); @@ -426,8 +431,9 @@ private ContainerBackgroundTaskResult deleteViaTransactionStore( } catch (IOException exception) { LOG.warn("Deletion operation was not successful for container: " + container.getContainerData().getContainerID(), exception); - metrics.incrFailureCount(); - incrFailBlockDeleteInLastIteration(1); + int failed = toBeDeletedNum - deletedBlocksCount; + metrics.incrFailureCount(failed); + incrFailBlockDeleteInLastIteration(failed); throw exception; } } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java index bc56141fb08..4958cd56ef7 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java @@ -604,9 +604,11 @@ public void testBlockDeletion(ContainerTestVersionInfo versionInfo) assertEquals(2, deletingServiceMetrics.getTotalBlockChosenCount() - totalBlockChosenCount); + assertEquals(2, deletingServiceMetrics.getBlockChosenCountInLastIteration()); assertEquals(1, deletingServiceMetrics.getTotalContainerChosenCount() - totalContainerChosenCount); + assertEquals(1, deletingServiceMetrics.getContainerChosenCountInLastIteration()); // The value of the getTotalPendingBlockCount Metrics is obtained // before the deletion is processing // So the Pending Block count will be 3 @@ -633,9 +635,11 @@ public void testBlockDeletion(ContainerTestVersionInfo versionInfo) assertEquals(3, deletingServiceMetrics.getTotalBlockChosenCount() - totalBlockChosenCount); + assertEquals(1, deletingServiceMetrics.getBlockChosenCountInLastIteration()); assertEquals(2, deletingServiceMetrics.getTotalContainerChosenCount() - totalContainerChosenCount); + assertEquals(1, deletingServiceMetrics.getContainerChosenCountInLastIteration()); // check if blockData get deleted assertBlockDataTableRecordCount(0, meta, filter, data.getContainerID());