18
18
*/
19
19
package org .elasticsearch .indices ;
20
20
21
+ import org .elasticsearch .ExceptionsHelper ;
21
22
import org .elasticsearch .action .ActionRequestBuilder ;
22
23
import org .elasticsearch .action .DocWriteRequest ;
23
24
import org .elasticsearch .action .admin .indices .datastream .CreateDataStreamAction ;
60
61
import java .util .Arrays ;
61
62
import java .util .Comparator ;
62
63
import java .util .List ;
64
+ import java .util .Optional ;
63
65
64
66
import static org .elasticsearch .indices .IndicesOptionsIntegrationIT ._flush ;
65
67
import static org .elasticsearch .indices .IndicesOptionsIntegrationIT .clearCache ;
@@ -86,6 +88,8 @@ public class DataStreamIT extends ESIntegTestCase {
86
88
87
89
@ After
88
90
public void deleteAllComposableTemplates () {
91
+ DeleteDataStreamAction .Request deleteDSRequest = new DeleteDataStreamAction .Request ("*" );
92
+ client ().execute (DeleteDataStreamAction .INSTANCE , deleteDSRequest ).actionGet ();
89
93
DeleteComposableIndexTemplateAction .Request deleteTemplateRequest = new DeleteComposableIndexTemplateAction .Request ("*" );
90
94
client ().execute (DeleteComposableIndexTemplateAction .INSTANCE , deleteTemplateRequest ).actionGet ();
91
95
}
@@ -362,6 +366,29 @@ public void testResolvabilityOfDataStreamsInAPIs() throws Exception {
362
366
verifyResolvability (wildcardExpression , client ().admin ().indices ().prepareGetIndex ().addIndices (wildcardExpression ), false );
363
367
}
364
368
369
+ public void testCannotDeleteComposableTemplateUsedByDataStream () throws Exception {
370
+ createIndexTemplate ("id" , "metrics-foobar*" , "@timestamp1" );
371
+ String dataStreamName = "metrics-foobar-baz" ;
372
+ CreateDataStreamAction .Request createDataStreamRequest = new CreateDataStreamAction .Request (dataStreamName );
373
+ client ().admin ().indices ().createDataStream (createDataStreamRequest ).get ();
374
+ createDataStreamRequest = new CreateDataStreamAction .Request (dataStreamName + "-eggplant" );
375
+ client ().admin ().indices ().createDataStream (createDataStreamRequest ).get ();
376
+
377
+ DeleteComposableIndexTemplateAction .Request req = new DeleteComposableIndexTemplateAction .Request ("id" );
378
+ Exception e = expectThrows (Exception .class , () -> client ().execute (DeleteComposableIndexTemplateAction .INSTANCE , req ).get ());
379
+ Optional <Exception > maybeE = ExceptionsHelper .unwrapCausesAndSuppressed (e , err ->
380
+ err .getMessage ().contains ("unable to remove composable templates [id] " +
381
+ "as they are in use by a data streams [metrics-foobar-baz, metrics-foobar-baz-eggplant]" ));
382
+ assertTrue (maybeE .isPresent ());
383
+
384
+ DeleteComposableIndexTemplateAction .Request req2 = new DeleteComposableIndexTemplateAction .Request ("i*" );
385
+ Exception e2 = expectThrows (Exception .class , () -> client ().execute (DeleteComposableIndexTemplateAction .INSTANCE , req2 ).get ());
386
+ maybeE = ExceptionsHelper .unwrapCausesAndSuppressed (e2 , err ->
387
+ err .getMessage ().contains ("unable to remove composable templates [id] " +
388
+ "as they are in use by a data streams [metrics-foobar-baz, metrics-foobar-baz-eggplant]" ));
389
+ assertTrue (maybeE .isPresent ());
390
+ }
391
+
365
392
private static void verifyResolvability (String dataStream , ActionRequestBuilder requestBuilder , boolean fail ) {
366
393
verifyResolvability (dataStream , requestBuilder , fail , 0 );
367
394
}
0 commit comments