Skip to content
Merged
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,16 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;

public class InternalClusterInfoServiceSchedulingTests extends ESTestCase {

public void testScheduling() {
final DiscoveryNode discoveryNode = DiscoveryNodeUtils.create("test");
final DiscoveryNodes noMaster = DiscoveryNodes.builder().add(discoveryNode).localNodeId(discoveryNode.getId()).build();
final DiscoveryNodes localMaster = noMaster.withMasterNodeId(discoveryNode.getId());
final DiscoveryNode joiner = DiscoveryNodeUtils.create("joiner");
final DiscoveryNodes withJoiner = DiscoveryNodes.builder(localMaster).add(joiner).build();

final Settings.Builder settingsBuilder = Settings.builder()
.put(Node.NODE_NAME_SETTING.getKey(), discoveryNode.getName())
Expand Down Expand Up @@ -129,6 +132,44 @@ public void reroute(String reason, Priority priority, ActionListener<Void> liste
);
runUntilFlag(deterministicTaskQueue, becameMaster1);

// A node joins the cluster
{
Mockito.clearInvocations(mockEstimatedHeapUsageCollector, nodeUsageStatsForThreadPoolsCollector);
final int initialRequestCount = client.requestCount;
final AtomicBoolean nodeJoined = new AtomicBoolean();
clusterApplierService.onNewClusterState(
"node joins",
() -> ClusterState.builder(new ClusterName("cluster")).nodes(withJoiner).build(),
setFlagOnSuccess(nodeJoined)
);
// Don't use runUntilFlag because we don't want the scheduled task to run
deterministicTaskQueue.runAllRunnableTasks();
assertTrue(nodeJoined.get());
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this may be why the existing tests don't assert anything, it feels a little hacky, but this seemed like the right test to add to? Could also implement as an IT

// Addition of node should have triggered refresh
assertThat(client.requestCount, equalTo(initialRequestCount + 2)); // should have run two client requests
verify(mockEstimatedHeapUsageCollector).collectClusterHeapUsage(any()); // Should have polled for heap usage
verify(nodeUsageStatsForThreadPoolsCollector).collectUsageStats(any(), any(), any());
}

// ... then leaves
{
Mockito.clearInvocations(mockEstimatedHeapUsageCollector, nodeUsageStatsForThreadPoolsCollector);
final int initialRequestCount = client.requestCount;
final AtomicBoolean nodeLeft = new AtomicBoolean();
clusterApplierService.onNewClusterState(
"node leaves",
() -> ClusterState.builder(new ClusterName("cluster")).nodes(localMaster).build(),
setFlagOnSuccess(nodeLeft)
);
// Don't use runUntilFlag because we don't want the scheduled task to run
deterministicTaskQueue.runAllRunnableTasks();
assertTrue(nodeLeft.get());
// departing nodes don't trigger refreshes
assertThat(client.requestCount, equalTo(initialRequestCount));
verifyNoInteractions(mockEstimatedHeapUsageCollector);
verifyNoInteractions(nodeUsageStatsForThreadPoolsCollector);
}

final AtomicBoolean failMaster1 = new AtomicBoolean();
clusterApplierService.onNewClusterState(
"fail master 1",
Expand Down