Skip to content

Commit 2a541b0

Browse files
Adds nodeExistsWithName method
1 parent 4b97f07 commit 2a541b0

File tree

3 files changed

+62
-25
lines changed

3 files changed

+62
-25
lines changed

server/src/internalClusterTest/java/org/elasticsearch/cluster/coordination/NodeJoiningIT.java

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@
1010
package org.elasticsearch.cluster.coordination;
1111

1212
import org.elasticsearch.cluster.ClusterState;
13-
import org.elasticsearch.cluster.node.DiscoveryNode;
1413
import org.elasticsearch.common.util.CollectionUtils;
1514
import org.elasticsearch.plugins.Plugin;
1615
import org.elasticsearch.test.ESIntegTestCase;
1716
import org.elasticsearch.test.transport.MockTransportService;
1817

1918
import java.util.Collection;
20-
import java.util.List;
21-
import java.util.Set;
22-
import java.util.stream.Collectors;
2319

2420
@ESIntegTestCase.ClusterScope(
2521
scope = ESIntegTestCase.Scope.TEST,
@@ -52,13 +48,9 @@ public void testNodeJoinsCluster() {
5248
assertEquals(2, state.nodes().getDataNodes().size());
5349
assertEquals(1, state.nodes().getMasterNodes().size());
5450

55-
assertEquals(masterNodeName, state.nodes().getMasterNode().getName());
56-
Set<String> allDataNodeNames = state.nodes().getDataNodes().values()
57-
.stream()
58-
.map(DiscoveryNode::getName)
59-
.collect(Collectors.toSet());
60-
assertTrue(allDataNodeNames.contains(dataNodeName));
61-
assertTrue(allDataNodeNames.contains(newNodeName));
51+
assertEquals(masterNodeName, internalCluster().getMasterName());
52+
assertTrue(state.nodes().nodeExistsWithName(dataNodeName));
53+
assertTrue(state.nodes().nodeExistsWithName(newNodeName));
6254
}
6355

6456
public void testNodeFailsToJoinClusterWhenMasterNodeCannotPublishState() {
@@ -83,13 +75,9 @@ public void testNodeFailsToJoinClusterWhenMasterNodeCannotPublishState() {
8375
assertEquals(1, state.nodes().getMasterNodes().size());
8476

8577
// Assert the only nodes in the cluster are the original ones
86-
assertEquals(masterNodeName, state.nodes().getMasterNode().getName());
87-
List<String> allDataNodeNames = state.nodes().getDataNodes().values()
88-
.stream()
89-
.map(DiscoveryNode::getName)
90-
.toList();
91-
assertTrue(allDataNodeNames.contains(dataNodeName));
92-
assertFalse(allDataNodeNames.contains(newNodeName));
78+
assertEquals(masterNodeName, internalCluster().getMasterName());
79+
assertTrue(state.nodes().nodeExistsWithName(dataNodeName));
80+
assertFalse(state.nodes().nodeExistsWithName(newNodeName));
9381

9482
masterNodeTransportService.clearAllRules();
9583
}
@@ -117,13 +105,9 @@ public void testNodeFailsToJoinClusterWhenDataNodeCannotReceiveState() {
117105
assertEquals(1, state.nodes().getMasterNodes().size());
118106

119107
// Assert the only nodes in the cluster are the original ones
120-
assertEquals(masterNodeName, state.nodes().getMasterNode().getName());
121-
List<String> allDataNodeNames = state.nodes().getDataNodes().values()
122-
.stream()
123-
.map(DiscoveryNode::getName)
124-
.toList();
125-
assertTrue(allDataNodeNames.contains(dataNodeName));
126-
assertFalse(allDataNodeNames.contains(newNodeName));
108+
assertEquals(masterNodeName, internalCluster().getMasterName());
109+
assertTrue(state.nodes().nodeExistsWithName(dataNodeName));
110+
assertFalse(state.nodes().nodeExistsWithName(newNodeName));
127111

128112
dataNodeTransportService.clearAllRules();
129113
}

server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,22 @@ public boolean nodeExists(DiscoveryNode node) {
267267
return existing != null && existing.equals(node);
268268
}
269269

270+
/**
271+
* Determine if a given node exists
272+
*
273+
* @param name of the node which existence should be verified
274+
* @return <code>true</code> if the node exists. Otherwise <code>false</code>
275+
*/
276+
public boolean nodeExistsWithName(String name) {
277+
for (DiscoveryNode node : nodes.values()) {
278+
if (node.getName().equals(name)) {
279+
return true;
280+
}
281+
}
282+
return false;
283+
}
284+
285+
270286
/**
271287
* Determine if the given node exists and has the right roles. Supported roles vary by version, and our local cluster state might
272288
* have come via an older master, so the roles may differ even if the node is otherwise identical.

server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodesTests.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.elasticsearch.index.IndexVersions;
1919
import org.elasticsearch.test.ESTestCase;
2020
import org.elasticsearch.test.VersionUtils;
21+
import org.junit.Before;
2122

2223
import java.io.IOException;
2324
import java.util.ArrayList;
@@ -523,4 +524,40 @@ public void accept(Consumer<DiscoveryNodes.Builder> update, long expectedGenerat
523524
testHarness.accept(builder -> builder.add(node5).add(node6).add(node7), 1L);
524525
testHarness.accept(builder -> builder.remove(node5).remove(node6).remove(node7), 2L);
525526
}
527+
528+
private final DiscoveryNode node1 = DiscoveryNodeUtils.create("node-1", "NodeOne");
529+
private final DiscoveryNode node2 = DiscoveryNodeUtils.create("node-2", "NodeTwo");
530+
private final DiscoveryNodes discoveryNodes = DiscoveryNodes.builder()
531+
.add(node1)
532+
.add(node2)
533+
.build();
534+
535+
public void testNodeExistsById() {
536+
assertTrue(discoveryNodes.nodeExists("NodeOne"));
537+
assertTrue(discoveryNodes.nodeExists("NodeTwo"));
538+
assertFalse(discoveryNodes.nodeExists("NodeThree"));
539+
}
540+
541+
public void testNodeExistsByNode() {
542+
// Exact node object
543+
assertTrue(discoveryNodes.nodeExists(node1));
544+
545+
// A different node but with same id and name
546+
DiscoveryNode node1Copy = DiscoveryNodeUtils.create("node-1", "NodeOne");
547+
assertFalse(discoveryNodes.nodeExists(node1Copy));
548+
549+
// Node with same id but different name
550+
DiscoveryNode node1Different = DiscoveryNodeUtils.create("node-1", "DifferentName");
551+
assertFalse(discoveryNodes.nodeExists(node1Different));
552+
553+
// Node with id not in map
554+
DiscoveryNode node3 = DiscoveryNodeUtils.create("node-3", "NodeThree");
555+
assertFalse(discoveryNodes.nodeExists(node3));
556+
}
557+
558+
public void testNodeExistsWithName() {
559+
assertTrue(discoveryNodes.nodeExistsWithName("node-1"));
560+
assertTrue(discoveryNodes.nodeExistsWithName("node-2"));
561+
assertFalse(discoveryNodes.nodeExistsWithName("node-3"));
562+
}
526563
}

0 commit comments

Comments
 (0)