From a33a1a7d8d22c07b90037a298d2adc3a06aa27ba Mon Sep 17 00:00:00 2001 From: sancar Date: Mon, 26 Jul 2021 14:41:57 +0300 Subject: [PATCH] Fixes SplitBrainTest start issues SplitBrainStatus is set by a single thread at the hazelcast instance start in an async manner. Therefore, we are not sure that a the status is set when the test starts. Adding an eventually check at the start so that we make sure we have the min-size cluster for all split brain protections before we actually split the cluster fixes #18950 fixes #18777 fixes #18766 fixes #18765 fixes #18764 fixes #18930 --- .../AbstractSplitBrainProtectionTest.java | 2 +- .../splitbrainprotection/PartitionedCluster.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/AbstractSplitBrainProtectionTest.java b/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/AbstractSplitBrainProtectionTest.java index 9dd1cc6c704a..f4e78844e5c7 100644 --- a/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/AbstractSplitBrainProtectionTest.java +++ b/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/AbstractSplitBrainProtectionTest.java @@ -239,7 +239,7 @@ protected static void initCluster(Config config, TestHazelcastInstanceFactory fa config.addSetConfig(newSetConfig(splitBrainProtectionOn, splitBrainProtectionName)); config.addPNCounterConfig(newPNCounterConfig(splitBrainProtectionOn, splitBrainProtectionName)); } - cluster.createFiveMemberCluster(config); + cluster.createFiveMemberCluster(config, splitBrainProtectionNames); for (SplitBrainProtectionOn splitBrainProtectionOn : types) { LOGGER.info("Queue size before data initialization for " + splitBrainProtectionOn diff --git a/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/PartitionedCluster.java b/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/PartitionedCluster.java index 5ab3567ea463..ecbedc6e655c 100644 --- a/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/PartitionedCluster.java +++ b/hazelcast/src/test/java/com/hazelcast/splitbrainprotection/PartitionedCluster.java @@ -74,8 +74,12 @@ public HazelcastInstance getInstance(int index) { return instance[index]; } - public void createFiveMemberCluster(Config config) { + public void createFiveMemberCluster(Config config, String[] splitBrainProtectionIds) { createInstances(config); + verifySplitBrainProtectionsPresentEventually(SUCCESSFUL_SPLIT_BRAIN_PROTECTION_TEST_NAME); + for (String splitBrainProtectionId : splitBrainProtectionIds) { + verifySplitBrainProtectionsPresentEventually(splitBrainProtectionId); + } } public void splitFiveMembersThreeAndTwo(String... splitBrainProtectionIds) { @@ -133,6 +137,14 @@ private void splitCluster() { closeConnectionBetween(instance[4], instance[0]); } + private void verifySplitBrainProtectionsPresentEventually(String splitBrainProtectionId) { + assertSplitBrainProtectionIsPresentEventually(instance[0], splitBrainProtectionId); + assertSplitBrainProtectionIsPresentEventually(instance[1], splitBrainProtectionId); + assertSplitBrainProtectionIsPresentEventually(instance[2], splitBrainProtectionId); + assertSplitBrainProtectionIsPresentEventually(instance[3], splitBrainProtectionId); + assertSplitBrainProtectionIsPresentEventually(instance[4], splitBrainProtectionId); + } + private void verifySplitBrainProtections(String splitBrainProtectionId) { assertSplitBrainProtectionIsPresentEventually(instance[0], splitBrainProtectionId); assertSplitBrainProtectionIsPresentEventually(instance[1], splitBrainProtectionId);