From 5e3b6ab82b8dc8f68f05818cc9e5706e4837c836 Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 31 Mar 2020 19:05:47 +0100 Subject: [PATCH] Use VotingConfiguration#of where possible (#54507) This resolves a longstanding TODO in the cluster coordination subsystem. Relates #32006 --- .../coordination/CoordinationMetadata.java | 1 - .../coordination/CoordinationStateTests.java | 99 +++++++++---------- .../coordination/CoordinatorTests.java | 4 +- .../cluster/coordination/NodeJoinTests.java | 18 ++-- .../coordination/PreVoteCollectorTests.java | 5 +- .../coordination/PublicationTests.java | 13 ++- 6 files changed, 66 insertions(+), 74 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 b73257a7e45..58d788f1df7 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 class CoordinationMetadata implements Writeable, ToXContentFragment { } 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 cd30558efe9..c6fed657c28 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.cluster.node.DiscoveryNodes; 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; @@ -88,7 +87,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +96,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +122,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +171,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +184,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +202,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +220,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +242,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +263,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +282,8 @@ public class CoordinationStateTests extends ESTestCase { } 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 +296,8 @@ public class CoordinationStateTests extends ESTestCase { } 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 +310,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +323,7 @@ public class CoordinationStateTests extends ESTestCase { 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 +336,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +346,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +363,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +380,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +394,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +404,18 @@ public class CoordinationStateTests extends ESTestCase { 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 +425,7 @@ public class CoordinationStateTests extends ESTestCase { 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 +435,7 @@ public class CoordinationStateTests extends ESTestCase { 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 +445,14 @@ public class CoordinationStateTests extends ESTestCase { 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 +460,14 @@ public class CoordinationStateTests extends ESTestCase { 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 +488,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +508,7 @@ public class CoordinationStateTests extends ESTestCase { // 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 +528,7 @@ public class CoordinationStateTests extends ESTestCase { // 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 +541,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +559,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +577,8 @@ public class CoordinationStateTests extends ESTestCase { } 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 +595,8 @@ public class CoordinationStateTests extends ESTestCase { } 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 +613,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +628,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +647,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +662,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +671,7 @@ public class CoordinationStateTests extends ESTestCase { 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 +684,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +704,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +717,7 @@ public class CoordinationStateTests extends ESTestCase { } 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 +749,9 @@ public class CoordinationStateTests extends ESTestCase { 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 94e9b840f5a..d07c111980d 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/CoordinatorTests.java @@ -48,7 +48,6 @@ import org.elasticsearch.test.MockLogAppender; import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -775,8 +774,7 @@ public class CoordinatorTests extends AbstractCoordinatorTestCase { 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 4928f64b935..4508ecebbab 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 class NodeJoinTests extends ESTestCase { 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 29ac585f72a..369e199000c 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.elasticsearch.transport.TransportService; 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; @@ -135,8 +133,7 @@ public class PreVoteCollectorTests extends ESTestCase { } 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 d25619a8427..9ae6b65dc6c 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 @@ public class PublicationTests extends ESTestCase { } 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 class PublicationTests extends ESTestCase { } 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 class PublicationTests extends ESTestCase { } 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 class PublicationTests extends ESTestCase { } 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 class PublicationTests extends ESTestCase { } 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 class PublicationTests extends ESTestCase { } 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());