Skip to content

Commit 40548ec

Browse files
committed
Fix Flaky Test SpecificClusterManagerNodesIT.testElectOnlyBetweenClusterManagerNodes
Signed-off-by: kkewwei <kewei.11@bytedance.com> Signed-off-by: kkewwei <kkewwei@163.com>
1 parent f9c239d commit 40548ec

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

server/src/internalClusterTest/java/org/opensearch/cluster/SpecificClusterManagerNodesIT.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.opensearch.test.OpenSearchIntegTestCase.Scope;
4545

4646
import java.io.IOException;
47+
import java.util.function.Supplier;
4748

4849
import static org.opensearch.test.NodeRoles.clusterManagerNode;
4950
import static org.opensearch.test.NodeRoles.dataOnlyNode;
@@ -254,9 +255,9 @@ public void testElectOnlyBetweenClusterManagerNodes() throws Exception {
254255
logger.info("--> closing cluster-manager node (1)");
255256
client().execute(AddVotingConfigExclusionsAction.INSTANCE, new AddVotingConfigExclusionsRequest(clusterManagerNodeName)).get();
256257
// removing the cluster-manager from the voting configuration immediately triggers the cluster-manager to step down
257-
assertBusy(() -> {
258-
assertThat(
259-
internalCluster().nonClusterManagerClient()
258+
Supplier<String> getClusterManagerIfElected = () -> {
259+
try {
260+
return internalCluster().nonClusterManagerClient()
260261
.admin()
261262
.cluster()
262263
.prepareState()
@@ -265,9 +266,14 @@ public void testElectOnlyBetweenClusterManagerNodes() throws Exception {
265266
.getState()
266267
.nodes()
267268
.getClusterManagerNode()
268-
.getName(),
269-
equalTo(nextClusterManagerEligableNodeName)
270-
);
269+
.getName();
270+
} catch (ClusterManagerNotDiscoveredException e) {
271+
logger.debug("failed to get cluster-manager name", e);
272+
return null;
273+
}
274+
};
275+
assertBusy(() -> {
276+
assertThat(getClusterManagerIfElected.get(), equalTo(nextClusterManagerEligableNodeName));
271277
assertThat(
272278
internalCluster().clusterManagerClient()
273279
.admin()

test/framework/src/main/java/org/opensearch/test/InternalTestCluster.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
import org.opensearch.core.index.shard.ShardId;
9090
import org.opensearch.core.indices.breaker.CircuitBreakerService;
9191
import org.opensearch.core.util.FileSystemUtils;
92+
import org.opensearch.discovery.ClusterManagerNotDiscoveredException;
9293
import org.opensearch.env.Environment;
9394
import org.opensearch.env.NodeEnvironment;
9495
import org.opensearch.env.ShardLockObtainFailedException;
@@ -2168,7 +2169,13 @@ public String getClusterManagerName() {
21682169
public String getClusterManagerName(@Nullable String viaNode) {
21692170
try {
21702171
Client client = viaNode != null ? client(viaNode) : client();
2171-
return client.admin().cluster().prepareState().get().getState().nodes().getClusterManagerNode().getName();
2172+
DiscoveryNode masterNode = client.admin().cluster().prepareState().get().getState().nodes().getClusterManagerNode();
2173+
if (masterNode == null) {
2174+
throw new ClusterManagerNotDiscoveredException("Cluster manager node not discovered");
2175+
}
2176+
return masterNode.getName();
2177+
} catch (ClusterManagerNotDiscoveredException exception) {
2178+
throw exception;
21722179
} catch (Exception e) {
21732180
logger.warn("Can't fetch cluster state", e);
21742181
throw new RuntimeException("Can't get cluster-manager node " + e.getMessage(), e);

0 commit comments

Comments
 (0)