Skip to content

Commit 5214f2b

Browse files
nicktindalljbaiera
authored andcommitted
Test that ClusterInfo is refreshed when a new node is added (elastic#134101)
1 parent 8ce7686 commit 5214f2b

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

server/src/test/java/org/elasticsearch/cluster/InternalClusterInfoServiceSchedulingTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,16 @@
4949
import static org.mockito.ArgumentMatchers.any;
5050
import static org.mockito.Mockito.spy;
5151
import static org.mockito.Mockito.verify;
52+
import static org.mockito.Mockito.verifyNoInteractions;
5253

5354
public class InternalClusterInfoServiceSchedulingTests extends ESTestCase {
5455

5556
public void testScheduling() {
5657
final DiscoveryNode discoveryNode = DiscoveryNodeUtils.create("test");
5758
final DiscoveryNodes noMaster = DiscoveryNodes.builder().add(discoveryNode).localNodeId(discoveryNode.getId()).build();
5859
final DiscoveryNodes localMaster = noMaster.withMasterNodeId(discoveryNode.getId());
60+
final DiscoveryNode joiner = DiscoveryNodeUtils.create("joiner");
61+
final DiscoveryNodes withJoiner = DiscoveryNodes.builder(localMaster).add(joiner).build();
5962

6063
final Settings.Builder settingsBuilder = Settings.builder()
6164
.put(Node.NODE_NAME_SETTING.getKey(), discoveryNode.getName())
@@ -129,6 +132,45 @@ public void reroute(String reason, Priority priority, ActionListener<Void> liste
129132
);
130133
runUntilFlag(deterministicTaskQueue, becameMaster1);
131134

135+
// A node joins the cluster
136+
{
137+
Mockito.clearInvocations(mockEstimatedHeapUsageCollector, nodeUsageStatsForThreadPoolsCollector);
138+
final int initialRequestCount = client.requestCount;
139+
final AtomicBoolean nodeJoined = new AtomicBoolean();
140+
clusterApplierService.onNewClusterState(
141+
"node joins",
142+
() -> ClusterState.builder(new ClusterName("cluster")).nodes(withJoiner).build(),
143+
setFlagOnSuccess(nodeJoined)
144+
);
145+
// Don't use runUntilFlag because we don't want the scheduled task to run
146+
deterministicTaskQueue.runAllRunnableTasks();
147+
assertTrue(nodeJoined.get());
148+
// Addition of node should have triggered refresh
149+
// should have run two client requests: nodes stats request and indices stats request
150+
assertThat(client.requestCount, equalTo(initialRequestCount + 2));
151+
verify(mockEstimatedHeapUsageCollector).collectClusterHeapUsage(any()); // Should have polled for heap usage
152+
verify(nodeUsageStatsForThreadPoolsCollector).collectUsageStats(any(), any(), any());
153+
}
154+
155+
// ... then leaves
156+
{
157+
Mockito.clearInvocations(mockEstimatedHeapUsageCollector, nodeUsageStatsForThreadPoolsCollector);
158+
final int initialRequestCount = client.requestCount;
159+
final AtomicBoolean nodeLeft = new AtomicBoolean();
160+
clusterApplierService.onNewClusterState(
161+
"node leaves",
162+
() -> ClusterState.builder(new ClusterName("cluster")).nodes(localMaster).build(),
163+
setFlagOnSuccess(nodeLeft)
164+
);
165+
// Don't use runUntilFlag because we don't want the scheduled task to run
166+
deterministicTaskQueue.runAllRunnableTasks();
167+
assertTrue(nodeLeft.get());
168+
// departing nodes don't trigger refreshes
169+
assertThat(client.requestCount, equalTo(initialRequestCount));
170+
verifyNoInteractions(mockEstimatedHeapUsageCollector);
171+
verifyNoInteractions(nodeUsageStatsForThreadPoolsCollector);
172+
}
173+
132174
final AtomicBoolean failMaster1 = new AtomicBoolean();
133175
clusterApplierService.onNewClusterState(
134176
"fail master 1",

0 commit comments

Comments
 (0)