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
93
import org .opensearch .index .remote .RemoteStorePathType ;
94
+ import org .opensearch .index .remote .RemoteStorePathTypeResolver ;
95
95
import org .opensearch .index .shard .IndexSettingProvider ;
96
96
import org .opensearch .index .translog .Translog ;
97
97
import org .opensearch .indices .IndexCreationException ;
115
115
import java .util .List ;
116
116
import java .util .Locale ;
117
117
import java .util .Map ;
118
+ import java .util .Objects ;
118
119
import java .util .Optional ;
119
120
import java .util .Set ;
120
121
import java .util .concurrent .atomic .AtomicInteger ;
@@ -174,7 +175,7 @@ public class MetadataCreateIndexService {
174
175
private AwarenessReplicaBalance awarenessReplicaBalance ;
175
176
176
177
@ Nullable
177
- private final RemoteStorePathResolver remoteStorePathResolver ;
178
+ private final RemoteStorePathTypeResolver remoteStorePathTypeResolver ;
178
179
179
180
public MetadataCreateIndexService (
180
181
final Settings settings ,
@@ -207,8 +208,8 @@ public MetadataCreateIndexService(
207
208
208
209
// Task is onboarded for throttling, it will get retried from associated TransportClusterManagerNodeAction.
209
210
createIndexTaskKey = clusterService .registerClusterManagerTask (ClusterManagerTaskKeys .CREATE_INDEX_KEY , true );
210
- remoteStorePathResolver = isRemoteDataAttributePresent (settings )
211
- ? new RemoteStorePathResolver (clusterService .getClusterSettings ())
211
+ remoteStorePathTypeResolver = isRemoteDataAttributePresent (settings )
212
+ ? new RemoteStorePathTypeResolver (clusterService .getClusterSettings ())
212
213
: null ;
213
214
}
214
215
@@ -557,7 +558,7 @@ IndexMetadata buildAndValidateTemporaryIndexMetadata(
557
558
tmpImdBuilder .setRoutingNumShards (routingNumShards );
558
559
tmpImdBuilder .settings (indexSettings );
559
560
tmpImdBuilder .system (isSystem );
560
- addRemoteCustomData (tmpImdBuilder );
561
+ addRemoteStorePathTypeInCustomData (tmpImdBuilder , true );
561
562
562
563
// Set up everything, now locally create the index to see that things are ok, and apply
563
564
IndexMetadata tempMetadata = tmpImdBuilder .build ();
@@ -566,17 +567,24 @@ IndexMetadata buildAndValidateTemporaryIndexMetadata(
566
567
return tempMetadata ;
567
568
}
568
569
569
- public void addRemoteCustomData (IndexMetadata .Builder tmpImdBuilder ) {
570
- if (remoteStorePathResolver != null ) {
570
+ /**
571
+ * Adds the remote store path type information in custom data of index metadata.
572
+ *
573
+ * @param tmpImdBuilder index metadata builder.
574
+ * @param assertNullOldType flag to verify that the old remote store path type is null
575
+ */
576
+ public void addRemoteStorePathTypeInCustomData (IndexMetadata .Builder tmpImdBuilder , boolean assertNullOldType ) {
577
+ if (remoteStorePathTypeResolver != null ) {
571
578
// It is possible that remote custom data exists already. In such cases, we need to only update the path type
572
579
// in the remote store custom data map.
573
580
Map <String , String > existingRemoteCustomData = tmpImdBuilder .removeCustom (IndexMetadata .REMOTE_STORE_CUSTOM_KEY );
574
581
Map <String , String > remoteCustomData = existingRemoteCustomData == null
575
582
? new HashMap <>()
576
583
: new HashMap <>(existingRemoteCustomData );
577
584
// Determine the path type for use using the remoteStorePathResolver.
578
- String newPathType = remoteStorePathResolver . resolveType ().toString ();
585
+ String newPathType = remoteStorePathTypeResolver . getType ().toString ();
579
586
String oldPathType = remoteCustomData .put (RemoteStorePathType .NAME , newPathType );
587
+ assert !assertNullOldType || Objects .isNull (oldPathType );
580
588
logger .trace (() -> new ParameterizedMessage ("Added new path type {}, replaced old path type {}" , newPathType , oldPathType ));
581
589
tmpImdBuilder .putCustom (IndexMetadata .REMOTE_STORE_CUSTOM_KEY , remoteCustomData );
582
590
}
0 commit comments