@@ -243,6 +243,7 @@ public Iterator<Setting<Integer>> settings() {
243243 public static final String KEY_IN_SYNC_ALLOCATIONS = "in_sync_allocations" ;
244244 static final String KEY_VERSION = "version" ;
245245 static final String KEY_MAPPING_VERSION = "mapping_version" ;
246+ static final String KEY_SETTINGS_VERSION = "settings_version" ;
246247 static final String KEY_ROUTING_NUM_SHARDS = "routing_num_shards" ;
247248 static final String KEY_SETTINGS = "settings" ;
248249 static final String KEY_STATE = "state" ;
@@ -264,6 +265,8 @@ public Iterator<Setting<Integer>> settings() {
264265
265266 private final long mappingVersion ;
266267
268+ private final long settingsVersion ;
269+
267270 private final long [] primaryTerms ;
268271
269272 private final State state ;
@@ -291,7 +294,7 @@ public Iterator<Setting<Integer>> settings() {
291294 private final ActiveShardCount waitForActiveShards ;
292295 private final ImmutableOpenMap <String , RolloverInfo > rolloverInfos ;
293296
294- private IndexMetaData (Index index , long version , long mappingVersion , long [] primaryTerms , State state , int numberOfShards , int numberOfReplicas , Settings settings ,
297+ private IndexMetaData (Index index , long version , long mappingVersion , long settingsVersion , long [] primaryTerms , State state , int numberOfShards , int numberOfReplicas , Settings settings ,
295298 ImmutableOpenMap <String , MappingMetaData > mappings , ImmutableOpenMap <String , AliasMetaData > aliases ,
296299 ImmutableOpenMap <String , DiffableStringMap > customData , ImmutableOpenIntMap <Set <String >> inSyncAllocationIds ,
297300 DiscoveryNodeFilters requireFilters , DiscoveryNodeFilters initialRecoveryFilters , DiscoveryNodeFilters includeFilters , DiscoveryNodeFilters excludeFilters ,
@@ -302,6 +305,8 @@ private IndexMetaData(Index index, long version, long mappingVersion, long[] pri
302305 this .version = version ;
303306 assert mappingVersion >= 0 : mappingVersion ;
304307 this .mappingVersion = mappingVersion ;
308+ assert settingsVersion >= 0 : settingsVersion ;
309+ this .settingsVersion = settingsVersion ;
305310 this .primaryTerms = primaryTerms ;
306311 assert primaryTerms .length == numberOfShards ;
307312 this .state = state ;
@@ -355,6 +360,10 @@ public long getMappingVersion() {
355360 return mappingVersion ;
356361 }
357362
363+ public long getSettingsVersion () {
364+ return settingsVersion ;
365+ }
366+
358367 /**
359368 * The term of the current selected primary. This is a non-negative number incremented when
360369 * a primary shard is assigned after a full cluster restart or a replica shard is promoted to a primary.
@@ -596,6 +605,7 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
596605 private final int routingNumShards ;
597606 private final long version ;
598607 private final long mappingVersion ;
608+ private final long settingsVersion ;
599609 private final long [] primaryTerms ;
600610 private final State state ;
601611 private final Settings settings ;
@@ -609,6 +619,7 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
609619 index = after .index .getName ();
610620 version = after .version ;
611621 mappingVersion = after .mappingVersion ;
622+ settingsVersion = after .settingsVersion ;
612623 routingNumShards = after .routingNumShards ;
613624 state = after .state ;
614625 settings = after .settings ;
@@ -630,6 +641,11 @@ private static class IndexMetaDataDiff implements Diff<IndexMetaData> {
630641 } else {
631642 mappingVersion = 1 ;
632643 }
644+ if (in .getVersion ().onOrAfter (Version .V_7_0_0_alpha1 )) {
645+ settingsVersion = in .readVLong ();
646+ } else {
647+ settingsVersion = 1 ;
648+ }
633649 state = State .fromId (in .readByte ());
634650 settings = Settings .readSettingsFromStream (in );
635651 primaryTerms = in .readVLongArray ();
@@ -658,6 +674,9 @@ public void writeTo(StreamOutput out) throws IOException {
658674 if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
659675 out .writeVLong (mappingVersion );
660676 }
677+ if (out .getVersion ().onOrAfter (Version .V_7_0_0_alpha1 )) {
678+ out .writeVLong (settingsVersion );
679+ }
661680 out .writeByte (state .id );
662681 Settings .writeSettingsToStream (settings , out );
663682 out .writeVLongArray (primaryTerms );
@@ -675,6 +694,7 @@ public IndexMetaData apply(IndexMetaData part) {
675694 Builder builder = builder (index );
676695 builder .version (version );
677696 builder .mappingVersion (mappingVersion );
697+ builder .settingsVersion (settingsVersion );
678698 builder .setRoutingNumShards (routingNumShards );
679699 builder .state (state );
680700 builder .settings (settings );
@@ -696,6 +716,11 @@ public static IndexMetaData readFrom(StreamInput in) throws IOException {
696716 } else {
697717 builder .mappingVersion (1 );
698718 }
719+ if (in .getVersion ().onOrAfter (Version .V_7_0_0_alpha1 )) {
720+ builder .settingsVersion (in .readVLong ());
721+ } else {
722+ builder .settingsVersion (1 );
723+ }
699724 builder .setRoutingNumShards (in .readInt ());
700725 builder .state (State .fromId (in .readByte ()));
701726 builder .settings (readSettingsFromStream (in ));
@@ -745,6 +770,9 @@ public void writeTo(StreamOutput out) throws IOException {
745770 if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
746771 out .writeVLong (mappingVersion );
747772 }
773+ if (out .getVersion ().onOrAfter (Version .V_7_0_0_alpha1 )) {
774+ out .writeVLong (settingsVersion );
775+ }
748776 out .writeInt (routingNumShards );
749777 out .writeByte (state .id ());
750778 writeSettingsToStream (settings , out );
@@ -793,6 +821,7 @@ public static class Builder {
793821 private State state = State .OPEN ;
794822 private long version = 1 ;
795823 private long mappingVersion = 1 ;
824+ private long settingsVersion = 1 ;
796825 private long [] primaryTerms = null ;
797826 private Settings settings = Settings .Builder .EMPTY_SETTINGS ;
798827 private final ImmutableOpenMap .Builder <String , MappingMetaData > mappings ;
@@ -816,6 +845,7 @@ public Builder(IndexMetaData indexMetaData) {
816845 this .state = indexMetaData .state ;
817846 this .version = indexMetaData .version ;
818847 this .mappingVersion = indexMetaData .mappingVersion ;
848+ this .settingsVersion = indexMetaData .settingsVersion ;
819849 this .settings = indexMetaData .getSettings ();
820850 this .primaryTerms = indexMetaData .primaryTerms .clone ();
821851 this .mappings = ImmutableOpenMap .builder (indexMetaData .mappings );
@@ -990,11 +1020,20 @@ public long mappingVersion() {
9901020 return mappingVersion ;
9911021 }
9921022
1023+ public long settingsVersion () {
1024+ return settingsVersion ;
1025+ }
1026+
9931027 public Builder mappingVersion (final long mappingVersion ) {
9941028 this .mappingVersion = mappingVersion ;
9951029 return this ;
9961030 }
9971031
1032+ public Builder settingsVersion (final long settingsVersion ) {
1033+ this .settingsVersion = settingsVersion ;
1034+ return this ;
1035+ }
1036+
9981037 /**
9991038 * returns the primary term for the given shard.
10001039 * See {@link IndexMetaData#primaryTerm(int)} for more information.
@@ -1122,7 +1161,7 @@ public IndexMetaData build() {
11221161
11231162 final String uuid = settings .get (SETTING_INDEX_UUID , INDEX_UUID_NA_VALUE );
11241163
1125- return new IndexMetaData (new Index (index , uuid ), version , mappingVersion , primaryTerms , state , numberOfShards , numberOfReplicas , tmpSettings , mappings .build (),
1164+ return new IndexMetaData (new Index (index , uuid ), version , mappingVersion , settingsVersion , primaryTerms , state , numberOfShards , numberOfReplicas , tmpSettings , mappings .build (),
11261165 tmpAliases .build (), customMetaData .build (), filledInSyncAllocationIds .build (), requireFilters , initialRecoveryFilters , includeFilters , excludeFilters ,
11271166 indexCreatedVersion , indexUpgradedVersion , getRoutingNumShards (), routingPartitionSize , waitForActiveShards , rolloverInfos .build ());
11281167 }
@@ -1132,6 +1171,7 @@ public static void toXContent(IndexMetaData indexMetaData, XContentBuilder build
11321171
11331172 builder .field (KEY_VERSION , indexMetaData .getVersion ());
11341173 builder .field (KEY_MAPPING_VERSION , indexMetaData .getMappingVersion ());
1174+ builder .field (KEY_SETTINGS_VERSION , indexMetaData .getSettingsVersion ());
11351175 builder .field (KEY_ROUTING_NUM_SHARDS , indexMetaData .getRoutingNumShards ());
11361176 builder .field (KEY_STATE , indexMetaData .getState ().toString ().toLowerCase (Locale .ENGLISH ));
11371177
@@ -1205,6 +1245,7 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
12051245 throw new IllegalArgumentException ("expected object but got a " + token );
12061246 }
12071247 boolean mappingVersion = false ;
1248+ boolean settingsVersion = false ;
12081249 while ((token = parser .nextToken ()) != XContentParser .Token .END_OBJECT ) {
12091250 if (token == XContentParser .Token .FIELD_NAME ) {
12101251 currentFieldName = parser .currentName ();
@@ -1299,6 +1340,9 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
12991340 } else if (KEY_MAPPING_VERSION .equals (currentFieldName )) {
13001341 mappingVersion = true ;
13011342 builder .mappingVersion (parser .longValue ());
1343+ } else if (KEY_SETTINGS_VERSION .equals (currentFieldName )) {
1344+ settingsVersion = true ;
1345+ builder .settingsVersion (parser .longValue ());
13021346 } else if (KEY_ROUTING_NUM_SHARDS .equals (currentFieldName )) {
13031347 builder .setRoutingNumShards (parser .intValue ());
13041348 } else {
@@ -1311,6 +1355,9 @@ public static IndexMetaData fromXContent(XContentParser parser) throws IOExcepti
13111355 if (Assertions .ENABLED && Version .indexCreated (builder .settings ).onOrAfter (Version .V_6_5_0 )) {
13121356 assert mappingVersion : "mapping version should be present for indices created on or after 6.5.0" ;
13131357 }
1358+ if (Assertions .ENABLED && Version .indexCreated (builder .settings ).onOrAfter (Version .V_7_0_0_alpha1 )) {
1359+ assert settingsVersion : "settings version should be present for indices created on or after 7.0.0" ;
1360+ }
13141361 return builder .build ();
13151362 }
13161363 }
0 commit comments