@@ -244,6 +244,7 @@ public Iterator<Setting<Integer>> settings() {
244244 public static final String KEY_IN_SYNC_ALLOCATIONS = "in_sync_allocations" ;
245245 static final String KEY_VERSION = "version" ;
246246 static final String KEY_MAPPING_VERSION = "mapping_version" ;
247+ static final String KEY_SETTINGS_VERSION = "settings_version" ;
247248 static final String KEY_ROUTING_NUM_SHARDS = "routing_num_shards" ;
248249 static final String KEY_SETTINGS = "settings" ;
249250 static final String KEY_STATE = "state" ;
@@ -265,6 +266,8 @@ public Iterator<Setting<Integer>> settings() {
265266
266267 private final long mappingVersion ;
267268
269+ private final long settingsVersion ;
270+
268271 private final long [] primaryTerms ;
269272
270273 private final State state ;
@@ -292,7 +295,7 @@ public Iterator<Setting<Integer>> settings() {
292295 private final ActiveShardCount waitForActiveShards ;
293296 private final ImmutableOpenMap <String , RolloverInfo > rolloverInfos ;
294297
295- private IndexMetaData (Index index , long version , long mappingVersion , long [] primaryTerms , State state , int numberOfShards , int numberOfReplicas , Settings settings ,
298+ private IndexMetaData (Index index , long version , long mappingVersion , long settingsVersion , long [] primaryTerms , State state , int numberOfShards , int numberOfReplicas , Settings settings ,
296299 ImmutableOpenMap <String , MappingMetaData > mappings , ImmutableOpenMap <String , AliasMetaData > aliases ,
297300 ImmutableOpenMap <String , DiffableStringMap > customData , ImmutableOpenIntMap <Set <String >> inSyncAllocationIds ,
298301 DiscoveryNodeFilters requireFilters , DiscoveryNodeFilters initialRecoveryFilters , DiscoveryNodeFilters includeFilters , DiscoveryNodeFilters excludeFilters ,
@@ -303,6 +306,8 @@ private IndexMetaData(Index index, long version, long mappingVersion, long[] pri
303306 this .version = version ;
304307 assert mappingVersion >= 0 : mappingVersion ;
305308 this .mappingVersion = mappingVersion ;
309+ assert settingsVersion >= 0 : settingsVersion ;
310+ this .settingsVersion = settingsVersion ;
306311 this .primaryTerms = primaryTerms ;
307312 assert primaryTerms .length == numberOfShards ;
308313 this .state = state ;
@@ -356,6 +361,10 @@ public long getMappingVersion() {
356361 return mappingVersion ;
357362 }
358363
364+ public long getSettingsVersion () {
365+ return settingsVersion ;
366+ }
367+
359368 /**
360369 * The term of the current selected primary. This is a non-negative number incremented when
361370 * a primary shard is assigned after a full cluster restart or a replica shard is promoted to a primary.
@@ -605,6 +614,7 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
605614 private final int routingNumShards ;
606615 private final long version ;
607616 private final long mappingVersion ;
617+ private final long settingsVersion ;
608618 private final long [] primaryTerms ;
609619 private final State state ;
610620 private final Settings settings ;
@@ -618,6 +628,7 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
618628 index = after .index .getName ();
619629 version = after .version ;
620630 mappingVersion = after .mappingVersion ;
631+ settingsVersion = after .settingsVersion ;
621632 routingNumShards = after .routingNumShards ;
622633 state = after .state ;
623634 settings = after .settings ;
@@ -639,6 +650,11 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
639650 } else {
640651 mappingVersion = 1 ;
641652 }
653+ if (in .getVersion ().onOrAfter (Version .V_6_5_0 )) {
654+ settingsVersion = in .readVLong ();
655+ } else {
656+ settingsVersion = 1 ;
657+ }
642658 state = State .fromId (in .readByte ());
643659 settings = Settings .readSettingsFromStream (in );
644660 primaryTerms = in .readVLongArray ();
@@ -667,6 +683,9 @@ public void writeTo(StreamOutput out) throws IOException {
667683 if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
668684 out .writeVLong (mappingVersion );
669685 }
686+ if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
687+ out .writeVLong (settingsVersion );
688+ }
670689 out .writeByte (state .id );
671690 Settings .writeSettingsToStream (settings , out );
672691 out .writeVLongArray (primaryTerms );
@@ -684,6 +703,7 @@ public IndexMetaData apply(IndexMetaData part) {
684703 Builder builder = builder (index );
685704 builder .version (version );
686705 builder .mappingVersion (mappingVersion );
706+ builder .settingsVersion (settingsVersion );
687707 builder .setRoutingNumShards (routingNumShards );
688708 builder .state (state );
689709 builder .settings (settings );
@@ -705,6 +725,11 @@ public static IndexMetaData readFrom(StreamInput in) throws IOException {
705725 } else {
706726 builder .mappingVersion (1 );
707727 }
728+ if (in .getVersion ().onOrAfter (Version .V_6_5_0 )) {
729+ builder .settingsVersion (in .readVLong ());
730+ } else {
731+ builder .settingsVersion (1 );
732+ }
708733 builder .setRoutingNumShards (in .readInt ());
709734 builder .state (State .fromId (in .readByte ()));
710735 builder .settings (readSettingsFromStream (in ));
@@ -754,6 +779,9 @@ public void writeTo(StreamOutput out) throws IOException {
754779 if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
755780 out .writeVLong (mappingVersion );
756781 }
782+ if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
783+ out .writeVLong (settingsVersion );
784+ }
757785 out .writeInt (routingNumShards );
758786 out .writeByte (state .id ());
759787 writeSettingsToStream (settings , out );
@@ -802,6 +830,7 @@ public static class Builder {
802830 private State state = State .OPEN ;
803831 private long version = 1 ;
804832 private long mappingVersion = 1 ;
833+ private long settingsVersion = 1 ;
805834 private long [] primaryTerms = null ;
806835 private Settings settings = Settings .Builder .EMPTY_SETTINGS ;
807836 private final ImmutableOpenMap .Builder <String , MappingMetaData > mappings ;
@@ -825,6 +854,7 @@ public Builder(IndexMetaData indexMetaData) {
825854 this .state = indexMetaData .state ;
826855 this .version = indexMetaData .version ;
827856 this .mappingVersion = indexMetaData .mappingVersion ;
857+ this .settingsVersion = indexMetaData .settingsVersion ;
828858 this .settings = indexMetaData .getSettings ();
829859 this .primaryTerms = indexMetaData .primaryTerms .clone ();
830860 this .mappings = ImmutableOpenMap .builder (indexMetaData .mappings );
@@ -999,11 +1029,20 @@ public long mappingVersion() {
9991029 return mappingVersion ;
10001030 }
10011031
1032+ public long settingsVersion () {
1033+ return settingsVersion ;
1034+ }
1035+
10021036 public Builder mappingVersion (final long mappingVersion ) {
10031037 this .mappingVersion = mappingVersion ;
10041038 return this ;
10051039 }
10061040
1041+ public Builder settingsVersion (final long settingsVersion ) {
1042+ this .settingsVersion = settingsVersion ;
1043+ return this ;
1044+ }
1045+
10071046 /**
10081047 * returns the primary term for the given shard.
10091048 * See {@link IndexMetaData#primaryTerm(int)} for more information.
@@ -1131,7 +1170,7 @@ public IndexMetaData build() {
11311170
11321171 final String uuid = settings .get (SETTING_INDEX_UUID , INDEX_UUID_NA_VALUE );
11331172
1134- return new IndexMetaData (new Index (index , uuid ), version , mappingVersion , primaryTerms , state , numberOfShards , numberOfReplicas , tmpSettings , mappings .build (),
1173+ return new IndexMetaData (new Index (index , uuid ), version , mappingVersion , settingsVersion , primaryTerms , state , numberOfShards , numberOfReplicas , tmpSettings , mappings .build (),
11351174 tmpAliases .build (), customMetaData .build (), filledInSyncAllocationIds .build (), requireFilters , initialRecoveryFilters , includeFilters , excludeFilters ,
11361175 indexCreatedVersion , indexUpgradedVersion , getRoutingNumShards (), routingPartitionSize , waitForActiveShards , rolloverInfos .build ());
11371176 }
@@ -1141,6 +1180,7 @@ public static void toXContent(IndexMetaData indexMetaData, XContentBuilder build
11411180
11421181 builder .field (KEY_VERSION , indexMetaData .getVersion ());
11431182 builder .field (KEY_MAPPING_VERSION , indexMetaData .getMappingVersion ());
1183+ builder .field (KEY_SETTINGS_VERSION , indexMetaData .getSettingsVersion ());
11441184 builder .field (KEY_ROUTING_NUM_SHARDS , indexMetaData .getRoutingNumShards ());
11451185 builder .field (KEY_STATE , indexMetaData .getState ().toString ().toLowerCase (Locale .ENGLISH ));
11461186
@@ -1214,6 +1254,7 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
12141254 throw new IllegalArgumentException ("expected object but got a " + token );
12151255 }
12161256 boolean mappingVersion = false ;
1257+ boolean settingsVersion = false ;
12171258 while ((token = parser .nextToken ()) != XContentParser .Token .END_OBJECT ) {
12181259 if (token == XContentParser .Token .FIELD_NAME ) {
12191260 currentFieldName = parser .currentName ();
@@ -1308,6 +1349,9 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
13081349 } else if (KEY_MAPPING_VERSION .equals (currentFieldName )) {
13091350 mappingVersion = true ;
13101351 builder .mappingVersion (parser .longValue ());
1352+ } else if (KEY_SETTINGS_VERSION .equals (currentFieldName )) {
1353+ settingsVersion = true ;
1354+ builder .settingsVersion (parser .longValue ());
13111355 } else if (KEY_ROUTING_NUM_SHARDS .equals (currentFieldName )) {
13121356 builder .setRoutingNumShards (parser .intValue ());
13131357 } else {
@@ -1320,6 +1364,9 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
13201364 if (Assertions .ENABLED && Version .indexCreated (builder .settings ).onOrAfter (Version .V_6_5_0 )) {
13211365 assert mappingVersion : "mapping version should be present for indices created on or after 6.5.0" ;
13221366 }
1367+ if (Assertions .ENABLED && Version .indexCreated (builder .settings ).onOrAfter (Version .V_6_5_0 )) {
1368+ assert settingsVersion : "settings version should be present for indices created on or after 6.5.0" ;
1369+ }
13231370 return builder .build ();
13241371 }
13251372 }
0 commit comments