88
88
import org .opensearch .index .mapper .MapperService ;
89
89
import org .opensearch .index .mapper .MapperService .MergeReason ;
90
90
import org .opensearch .index .query .QueryShardContext ;
91
+ import org .opensearch .index .remote .RemoteStorePathResolver ;
92
+ import org .opensearch .index .remote .RemoteStorePathType ;
91
93
import org .opensearch .index .shard .IndexSettingProvider ;
92
94
import org .opensearch .index .translog .Translog ;
93
95
import org .opensearch .indices .IndexCreationException ;
@@ -167,6 +169,9 @@ public class MetadataCreateIndexService {
167
169
private final ClusterManagerTaskThrottler .ThrottlingKey createIndexTaskKey ;
168
170
private AwarenessReplicaBalance awarenessReplicaBalance ;
169
171
172
+ @ Nullable
173
+ private final RemoteStorePathResolver remoteStorePathResolver ;
174
+
170
175
public MetadataCreateIndexService (
171
176
final Settings settings ,
172
177
final ClusterService clusterService ,
@@ -198,6 +203,9 @@ public MetadataCreateIndexService(
198
203
199
204
// Task is onboarded for throttling, it will get retried from associated TransportClusterManagerNodeAction.
200
205
createIndexTaskKey = clusterService .registerClusterManagerTask (ClusterManagerTaskKeys .CREATE_INDEX_KEY , true );
206
+ remoteStorePathResolver = isRemoteDataAttributePresent (settings )
207
+ ? new RemoteStorePathResolver (clusterService .getClusterSettings ())
208
+ : null ;
201
209
}
202
210
203
211
/**
@@ -498,7 +506,8 @@ private ClusterState applyCreateIndexWithTemporaryService(
498
506
temporaryIndexMeta .getSettings (),
499
507
temporaryIndexMeta .getRoutingNumShards (),
500
508
sourceMetadata ,
501
- temporaryIndexMeta .isSystem ()
509
+ temporaryIndexMeta .isSystem (),
510
+ temporaryIndexMeta .getCustomData ()
502
511
);
503
512
} catch (Exception e ) {
504
513
logger .info ("failed to build index metadata [{}]" , request .index ());
@@ -522,10 +531,11 @@ private ClusterState applyCreateIndexWithTemporaryService(
522
531
523
532
/**
524
533
* Given a state and index settings calculated after applying templates, validate metadata for
525
- * the new index, returning an {@link IndexMetadata} for the new index
534
+ * the new index, returning an {@link IndexMetadata} for the new index.
535
+ * <p>
536
+ * The access level of the method changed to default level for visibility to test.
526
537
*/
527
- private IndexMetadata buildAndValidateTemporaryIndexMetadata (
528
- final ClusterState currentState ,
538
+ IndexMetadata buildAndValidateTemporaryIndexMetadata (
529
539
final Settings aggregatedIndexSettings ,
530
540
final CreateIndexClusterStateUpdateRequest request ,
531
541
final int routingNumShards
@@ -544,6 +554,11 @@ private IndexMetadata buildAndValidateTemporaryIndexMetadata(
544
554
tmpImdBuilder .settings (indexSettings );
545
555
tmpImdBuilder .system (isSystem );
546
556
557
+ if (remoteStorePathResolver != null ) {
558
+ String pathType = remoteStorePathResolver .resolveType ().toString ();
559
+ tmpImdBuilder .putCustom (IndexMetadata .REMOTE_STORE_CUSTOM_KEY , Map .of (RemoteStorePathType .NAME , pathType ));
560
+ }
561
+
547
562
// Set up everything, now locally create the index to see that things are ok, and apply
548
563
IndexMetadata tempMetadata = tmpImdBuilder .build ();
549
564
validateActiveShardCount (request .waitForActiveShards (), tempMetadata );
@@ -582,7 +597,7 @@ private ClusterState applyCreateIndexRequestWithV1Templates(
582
597
clusterService .getClusterSettings ()
583
598
);
584
599
int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , null );
585
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
600
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
586
601
587
602
return applyCreateIndexWithTemporaryService (
588
603
currentState ,
@@ -647,7 +662,7 @@ private ClusterState applyCreateIndexRequestWithV2Template(
647
662
clusterService .getClusterSettings ()
648
663
);
649
664
int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , null );
650
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
665
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
651
666
652
667
return applyCreateIndexWithTemporaryService (
653
668
currentState ,
@@ -728,7 +743,7 @@ private ClusterState applyCreateIndexRequestWithExistingMetadata(
728
743
clusterService .getClusterSettings ()
729
744
);
730
745
final int routingNumShards = getIndexNumberOfRoutingShards (aggregatedIndexSettings , sourceMetadata );
731
- IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (currentState , aggregatedIndexSettings , request , routingNumShards );
746
+ IndexMetadata tmpImd = buildAndValidateTemporaryIndexMetadata (aggregatedIndexSettings , request , routingNumShards );
732
747
733
748
return applyCreateIndexWithTemporaryService (
734
749
currentState ,
@@ -1147,7 +1162,8 @@ static IndexMetadata buildIndexMetadata(
1147
1162
Settings indexSettings ,
1148
1163
int routingNumShards ,
1149
1164
@ Nullable IndexMetadata sourceMetadata ,
1150
- boolean isSystem
1165
+ boolean isSystem ,
1166
+ Map <String , DiffableStringMap > customData
1151
1167
) {
1152
1168
IndexMetadata .Builder indexMetadataBuilder = createIndexMetadataBuilder (indexName , sourceMetadata , indexSettings , routingNumShards );
1153
1169
indexMetadataBuilder .system (isSystem );
@@ -1168,6 +1184,10 @@ static IndexMetadata buildIndexMetadata(
1168
1184
indexMetadataBuilder .putAlias (aliases .get (i ));
1169
1185
}
1170
1186
1187
+ for (Map .Entry <String , DiffableStringMap > entry : customData .entrySet ()) {
1188
+ indexMetadataBuilder .putCustom (entry .getKey (), entry .getValue ());
1189
+ }
1190
+
1171
1191
indexMetadataBuilder .state (IndexMetadata .State .OPEN );
1172
1192
return indexMetadataBuilder .build ();
1173
1193
}
0 commit comments