1717import org .elasticsearch .action .datastreams .GetDataStreamAction ;
1818import org .elasticsearch .action .index .IndexRequest ;
1919import org .elasticsearch .action .support .master .AcknowledgedResponse ;
20+ import org .elasticsearch .cluster .ClusterState ;
21+ import org .elasticsearch .cluster .ClusterStateUpdateTask ;
2022import org .elasticsearch .cluster .metadata .ComposableIndexTemplate ;
2123import org .elasticsearch .cluster .metadata .DataStream ;
24+ import org .elasticsearch .cluster .service .ClusterService ;
2225import org .elasticsearch .plugins .Plugin ;
2326import org .elasticsearch .test .ESIntegTestCase ;
24- import org .elasticsearch .test .disruption .IntermittentLongGCDisruption ;
25- import org .elasticsearch .test .disruption .SingleNodeDisruption ;
2627import org .elasticsearch .xcontent .XContentType ;
2728
2829import java .util .Collection ;
2930import java .util .List ;
3031import java .util .concurrent .CountDownLatch ;
32+ import java .util .concurrent .CyclicBarrier ;
3133import java .util .concurrent .ExecutionException ;
3234
3335import static org .hamcrest .Matchers .equalTo ;
@@ -42,25 +44,38 @@ protected Collection<Class<? extends Plugin>> nodePlugins() {
4244 }
4345
4446 public void testRolloverIsExecutedOnce () throws ExecutionException , InterruptedException {
45- String masterNode = internalCluster ().startMasterOnlyNode ();
47+ internalCluster ().startMasterOnlyNode ();
4648 internalCluster ().startDataOnlyNodes (3 );
4749 ensureStableCluster (4 );
4850
4951 String dataStreamName = "my-data-stream" ;
5052 createDataStream (dataStreamName );
5153
5254 // Mark it to lazy rollover
53- new RolloverRequestBuilder (client ()).setRolloverTarget (dataStreamName ).lazy (true ).execute (). get ( );
55+ safeGet ( new RolloverRequestBuilder (client ()).setRolloverTarget (dataStreamName ).lazy (true ).execute ());
5456
5557 // Verify that the data stream is marked for rollover and that it has currently one index
5658 DataStream dataStream = getDataStream (dataStreamName );
5759 assertThat (dataStream .rolloverOnWrite (), equalTo (true ));
5860 assertThat (dataStream .getBackingIndices ().getIndices ().size (), equalTo (1 ));
5961
6062 // Introduce a disruption to the master node that should delay the rollover execution
61- SingleNodeDisruption masterNodeDisruption = new IntermittentLongGCDisruption (random (), masterNode , 100 , 200 , 30000 , 60000 );
62- internalCluster ().setDisruptionScheme (masterNodeDisruption );
63- masterNodeDisruption .startDisrupting ();
63+ final var barrier = new CyclicBarrier (2 );
64+ internalCluster ().getCurrentMasterNodeInstance (ClusterService .class )
65+ .submitUnbatchedStateUpdateTask ("block" , new ClusterStateUpdateTask () {
66+ @ Override
67+ public ClusterState execute (ClusterState currentState ) {
68+ safeAwait (barrier );
69+ safeAwait (barrier );
70+ return currentState ;
71+ }
72+
73+ @ Override
74+ public void onFailure (Exception e ) {
75+ fail (e );
76+ }
77+ });
78+ safeAwait (barrier );
6479
6580 // Start indexing operations
6681 int docs = randomIntBetween (5 , 10 );
@@ -83,10 +98,10 @@ public void onFailure(Exception e) {
8398 }
8499
85100 // End the disruption so that all pending tasks will complete
86- masterNodeDisruption . stopDisrupting ( );
101+ safeAwait ( barrier );
87102
88103 // Wait for all the indexing requests to be processed successfully
89- countDownLatch . await ( );
104+ safeAwait ( countDownLatch );
90105
91106 // Verify that the rollover has happened once
92107 dataStream = getDataStream (dataStreamName );
@@ -95,8 +110,7 @@ public void onFailure(Exception e) {
95110 }
96111
97112 private DataStream getDataStream (String dataStreamName ) {
98- return client ().execute (GetDataStreamAction .INSTANCE , new GetDataStreamAction .Request (new String [] { dataStreamName }))
99- .actionGet ()
113+ return safeGet (client ().execute (GetDataStreamAction .INSTANCE , new GetDataStreamAction .Request (new String [] { dataStreamName })))
100114 .getDataStreams ()
101115 .get (0 )
102116 .getDataStream ();
@@ -111,15 +125,15 @@ private void createDataStream(String dataStreamName) throws InterruptedException
111125 .dataStreamTemplate (new ComposableIndexTemplate .DataStreamTemplate (false , false ))
112126 .build ()
113127 );
114- final AcknowledgedResponse putComposableTemplateResponse = client ().execute (
115- TransportPutComposableIndexTemplateAction .TYPE ,
116- putComposableTemplateRequest
117- ).actionGet ();
128+ final AcknowledgedResponse putComposableTemplateResponse = safeGet (
129+ client ().execute (TransportPutComposableIndexTemplateAction .TYPE , putComposableTemplateRequest )
130+ );
118131 assertThat (putComposableTemplateResponse .isAcknowledged (), is (true ));
119132
120133 final CreateDataStreamAction .Request createDataStreamRequest = new CreateDataStreamAction .Request (dataStreamName );
121- final AcknowledgedResponse createDataStreamResponse = client ().execute (CreateDataStreamAction .INSTANCE , createDataStreamRequest )
122- .get ();
134+ final AcknowledgedResponse createDataStreamResponse = safeGet (
135+ client ().execute (CreateDataStreamAction .INSTANCE , createDataStreamRequest )
136+ );
123137 assertThat (createDataStreamResponse .isAcknowledged (), is (true ));
124138 }
125139}
0 commit comments