From b0e3c650ccf4acf90cf9aef8b63d3204a4d53df2 Mon Sep 17 00:00:00 2001 From: "Haiyang.Hu" Date: Mon, 6 Feb 2023 10:32:12 +0800 Subject: [PATCH] HDFS-16899. Fix TestAddOverReplicatedStripedBlocks#testProcessOverReplicatedAndCorruptStripedBlock failed --- .../hdfs/server/blockmanagement/BlockManager.java | 10 ++++++++++ .../server/blockmanagement/InvalidateBlocks.java | 12 +++++++++++- .../namenode/TestAddOverReplicatedStripedBlocks.java | 6 ++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java index 4e5e12347169f..12de33f42a738 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java @@ -5617,4 +5617,14 @@ public void setExcludeSlowNodesEnabled(boolean enable) { public boolean getExcludeSlowNodesEnabled(BlockType blockType) { return placementPolicies.getPolicy(blockType).getExcludeSlowNodesEnabled(); } + + @VisibleForTesting + public void setPendingPeriodInMs(long newVal) { + invalidateBlocks.setPendingPeriodInMs(newVal); + } + + @VisibleForTesting + public long getPendingPeriodInMs() { + return invalidateBlocks.getPendingPeriodInMs(); + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java index bb4edfdbf7251..950612761bbca 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java @@ -61,7 +61,7 @@ class InvalidateBlocks { * The period of pending time for block invalidation since the NameNode * startup */ - private final long pendingPeriodInMs; + private long pendingPeriodInMs; /** the startup time */ private final long startupTime = Time.monotonicNow(); @@ -252,6 +252,16 @@ long getInvalidationDelay() { return pendingPeriodInMs - (Time.monotonicNow() - startupTime); } + @VisibleForTesting + public void setPendingPeriodInMs(long newVal) { + this.pendingPeriodInMs = newVal; + } + + @VisibleForTesting + public long getPendingPeriodInMs() { + return this.pendingPeriodInMs; + } + /** * Get blocks to invalidate by limit as blocks that can be sent in one * message is limited. diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAddOverReplicatedStripedBlocks.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAddOverReplicatedStripedBlocks.java index aad8e9b96a013..9b3451d1b64a5 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAddOverReplicatedStripedBlocks.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAddOverReplicatedStripedBlocks.java @@ -214,6 +214,10 @@ public void testProcessOverReplicatedAndCorruptStripedBlock() assertEquals(1, bm.countNodes(bm.getStoredBlock(blockInfo)) .corruptReplicas()); + // Set a larger value for delete invalidation delay time of a block and + // avoid the redundant internal blocks will be deleted. + long oldPendingPeriodInMs = bm.getPendingPeriodInMs(); + bm.setPendingPeriodInMs(3600000); // let a internal block be over replicated with 2 redundant block. blk.setBlockId(groupId + 2); cluster.injectBlocks(numDNs - 3, Arrays.asList(blk), bpid); @@ -240,6 +244,8 @@ public void testProcessOverReplicatedAndCorruptStripedBlock() for (int i = 1; i < groupSize; i++) { assertTrue(set.get(i)); } + // restore original settings. + bm.setPendingPeriodInMs(oldPendingPeriodInMs); } // This test is going to be rewritten in HDFS-10854. Ignoring this test