From e0fdb4ea025f194f62e4fcf4f45a72c95cfb77b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elek=20M=C3=A1rton?= Date: Mon, 26 Apr 2021 20:00:20 +0200 Subject: [PATCH 1/3] HDDS-5147. Intermittent test failure in TestContainerDeletionChoosingPolicy#testRandomChoosingPolicy --- .../TestContainerDeletionChoosingPolicy.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java index a4ae602a7fea..796345e181d8 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java @@ -103,7 +103,7 @@ public void testRandomChoosingPolicy() throws IOException { layout, ContainerTestHelper.CONTAINER_MAX_SIZE, UUID.randomUUID().toString(), UUID.randomUUID().toString()); - data.incrPendingDeletionBlocks(random.nextInt(numContainers) + 1); + data.incrPendingDeletionBlocks(20); data.closeContainer(); KeyValueContainer container = new KeyValueContainer(data, conf); containerSet.addContainer(container); @@ -125,22 +125,22 @@ public void testRandomChoosingPolicy() throws IOException { } Assert.assertTrue(totPendingBlocks >= blockLimitPerInterval); - - // test random choosing - List result1 = blockDeletingService - .chooseContainerForBlockDeletion(numContainers, deletionPolicy); - List result2 = blockDeletingService - .chooseContainerForBlockDeletion(numContainers, deletionPolicy); - - boolean hasShuffled = false; - for (int i = 0; i < numContainers; i++) { - if (result1.get(i).getContainerData().getContainerID() != result2.get(i) - .getContainerData().getContainerID()) { - hasShuffled = true; - break; + // test random choosing. We choose 100 times the 3 datanodes twice. + //We expect different order at least once. + for (int j = 0; j < 100; j++) { + List result1 = blockDeletingService + .chooseContainerForBlockDeletion(50, deletionPolicy); + List result2 = blockDeletingService + .chooseContainerForBlockDeletion(50, deletionPolicy); + boolean hasShuffled = false; + for (int i = 0; i < result1.size(); i++) { + if (result1.get(i).getContainerData().getContainerID() != result2.get(i) + .getContainerData().getContainerID()) { + return; + } } } - Assert.assertTrue("Chosen container results were same", hasShuffled); + Assert.fail("Chosen container results were same 100 times"); } From 534229b4aa5addd9031ccbd40aa50e1c4ea054cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elek=20M=C3=A1rton?= Date: Mon, 26 Apr 2021 23:29:37 +0200 Subject: [PATCH 2/3] norandom --- .../keyvalue/statemachine/background/BlockDeletingService.java | 2 ++ .../common/impl/TestContainerDeletionChoosingPolicy.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java index a89efe03de28..07551d867649 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java @@ -177,6 +177,8 @@ public List chooseContainerForBlockDeletion( .filter(e -> isDeletionAllowed(e.getValue().getContainerData(), deletionPolicy)).collect(Collectors .toMap(Map.Entry::getKey, e -> e.getValue().getContainerData())); + System.out.println("size " + containerDataMap.size()); + System.out.println("blockLimit " + blockLimit); return deletionPolicy .chooseContainerForBlockDeletion(blockLimit, containerDataMap); } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java index 796345e181d8..36f842a68167 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java @@ -97,7 +97,6 @@ public void testRandomChoosingPolicy() throws IOException { containerSet = new ContainerSet(); int numContainers = 10; - Random random = new Random(); for (int i = 0; i < numContainers; i++) { KeyValueContainerData data = new KeyValueContainerData(i, layout, From fc8946e5e010efb974b477b086fdb8734bb108b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elek=20M=C3=A1rton?= Date: Tue, 27 Apr 2021 10:06:49 +0200 Subject: [PATCH 3/3] Revert Block deleting service --- .../keyvalue/statemachine/background/BlockDeletingService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java index 07551d867649..a89efe03de28 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java @@ -177,8 +177,6 @@ public List chooseContainerForBlockDeletion( .filter(e -> isDeletionAllowed(e.getValue().getContainerData(), deletionPolicy)).collect(Collectors .toMap(Map.Entry::getKey, e -> e.getValue().getContainerData())); - System.out.println("size " + containerDataMap.size()); - System.out.println("blockLimit " + blockLimit); return deletionPolicy .chooseContainerForBlockDeletion(blockLimit, containerDataMap); }