@@ -1054,4 +1054,61 @@ private void assertSearchableSnapshotIndexDirectoryExistence(String nodeName, In
10541054            assertTrue ("index cache path should "  + (exists  ? "exist"  : "not exist" ), Files .exists (indexPath ) == exists );
10551055        }, 30 , TimeUnit .SECONDS );
10561056    }
1057+ 
1058+     public  void  testRestoreRemoteSnapshotWithNullShardSizes () throws  Exception  {
1059+         final  String  snapshotName1  = "test-snap-1" ;
1060+         final  String  snapshotName2  = "test-snap-2" ;
1061+         final  String  repoName  = "test-repo" ;
1062+         final  String  indexName1  = "test-idx-1" ;
1063+         final  String  indexName2  = "test-idx-2" ;
1064+         final  Client  client  = client ();
1065+ 
1066+         // Setup cluster with delayed ClusterInfo updates to simulate null shard sizes 
1067+         client .admin ()
1068+             .cluster ()
1069+             .prepareUpdateSettings ()
1070+             .setPersistentSettings (Settings .builder ().put ("cluster.info.update.interval" , "60m" ))
1071+             .get ();
1072+ 
1073+         internalCluster ().ensureAtLeastNumDataNodes (2 );
1074+ 
1075+         createIndexWithDocsAndEnsureGreen (0 , 50 , indexName1 );
1076+         createRepositoryWithSettings (null , repoName );
1077+         takeSnapshot (client , snapshotName1 , repoName , indexName1 );
1078+         deleteIndicesAndEnsureGreen (client , indexName1 );
1079+ 
1080+         createIndexWithDocsAndEnsureGreen (0 , 50 , indexName2 );
1081+         takeSnapshot (client , snapshotName2 , repoName , indexName2 );
1082+         deleteIndicesAndEnsureGreen (client , indexName2 );
1083+ 
1084+         internalCluster ().ensureAtLeastNumWarmNodes (2 );
1085+ 
1086+         RestoreSnapshotRequest  firstRestore  = new  RestoreSnapshotRequest (repoName , snapshotName1 ).indices (indexName1 )
1087+             .storageType (RestoreSnapshotRequest .StorageType .REMOTE_SNAPSHOT )
1088+             .renamePattern ("(.+)" )
1089+             .renameReplacement ("remote-$1" )
1090+             .waitForCompletion (true );
1091+ 
1092+         client .admin ().cluster ().restoreSnapshot (firstRestore ).get ();
1093+         ensureGreen ("remote-"  + indexName1 );
1094+ 
1095+         // Second restore immediately after - ClusterInfo won't have size data for first restore shards 
1096+         RestoreSnapshotRequest  secondRestore  = new  RestoreSnapshotRequest (repoName , snapshotName2 ).indices (indexName2 )
1097+             .storageType (RestoreSnapshotRequest .StorageType .REMOTE_SNAPSHOT )
1098+             .renamePattern ("(.+)" )
1099+             .renameReplacement ("remote-$1" )
1100+             .waitForCompletion (true );
1101+ 
1102+         client .admin ().cluster ().restoreSnapshot (secondRestore ).get ();
1103+         ensureGreen ("remote-"  + indexName2 );
1104+ 
1105+         assertDocCount ("remote-"  + indexName1 , 50L );
1106+         assertDocCount ("remote-"  + indexName2 , 50L );
1107+ 
1108+         client .admin ()
1109+             .cluster ()
1110+             .prepareUpdateSettings ()
1111+             .setPersistentSettings (Settings .builder ().putNull ("cluster.info.update.interval" ))
1112+             .get ();
1113+     }
10571114}
0 commit comments