1515import  org .elasticsearch .action .admin .cluster .snapshots .create .CreateSnapshotRequest ;
1616import  org .elasticsearch .action .admin .cluster .snapshots .create .CreateSnapshotResponse ;
1717import  org .elasticsearch .action .admin .cluster .snapshots .restore .RestoreSnapshotRequest ;
18+ import  org .elasticsearch .action .admin .cluster .snapshots .restore .RestoreSnapshotRequestBuilder ;
1819import  org .elasticsearch .action .admin .cluster .snapshots .restore .RestoreSnapshotResponse ;
1920import  org .elasticsearch .action .admin .indices .alias .Alias ;
2021import  org .elasticsearch .action .admin .indices .alias .IndicesAliasesRequest ;
4546import  org .elasticsearch .search .SearchHit ;
4647import  org .elasticsearch .snapshots .AbstractSnapshotIntegTestCase ;
4748import  org .elasticsearch .snapshots .RestoreInfo ;
49+ import  org .elasticsearch .snapshots .SnapshotId ;
4850import  org .elasticsearch .snapshots .SnapshotInProgressException ;
4951import  org .elasticsearch .snapshots .SnapshotInfo ;
5052import  org .elasticsearch .snapshots .SnapshotRestoreException ;
6264import  java .util .stream .Collectors ;
6365
6466import  static  org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertAcked ;
67+ import  static  org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertNoWarningHeaderOnResponse ;
6568import  static  org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertResponse ;
69+ import  static  org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertWarningHeaderOnResponse ;
6670import  static  org .hamcrest .Matchers .anEmptyMap ;
6771import  static  org .hamcrest .Matchers .contains ;
6872import  static  org .hamcrest .Matchers .containsInAnyOrder ;
@@ -80,6 +84,8 @@ public class DataStreamsSnapshotsIT extends AbstractSnapshotIntegTestCase {
8084    private  static  final  Map <String , Integer > DOCUMENT_SOURCE  = Collections .singletonMap ("@timestamp" , 123 );
8185    public  static  final  String  REPO  = "repo" ;
8286    public  static  final  String  SNAPSHOT  = "snap" ;
87+     public  static  final  String  TEMPLATE_1_ID  = "t1" ;
88+     public  static  final  String  TEMPLATE_2_ID  = "t2" ;
8389    private  Client  client ;
8490
8591    private  String  dsBackingIndexName ;
@@ -103,8 +109,8 @@ public void setup() throws Exception {
103109        Path  location  = randomRepoPath ();
104110        createRepository (REPO , "fs" , location );
105111
106-         DataStreamIT .putComposableIndexTemplate ("t1" , List .of ("ds" , "other-ds" ));
107-         DataStreamIT .putComposableIndexTemplate ("t2" , """ 
112+         DataStreamIT .putComposableIndexTemplate (TEMPLATE_1_ID , List .of ("ds" , "other-ds" ));
113+         DataStreamIT .putComposableIndexTemplate (TEMPLATE_2_ID , """ 
108114            { 
109115                "properties": { 
110116                  "@timestamp": { 
@@ -1335,4 +1341,100 @@ public void testRestoreDataStreamAliasWithConflictingIndicesAlias() throws Excep
13351341        );
13361342        assertThat (e .getMessage (), containsString ("data stream alias and indices alias have the same name (my-alias)" ));
13371343    }
1344+ 
1345+     public  void  testWarningHeaderOnRestoreWithoutTemplates () throws  Exception  {
1346+         String  datastreamName  = "ds" ;
1347+ 
1348+         CreateSnapshotResponse  createSnapshotResponse  = client .admin ()
1349+             .cluster ()
1350+             .prepareCreateSnapshot (TEST_REQUEST_TIMEOUT , REPO , SNAPSHOT )
1351+             .setWaitForCompletion (true )
1352+             .setIndices (datastreamName )
1353+             .setIncludeGlobalState (false )
1354+             .get ();
1355+ 
1356+         RestStatus  status  = createSnapshotResponse .getSnapshotInfo ().status ();
1357+         SnapshotId  snapshotId  = createSnapshotResponse .getSnapshotInfo ().snapshotId ();
1358+         assertEquals (RestStatus .OK , status );
1359+ 
1360+         assertEquals (Collections .singletonList (dsBackingIndexName ), getSnapshot (REPO , SNAPSHOT ).indices ());
1361+ 
1362+         assertAcked (
1363+             client .execute (
1364+                 DeleteDataStreamAction .INSTANCE ,
1365+                 new  DeleteDataStreamAction .Request (TEST_REQUEST_TIMEOUT , datastreamName , "other-ds" , "with-fs" )
1366+             )
1367+         );
1368+ 
1369+         assertAcked (
1370+             client .execute (
1371+                 TransportDeleteComposableIndexTemplateAction .TYPE ,
1372+                 new  TransportDeleteComposableIndexTemplateAction .Request (TEMPLATE_1_ID )
1373+             ).get ()
1374+         );
1375+ 
1376+         assertAcked (
1377+             client .execute (
1378+                 TransportDeleteComposableIndexTemplateAction .TYPE ,
1379+                 new  TransportDeleteComposableIndexTemplateAction .Request (TEMPLATE_2_ID )
1380+             ).get ()
1381+         );
1382+ 
1383+         RestoreSnapshotRequestBuilder  request  = client .admin ()
1384+             .cluster ()
1385+             .prepareRestoreSnapshot (TEST_REQUEST_TIMEOUT , REPO , SNAPSHOT )
1386+             .setWaitForCompletion (true )
1387+             .setIndices (datastreamName );
1388+ 
1389+         assertWarningHeaderOnResponse (
1390+             client ,
1391+             request ,
1392+             "Snapshot [" 
1393+                 + snapshotId 
1394+                 + "] contains data stream [" 
1395+                 + datastreamName 
1396+                 + "] but custer does not have a matching index " 
1397+                 + "template. This will cause rollover to fail until a matching index template is created" 
1398+         );
1399+ 
1400+     }
1401+ 
1402+     public  void  testWarningHeaderAbsentOnRestoreWithTemplates () throws  Exception  {
1403+         String  datastreamName  = "ds" ;
1404+ 
1405+         CreateSnapshotResponse  createSnapshotResponse  = client .admin ()
1406+             .cluster ()
1407+             .prepareCreateSnapshot (TEST_REQUEST_TIMEOUT , REPO , SNAPSHOT )
1408+             .setWaitForCompletion (true )
1409+             .setIndices (datastreamName )
1410+             .setIncludeGlobalState (false )
1411+             .get ();
1412+ 
1413+         RestStatus  status  = createSnapshotResponse .getSnapshotInfo ().status ();
1414+         SnapshotId  snapshotId  = createSnapshotResponse .getSnapshotInfo ().snapshotId ();
1415+         assertEquals (RestStatus .OK , status );
1416+ 
1417+         assertEquals (Collections .singletonList (dsBackingIndexName ), getSnapshot (REPO , SNAPSHOT ).indices ());
1418+ 
1419+         assertAcked (
1420+             client .execute (
1421+                 DeleteDataStreamAction .INSTANCE ,
1422+                 new  DeleteDataStreamAction .Request (TEST_REQUEST_TIMEOUT , datastreamName , "other-ds" , "with-fs" )
1423+             )
1424+         );
1425+ 
1426+         RestoreSnapshotRequestBuilder  request  = client .admin ()
1427+             .cluster ()
1428+             .prepareRestoreSnapshot (TEST_REQUEST_TIMEOUT , REPO , SNAPSHOT )
1429+             .setWaitForCompletion (true )
1430+             .setIndices (datastreamName );
1431+ 
1432+         assertNoWarningHeaderOnResponse (
1433+             client ,
1434+             request ,
1435+             "but custer does not have a matching index template. This will cause rollover to fail until a matching index " 
1436+                 + "template is created" 
1437+         );
1438+ 
1439+     }
13381440}
0 commit comments