Skip to content

Commit 526acba

Browse files
committed
Do not include any extra nodes in the bootstrap configuration
1 parent 2ff94a0 commit 526acba

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

server/src/main/java/org/elasticsearch/cluster/coordination/ClusterBootstrapService.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.Collections;
3535
import java.util.HashSet;
3636
import java.util.List;
37+
import java.util.Optional;
3738
import java.util.Set;
3839
import java.util.concurrent.atomic.AtomicBoolean;
3940
import java.util.function.Consumer;
@@ -84,18 +85,16 @@ void onFoundPeersUpdated() {
8485
if (transportService.getLocalNode().isMasterNode() && initialMasterNodes.isEmpty() == false
8586
&& nodes.stream().noneMatch(Coordinator::isZen1Node)) {
8687

87-
final boolean waitRequirementsPassed;
88+
final Optional<Set<DiscoveryNode>> nodesMatchingRequirements;
8889
try {
89-
waitRequirementsPassed = checkWaitRequirements(nodes);
90+
nodesMatchingRequirements = getNodesMatchingRequirements(nodes);
9091
} catch (IllegalStateException e) {
9192
logger.warn("bootstrapping cancelled", e);
9293
bootstrappingPermitted.set(false);
9394
return;
9495
}
9596

96-
if (waitRequirementsPassed) {
97-
startBootstrap(nodes);
98-
}
97+
nodesMatchingRequirements.ifPresent(this::startBootstrap);
9998
}
10099
}
101100

@@ -160,14 +159,14 @@ private static boolean matchesRequirement(DiscoveryNode discoveryNode, String re
160159
|| discoveryNode.getAddress().getAddress().equals(requirement);
161160
}
162161

163-
private boolean checkWaitRequirements(Set<DiscoveryNode> nodes) {
162+
private Optional<Set<DiscoveryNode>> getNodesMatchingRequirements(Set<DiscoveryNode> nodes) {
164163
final Set<DiscoveryNode> selectedNodes = new HashSet<>();
165164
for (final String requirement : initialMasterNodes) {
166165
final Set<DiscoveryNode> matchingNodes
167166
= nodes.stream().filter(n -> matchesRequirement(n, requirement)).collect(Collectors.toSet());
168167

169168
if (matchingNodes.isEmpty()) {
170-
return false;
169+
return Optional.empty();
171170
}
172171
if (matchingNodes.size() > 1) {
173172
throw new IllegalStateException("requirement [" + requirement + "] matches multiple nodes: " + matchingNodes);
@@ -181,6 +180,6 @@ private boolean checkWaitRequirements(Set<DiscoveryNode> nodes) {
181180
}
182181
}
183182

184-
return true;
183+
return Optional.of(Collections.unmodifiableSet(selectedNodes));
185184
}
186185
}

server/src/test/java/org/elasticsearch/cluster/coordination/ClusterBootstrapServiceTests.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
import static org.elasticsearch.node.Node.NODE_NAME_SETTING;
4949
import static org.hamcrest.Matchers.equalTo;
5050
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
51+
import static org.hamcrest.Matchers.hasItem;
5152
import static org.hamcrest.Matchers.hasSize;
53+
import static org.hamcrest.Matchers.not;
5254

5355
public class ClusterBootstrapServiceTests extends ESTestCase {
5456

@@ -329,4 +331,19 @@ public void testDoesNotJustMatchEverything() {
329331
clusterBootstrapService.onFoundPeersUpdated();
330332
deterministicTaskQueue.runAllTasks();
331333
}
332-
}
334+
335+
public void testDoesNotIncludeExtraNodes() {
336+
final DiscoveryNode extraNode = newDiscoveryNode("extra-node");
337+
final AtomicBoolean bootstrapped = new AtomicBoolean();
338+
ClusterBootstrapService clusterBootstrapService = new ClusterBootstrapService(Settings.builder().putList(
339+
INITIAL_MASTER_NODES_SETTING.getKey(), localNode.getName(), otherNode1.getName(), otherNode2.getName()).build(),
340+
transportService, () -> Stream.of(otherNode1, otherNode2, extraNode).collect(Collectors.toList()), vc -> {
341+
assertTrue(bootstrapped.compareAndSet(false, true));
342+
assertThat(vc.getNodeIds(), not(hasItem(extraNode.getId())));
343+
});
344+
345+
transportService.start();
346+
clusterBootstrapService.onFoundPeersUpdated();
347+
deterministicTaskQueue.runAllTasks();
348+
assertTrue(bootstrapped.get());
349+
}}

0 commit comments

Comments
 (0)