1
0
Эх сурвалжийг харах

[TEST] Make testNotReadyOnBadFileSettings more reliable (#93058)

Co-authored-by: David Turner <david.turner@elastic.co>
Nikola Grcevski 2 жил өмнө
parent
commit
4abbd4eb91

+ 29 - 1
server/src/internalClusterTest/java/org/elasticsearch/readiness/ReadinessClusterIT.java

@@ -7,9 +7,12 @@
  */
 package org.elasticsearch.readiness;
 
+import org.elasticsearch.action.support.PlainActionFuture;
 import org.elasticsearch.client.internal.Client;
 import org.elasticsearch.cluster.ClusterChangedEvent;
+import org.elasticsearch.cluster.ClusterState;
 import org.elasticsearch.cluster.ClusterStateListener;
+import org.elasticsearch.cluster.ClusterStateUpdateTask;
 import org.elasticsearch.cluster.metadata.ReservedStateErrorMetadata;
 import org.elasticsearch.cluster.metadata.ReservedStateHandlerMetadata;
 import org.elasticsearch.cluster.metadata.ReservedStateMetadata;
@@ -240,7 +243,6 @@ public class ReadinessClusterIT extends ESIntegTestCase implements ReadinessClie
         logger.info("--> New file settings: [{}]", Strings.format(json, version));
     }
 
-    @AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/93036")
     public void testNotReadyOnBadFileSettings() throws Exception {
         internalCluster().setBootstrapMasterNodeIndex(0);
         logger.info("--> start data node / non master node");
@@ -259,6 +261,10 @@ public class ReadinessClusterIT extends ESIntegTestCase implements ReadinessClie
         assertMasterNode(internalCluster().nonMasterClient(), masterNode);
         var savedClusterState = setupClusterStateListenerForError(masterNode);
 
+        // we need this after we setup the listener above, in case the node started and processed
+        // settings before we set our listener to cluster state changes.
+        causeClusterStateUpdate();
+
         FileSettingsService masterFileSettingsService = internalCluster().getInstance(FileSettingsService.class, masterNode);
 
         assertTrue(masterFileSettingsService.watching());
@@ -320,4 +326,26 @@ public class ReadinessClusterIT extends ESIntegTestCase implements ReadinessClie
         ReadinessService s = internalCluster().getInstance(ReadinessService.class, internalCluster().getMasterName());
         tcpReadinessProbeTrue(s);
     }
+
+    private void causeClusterStateUpdate() {
+        PlainActionFuture.get(
+            fut -> internalCluster().getCurrentMasterNodeInstance(ClusterService.class)
+                .submitUnbatchedStateUpdateTask("poke", new ClusterStateUpdateTask() {
+                    @Override
+                    public ClusterState execute(ClusterState currentState) {
+                        return ClusterState.builder(currentState).build();
+                    }
+
+                    @Override
+                    public void onFailure(Exception e) {
+                        assert false : e;
+                    }
+
+                    @Override
+                    public void clusterStateProcessed(ClusterState initialState, ClusterState newState) {
+                        fut.onResponse(null);
+                    }
+                })
+        );
+    }
 }