From d09853a55c9178a1722625feba113dab6f9769db Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 31 Mar 2020 15:09:54 +0100 Subject: [PATCH 1/2] Use VotingConfiguration#of where possible This resolves a longstanding TODO in the cluster coordination subsystem. Relates #32006 --- .../coordination/CoordinationMetaData.java | 1 - .../coordination/CoordinationStateTests.java | 98 +++++++++---------- .../coordination/CoordinatorTests.java | 3 +- .../cluster/coordination/NodeJoinTests.java | 18 ++-- .../coordination/PreVoteCollectorTests.java | 3 +- .../coordination/PublicationTests.java | 13 ++- 6 files changed, 66 insertions(+), 70 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationMetaData.java b/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationMetaData.java index cfd4456062e35..1857a5b5718da 100644 --- a/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationMetaData.java +++ b/server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationMetaData.java @@ -385,7 +385,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws } public static VotingConfiguration of(DiscoveryNode... nodes) { - // this could be used in many more places - TODO use this where appropriate return new VotingConfiguration(Arrays.stream(nodes).map(DiscoveryNode::getId).collect(Collectors.toSet())); } } diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java index 944b1157978de..f2407c1fd769c 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java @@ -88,7 +88,7 @@ public static DiscoveryNode createNode(String id) { } public void testSetInitialState() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); assertTrue(state1.getLastAcceptedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); assertTrue(state1.getLastCommittedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); @@ -97,7 +97,7 @@ public void testSetInitialState() { } public void testSetInitialStateWhenAlreadySet() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); assertTrue(state1.getLastAcceptedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); assertTrue(state1.getLastCommittedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); @@ -123,7 +123,7 @@ public void testStartJoinBeforeBootstrap() { } public void testStartJoinAfterBootstrap() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); assertTrue(state1.getLastAcceptedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); assertTrue(state1.getLastCommittedConfiguration().hasQuorum(Collections.singleton(node1.getId()))); @@ -172,7 +172,7 @@ public void testJoinWithWrongTarget() { } public void testJoinWithBadCurrentTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -185,7 +185,7 @@ public void testJoinWithBadCurrentTerm() { } public void testJoinWithHigherAcceptedTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -203,7 +203,7 @@ public void testJoinWithHigherAcceptedTerm() { } public void testJoinWithSameAcceptedTermButHigherVersion() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -221,7 +221,7 @@ public void testJoinWithSameAcceptedTermButHigherVersion() { } public void testJoinWithLowerLastAcceptedTermWinsElection() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -243,7 +243,7 @@ public void testJoinWithLowerLastAcceptedTermWinsElection() { } public void testJoinWithSameLastAcceptedTermButLowerOrSameVersionWinsElection() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -264,7 +264,7 @@ public void testJoinWithSameLastAcceptedTermButLowerOrSameVersionWinsElection() } public void testJoinDoesNotWinElection() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); @@ -283,8 +283,8 @@ public void testJoinDoesNotWinElection() { } public void testJoinDoesNotWinElectionWhenOnlyCommittedConfigQuorum() { - VotingConfiguration configNode1 = new VotingConfiguration(Collections.singleton(node1.getId())); - VotingConfiguration configNode2 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration configNode1 = VotingConfiguration.of(node1); + VotingConfiguration configNode2 = VotingConfiguration.of(node2); ClusterState state1 = clusterState(0L, 0L, node1, configNode1, configNode2, 42L); cs1.setInitialState(state1); @@ -297,8 +297,8 @@ public void testJoinDoesNotWinElectionWhenOnlyCommittedConfigQuorum() { } public void testJoinDoesNotWinElectionWhenOnlyLastAcceptedConfigQuorum() { - VotingConfiguration configNode1 = new VotingConfiguration(Collections.singleton(node1.getId())); - VotingConfiguration configNode2 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration configNode1 = VotingConfiguration.of(node1); + VotingConfiguration configNode2 = VotingConfiguration.of(node2); ClusterState state1 = clusterState(0L, 0L, node1, configNode2, configNode1, 42L); cs1.setInitialState(state1); @@ -311,7 +311,7 @@ public void testJoinDoesNotWinElectionWhenOnlyLastAcceptedConfigQuorum() { } public void testHandleClientValue() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -324,7 +324,7 @@ public void testHandleClientValue() { assertTrue(cs1.handleJoin(v2)); assertTrue(cs1.containsJoin(v2)); - VotingConfiguration newConfig = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, initialConfig, newConfig, 42L); PublishRequest publishRequest = cs1.handleClientValue(state2); @@ -337,7 +337,7 @@ public void testHandleClientValue() { } public void testHandleClientValueWhenElectionNotWon() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); if (randomBoolean()) { cs1.setInitialState(state1); @@ -347,7 +347,7 @@ public void testHandleClientValueWhenElectionNotWon() { } public void testHandleClientValueDuringOngoingPublication() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -364,7 +364,7 @@ public void testHandleClientValueDuringOngoingPublication() { } public void testHandleClientValueWithBadTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(3, 5)); @@ -381,7 +381,7 @@ public void testHandleClientValueWithBadTerm() { } public void testHandleClientValueWithOldVersion() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -395,7 +395,7 @@ public void testHandleClientValueWithOldVersion() { } public void testHandleClientValueWithDifferentReconfigurationWhileAlreadyReconfiguring() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -405,18 +405,18 @@ public void testHandleClientValueWithDifferentReconfigurationWhileAlreadyReconfi assertTrue(cs1.electionWon()); assertTrue(cs1.handleJoin(v2)); - VotingConfiguration newConfig1 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig1 = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, initialConfig, newConfig1, 42L); PublishRequest publishRequest = cs1.handleClientValue(state2); cs1.handlePublishRequest(publishRequest); - VotingConfiguration newConfig2 = new VotingConfiguration(Collections.singleton(node3.getId())); + VotingConfiguration newConfig2 = VotingConfiguration.of(node3); ClusterState state3 = clusterState(startJoinRequest1.getTerm(), 3L, node1, initialConfig, newConfig2, 42L); assertThat(expectThrows(CoordinationStateRejectedException.class, () -> cs1.handleClientValue(state3)).getMessage(), containsString("only allow reconfiguration while not already reconfiguring")); } public void testHandleClientValueWithSameReconfigurationWhileAlreadyReconfiguring() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -426,7 +426,7 @@ public void testHandleClientValueWithSameReconfigurationWhileAlreadyReconfigurin assertTrue(cs1.electionWon()); assertTrue(cs1.handleJoin(v2)); - VotingConfiguration newConfig1 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig1 = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, initialConfig, newConfig1, 42L); PublishRequest publishRequest = cs1.handleClientValue(state2); cs1.handlePublishRequest(publishRequest); @@ -436,7 +436,7 @@ public void testHandleClientValueWithSameReconfigurationWhileAlreadyReconfigurin public void testHandleClientValueWithIllegalCommittedConfigurationChange() { assumeTrue("test only works with assertions enabled", Assertions.ENABLED); - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -446,14 +446,14 @@ public void testHandleClientValueWithIllegalCommittedConfigurationChange() { assertTrue(cs1.electionWon()); assertTrue(cs1.handleJoin(v2)); - VotingConfiguration newConfig = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, newConfig, newConfig, 42L); assertThat(expectThrows(AssertionError.class, () -> cs1.handleClientValue(state2)).getMessage(), containsString("last committed configuration should not change")); } public void testHandleClientValueWithConfigurationChangeButNoJoinQuorum() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -461,14 +461,14 @@ public void testHandleClientValueWithConfigurationChangeButNoJoinQuorum() { assertTrue(cs1.handleJoin(v1)); assertTrue(cs1.electionWon()); - VotingConfiguration newConfig = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, initialConfig, newConfig, 42L); assertThat(expectThrows(CoordinationStateRejectedException.class, () -> cs1.handleClientValue(state2)).getMessage(), containsString("only allow reconfiguration if joinVotes have quorum for new config")); } public void testHandlePublishRequest() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -489,7 +489,7 @@ public void testHandlePublishRequest() { } public void testHandlePublishRequestWithBadTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -509,7 +509,7 @@ public void testHandlePublishRequestWithBadTerm() { // scenario when handling a publish request from a master that we already received a newer state from public void testHandlePublishRequestWithSameTermButOlderOrSameVersion() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -529,7 +529,7 @@ public void testHandlePublishRequestWithSameTermButOlderOrSameVersion() { // scenario when handling a publish request from a fresh master public void testHandlePublishRequestWithTermHigherThanLastAcceptedTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); ClusterState state1 = clusterState(startJoinRequest1.getTerm(), randomLongBetween(2, 10), node1, initialConfig, initialConfig, 42L); cs2.handleStartJoin(startJoinRequest1); @@ -542,7 +542,7 @@ public void testHandlePublishRequestWithTermHigherThanLastAcceptedTerm() { } public void testHandlePublishResponseWithCommit() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -560,7 +560,7 @@ public void testHandlePublishResponseWithCommit() { } public void testHandlePublishResponseWhenSteppedDownAsLeader() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -578,8 +578,8 @@ public void testHandlePublishResponseWhenSteppedDownAsLeader() { } public void testHandlePublishResponseWithoutPublishConfigQuorum() { - VotingConfiguration configNode1 = new VotingConfiguration(Collections.singleton(node1.getId())); - VotingConfiguration configNode2 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration configNode1 = VotingConfiguration.of(node1); + VotingConfiguration configNode2 = VotingConfiguration.of(node2); ClusterState state1 = clusterState(0L, 0L, node1, configNode1, configNode1, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -596,8 +596,8 @@ public void testHandlePublishResponseWithoutPublishConfigQuorum() { } public void testHandlePublishResponseWithoutCommitedConfigQuorum() { - VotingConfiguration configNode1 = new VotingConfiguration(Collections.singleton(node1.getId())); - VotingConfiguration configNode2 = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration configNode1 = VotingConfiguration.of(node1); + VotingConfiguration configNode2 = VotingConfiguration.of(node2); ClusterState state1 = clusterState(0L, 0L, node1, configNode1, configNode1, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -614,7 +614,7 @@ public void testHandlePublishResponseWithoutCommitedConfigQuorum() { } public void testHandlePublishResponseWithoutCommit() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -629,7 +629,7 @@ public void testHandlePublishResponseWithoutCommit() { } public void testHandlePublishResponseWithBadTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -648,7 +648,7 @@ public void testHandlePublishResponseWithBadTerm() { } public void testHandlePublishResponseWithVersionMismatch() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -663,7 +663,7 @@ public void testHandlePublishResponseWithVersionMismatch() { } public void testHandleCommit() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -672,7 +672,7 @@ public void testHandleCommit() { assertTrue(cs1.electionWon()); Join v2 = cs2.handleStartJoin(startJoinRequest1); assertTrue(cs1.handleJoin(v2)); - VotingConfiguration newConfig = new VotingConfiguration(Collections.singleton(node2.getId())); + VotingConfiguration newConfig = VotingConfiguration.of(node2); ClusterState state2 = clusterState(startJoinRequest1.getTerm(), 2L, node1, initialConfig, newConfig, 7L); PublishRequest publishRequest = cs1.handleClientValue(state2); PublishResponse publishResponse = cs1.handlePublishRequest(publishRequest); @@ -685,7 +685,7 @@ public void testHandleCommit() { } public void testHandleCommitWithBadCurrentTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -705,7 +705,7 @@ public void testHandleCommitWithBadCurrentTerm() { } public void testHandleCommitWithBadLastAcceptedTerm() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -718,7 +718,7 @@ public void testHandleCommitWithBadLastAcceptedTerm() { } public void testHandleCommitWithBadVersion() { - VotingConfiguration initialConfig = new VotingConfiguration(Collections.singleton(node1.getId())); + VotingConfiguration initialConfig = VotingConfiguration.of(node1); ClusterState state1 = clusterState(0L, 0L, node1, initialConfig, initialConfig, 42L); cs1.setInitialState(state1); StartJoinRequest startJoinRequest1 = new StartJoinRequest(node1, randomLongBetween(1, 5)); @@ -750,9 +750,9 @@ public void testVoteCollection() { assertTrue(voteCollection.containsVoteFor(node1)); assertTrue(voteCollection.containsVoteFor(node2)); assertFalse(voteCollection.containsVoteFor(node3)); - assertTrue(voteCollection.isQuorum(new VotingConfiguration(Sets.newHashSet(node1.getId(), node2.getId())))); - assertTrue(voteCollection.isQuorum(new VotingConfiguration(Sets.newHashSet(node1.getId())))); - assertFalse(voteCollection.isQuorum(new VotingConfiguration(Sets.newHashSet(node3.getId())))); + assertTrue(voteCollection.isQuorum(VotingConfiguration.of(node1, node2))); + assertTrue(voteCollection.isQuorum(VotingConfiguration.of(node1))); + assertFalse(voteCollection.isQuorum(VotingConfiguration.of(node3))); EqualsHashCodeTestUtils.CopyFunction copyFunction = vc -> { diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java index 070b1097f04de..d395ec5cc43c8 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java @@ -774,8 +774,7 @@ public void testCannotSetInitialConfigurationWithoutQuorum() { assertThat(exceptionMessage, containsString(coordinator.getLocalNode().toString())); // This is VERY BAD: setting a _different_ initial configuration. Yet it works if the first attempt will never be a quorum. - assertTrue(coordinator.setInitialConfiguration( - new VotingConfiguration(Collections.singleton(coordinator.getLocalNode().getId())))); + assertTrue(coordinator.setInitialConfiguration(VotingConfiguration.of(coordinator.getLocalNode()))); cluster.stabilise(); } } diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/NodeJoinTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/NodeJoinTests.java index 6557d647c75fa..b2705239ecd50 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/NodeJoinTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/NodeJoinTests.java @@ -276,7 +276,7 @@ public void testJoinWithHigherTermElectsLeader() { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(randomFrom(node0, node1).getId())))); + VotingConfiguration.of(randomFrom(node0, node1)))); assertFalse(isLocalNodeElectedMaster()); assertNull(coordinator.getStateForMasterService().nodes().getMasterNodeId()); long newTerm = initialTerm + randomLongBetween(1, 10); @@ -296,7 +296,7 @@ public void testJoinWithHigherTermButBetterStateGetsRejected() { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node1.getId())))); + VotingConfiguration.of(node1))); assertFalse(isLocalNodeElectedMaster()); long newTerm = initialTerm + randomLongBetween(1, 10); long higherVersion = initialVersion + randomLongBetween(1, 10); @@ -312,7 +312,7 @@ public void testJoinWithHigherTermButBetterStateStillElectsMasterThroughSelfJoin long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node0.getId())))); + VotingConfiguration.of(node0))); assertFalse(isLocalNodeElectedMaster()); long newTerm = initialTerm + randomLongBetween(1, 10); long higherVersion = initialVersion + randomLongBetween(1, 10); @@ -326,7 +326,7 @@ public void testJoinElectedLeader() { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node0.getId())))); + VotingConfiguration.of(node0))); assertFalse(isLocalNodeElectedMaster()); long newTerm = initialTerm + randomLongBetween(1, 10); joinNodeAndRun(new JoinRequest(node0, newTerm, Optional.of(new Join(node0, node0, newTerm, initialTerm, initialVersion)))); @@ -343,7 +343,7 @@ public void testJoinElectedLeaderWithHigherTerm() { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node0.getId())))); + VotingConfiguration.of(node0))); long newTerm = initialTerm + randomLongBetween(1, 10); joinNodeAndRun(new JoinRequest(node0, newTerm, Optional.of(new Join(node0, node0, newTerm, initialTerm, initialVersion)))); @@ -362,7 +362,7 @@ public void testJoinAccumulation() { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node2.getId())))); + VotingConfiguration.of(node2))); assertFalse(isLocalNodeElectedMaster()); long newTerm = initialTerm + randomLongBetween(1, 10); SimpleFuture futNode0 = joinNodeAsync(new JoinRequest(node0, newTerm, Optional.of( @@ -389,7 +389,7 @@ public void testJoinFollowerWithHigherTerm() throws Exception { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node0.getId())))); + VotingConfiguration.of(node0))); long newTerm = initialTerm + randomLongBetween(1, 10); handleStartJoinFrom(node1, newTerm); handleFollowerCheckFrom(node1, newTerm); @@ -464,7 +464,7 @@ public void testJoinFollowerFails() throws Exception { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node0.getId())))); + VotingConfiguration.of(node0))); long newTerm = initialTerm + randomLongBetween(1, 10); handleStartJoinFrom(node1, newTerm); handleFollowerCheckFrom(node1, newTerm); @@ -480,7 +480,7 @@ public void testBecomeFollowerFailsPendingJoin() throws Exception { long initialTerm = randomLongBetween(1, 10); long initialVersion = randomLongBetween(1, 10); setupFakeMasterServiceAndCoordinator(initialTerm, initialState(node0, initialTerm, initialVersion, - new VotingConfiguration(Collections.singleton(node1.getId())))); + VotingConfiguration.of(node1))); long newTerm = initialTerm + randomLongBetween(1, 10); SimpleFuture fut = joinNodeAsync(new JoinRequest(node0, newTerm, Optional.of(new Join(node0, node0, newTerm, initialTerm, initialVersion)))); diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java index 4d6578e5c5d12..093e5372dd658 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java @@ -135,8 +135,7 @@ private void runCollector() { } private ClusterState makeClusterState(DiscoveryNode[] votingNodes) { - final VotingConfiguration votingConfiguration - = new VotingConfiguration(Arrays.stream(votingNodes).map(DiscoveryNode::getId).collect(Collectors.toSet())); + final VotingConfiguration votingConfiguration = VotingConfiguration.of(votingNodes); return CoordinationStateTests.clusterState(lastAcceptedTerm, lastAcceptedVersion, localNode, votingConfiguration, votingConfiguration, 0); } diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/PublicationTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/PublicationTests.java index 5050b12531859..bc03646d564c4 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/PublicationTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/PublicationTests.java @@ -176,7 +176,7 @@ private void initializeCluster(VotingConfiguration initialConfig) { } public void testSimpleClusterStatePublishing() throws InterruptedException { - VotingConfiguration singleNodeConfig = new VotingConfiguration(Sets.newHashSet(n1.getId())); + VotingConfiguration singleNodeConfig = VotingConfiguration.of(n1); initializeCluster(singleNodeConfig); AssertingAckListener ackListener = new AssertingAckListener(nodes.size()); @@ -252,7 +252,7 @@ public void testSimpleClusterStatePublishing() throws InterruptedException { } public void testClusterStatePublishingWithFaultyNodeBeforeCommit() throws InterruptedException { - VotingConfiguration singleNodeConfig = new VotingConfiguration(Sets.newHashSet(n1.getId())); + VotingConfiguration singleNodeConfig = VotingConfiguration.of(n1); initializeCluster(singleNodeConfig); AssertingAckListener ackListener = new AssertingAckListener(nodes.size()); @@ -295,7 +295,7 @@ public void testClusterStatePublishingWithFaultyNodeBeforeCommit() throws Interr } public void testClusterStatePublishingWithFaultyNodeAfterCommit() throws InterruptedException { - VotingConfiguration singleNodeConfig = new VotingConfiguration(Sets.newHashSet(n1.getId())); + VotingConfiguration singleNodeConfig = VotingConfiguration.of(n1); initializeCluster(singleNodeConfig); AssertingAckListener ackListener = new AssertingAckListener(nodes.size()); @@ -348,7 +348,7 @@ public void testClusterStatePublishingWithFaultyNodeAfterCommit() throws Interru } public void testClusterStatePublishingFailsOrTimesOutBeforeCommit() throws InterruptedException { - VotingConfiguration config = new VotingConfiguration(Sets.newHashSet(n1.getId(), n2.getId())); + VotingConfiguration config = VotingConfiguration.of(n1, n2); initializeCluster(config); AssertingAckListener ackListener = new AssertingAckListener(nodes.size()); @@ -387,7 +387,7 @@ public void testClusterStatePublishingFailsOrTimesOutBeforeCommit() throws Inter } public void testPublishingToMastersFirst() { - VotingConfiguration singleNodeConfig = new VotingConfiguration(Sets.newHashSet(n1.getId())); + VotingConfiguration singleNodeConfig = VotingConfiguration.of(n1); initializeCluster(singleNodeConfig); DiscoveryNodes.Builder discoNodesBuilder = DiscoveryNodes.builder(); @@ -403,8 +403,7 @@ public void testPublishingToMastersFirst() { } public void testClusterStatePublishingTimesOutAfterCommit() throws InterruptedException { - VotingConfiguration config = new VotingConfiguration(randomBoolean() ? - Sets.newHashSet(n1.getId(), n2.getId()) : Sets.newHashSet(n1.getId(), n2.getId(), n3.getId())); + VotingConfiguration config = randomBoolean() ? VotingConfiguration.of(n1, n2): VotingConfiguration.of(n1, n2, n3); initializeCluster(config); AssertingAckListener ackListener = new AssertingAckListener(nodes.size()); From c489c1926d4015928a6ff9f64e234226851c7407 Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 31 Mar 2020 15:54:36 +0100 Subject: [PATCH 2/2] Imports --- .../cluster/coordination/CoordinationStateTests.java | 1 - .../elasticsearch/cluster/coordination/CoordinatorTests.java | 1 - .../cluster/coordination/PreVoteCollectorTests.java | 2 -- 3 files changed, 4 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java index f2407c1fd769c..00e23d9d50992 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinationStateTests.java @@ -31,7 +31,6 @@ import org.elasticsearch.common.UUIDs; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; -import org.elasticsearch.common.util.set.Sets; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.EqualsHashCodeTestUtils; import org.junit.Before; diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java index d395ec5cc43c8..65af20e1c32ab 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java @@ -47,7 +47,6 @@ import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java b/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java index 093e5372dd658..56ae75614a300 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/PreVoteCollectorTests.java @@ -37,14 +37,12 @@ import org.junit.Before; import java.io.IOException; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; import static java.util.Collections.emptySet; import static org.elasticsearch.cluster.coordination.PreVoteCollector.REQUEST_PRE_VOTE_ACTION_NAME;