90
90
import org .opensearch .index .mapper .MapperService ;
91
91
import org .opensearch .index .mapper .MapperService .MergeReason ;
92
92
import org .opensearch .index .query .QueryShardContext ;
93
+ import org .opensearch .index .remote .RemoteStorePathResolver ;
94
+ import org .opensearch .index .remote .RemoteStorePathType ;
93
95
import org .opensearch .index .shard .IndexSettingProvider ;
94
96
import org .opensearch .index .translog .Translog ;
95
97
import org .opensearch .indices .IndexCreationException ;
@@ -171,6 +173,9 @@ public class MetadataCreateIndexService {
171
173
private final ClusterManagerTaskThrottler .ThrottlingKey createIndexTaskKey ;
172
174
private AwarenessReplicaBalance awarenessReplicaBalance ;
173
175
176
+ @ Nullable
177
+ private final RemoteStorePathResolver remoteStorePathResolver ;
178
+
174
179
public MetadataCreateIndexService (
175
180
final Settings settings ,
176
181
final ClusterService clusterService ,
@@ -202,6 +207,9 @@ public MetadataCreateIndexService(
202
207
203
208
// Task is onboarded for throttling, it will get retried from associated TransportClusterManagerNodeAction.
204
209
createIndexTaskKey = clusterService .registerClusterManagerTask (ClusterManagerTaskKeys .CREATE_INDEX_KEY , true );
210
+ remoteStorePathResolver = isRemoteDataAttributePresent (settings )
211
+ ? new RemoteStorePathResolver (clusterService .getClusterSettings ())
212
+ : null ;
205
213
}
206
214
207
215
/**
@@ -502,7 +510,8 @@ private ClusterState applyCreateIndexWithTemporaryService(
502
510
temporaryIndexMeta .getSettings (),
503
511
temporaryIndexMeta .getRoutingNumShards (),
504
512
sourceMetadata ,
505
- temporaryIndexMeta .isSystem ()
513
+ temporaryIndexMeta .isSystem (),
514
+ temporaryIndexMeta .getCustomData ()
506
515
);
507
516
} catch (Exception e ) {
508
517
logger .info ("failed to build index metadata [{}]" , request .index ());
@@ -526,10 +535,11 @@ private ClusterState applyCreateIndexWithTemporaryService(
526
535
527
536
/**
528
537
* Given a state and index settings calculated after applying templates, validate metadata for
529
- * the new index, returning an {@link IndexMetadata} for the new index
538
+ * the new index, returning an {@link IndexMetadata} for the new index.
539
+ * <p>
540
+ * The access level of the method changed to default level for visibility to test.
530
541
*/
531
- private IndexMetadata buildAndValidateTemporaryIndexMetadata (
532
- final ClusterState currentState ,
542
+ IndexMetadata buildAndValidateTemporaryIndexMetadata (
533
543
final Settings aggregatedIndexSettings ,
534
544
final CreateIndexClusterStateUpdateRequest request ,
535
545
final int routingNumShards
@@ -548,6 +558,11 @@ private IndexMetadata buildAndValidateTemporaryIndexMetadata(
548
558
tmpImdBuilder .settings (indexSettings );
549
559
tmpImdBuilder .system (isSystem );
550
560
561
+ if (remoteStorePathResolver != null ) {
562
+ String pathType = remoteStorePathResolver .resolveType ().toString ();
563
+ tmpImdBuilder .putCustom (IndexMetadata .REMOTE_STORE_CUSTOM_KEY , Map .of (RemoteStorePathType .NAME , pathType ));
564
+ }
565
+
551
566
// Set up everything, now locally create the index to see that things are ok, and apply
552
567
IndexMetadata tempMetadata = tmpImdBuilder .build ();
553
568
validateActiveShardCount (request .waitForActiveShards (), tempMetadata );
@@ -586,7 +601,7 @@ private ClusterState applyCreateIndexRequestWithV1Templates(
586
601
clusterService .getClusterSettings ()
587
602
);
588
603
int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , null );
589
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
604
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
590
605
591
606
return applyCreateIndexWithTemporaryService (
592
607
currentState ,
@@ -651,7 +666,7 @@ private ClusterState applyCreateIndexRequestWithV2Template(
651
666
clusterService .getClusterSettings ()
652
667
);
653
668
int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , null );
654
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
669
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
655
670
656
671
return applyCreateIndexWithTemporaryService (
657
672
currentState ,
@@ -732,7 +747,7 @@ private ClusterState applyCreateIndexRequestWithExistingMetadata(
732
747
clusterService .getClusterSettings ()
733
748
);
734
749
final int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , sourceMetadata );
735
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
750
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
736
751
737
752
return applyCreateIndexWithTemporaryService (
738
753
currentState ,
@@ -1203,7 +1218,8 @@ static IndexMetadata buildIndexMetadata(
1203
1218
Settings indexSettings ,
1204
1219
int routingNumShards ,
1205
1220
@ Nullable IndexMetadata sourceMetadata ,
1206
- boolean isSystem
1221
+ boolean isSystem ,
1222
+ Map <String , DiffableStringMap > customData
1207
1223
) {
1208
1224
IndexMetadata .Builder indexMetadataBuilder = createIndexMetadataBuilder (indexName , sourceMetadata , indexSettings , routingNumShards );
1209
1225
indexMetadataBuilder .system (isSystem );
@@ -1224,6 +1240,10 @@ static IndexMetadata buildIndexMetadata(
1224
1240
indexMetadataBuilder .putAlias (aliases .get (i ));
1225
1241
}
1226
1242
1243
+ for (Map .Entry <String , DiffableStringMap > entry : customData .entrySet ()) {
1244
+ indexMetadataBuilder .putCustom (entry .getKey (), entry .getValue ());
1245
+ }
1246
+
1227
1247
indexMetadataBuilder .state (IndexMetadata .State .OPEN );
1228
1248
return indexMetadataBuilder .build ();
1229
1249
}
0 commit comments