Skip to content

Commit 73a9348

Browse files
authored
Add deprecation checks for indices with percolator fields (#138118)
This change modifies the deprecation API to check for any indices prior to 9.latest that have percolator fields in the mappings. Any that do are then returned as required to be reindexed or deleted. Read-only is excluded as this would not fix the underlying transport version issue. Note this change only concerns user created indices. System indices will need to be addressed separately as part of the migration API, but should be able to share code. ES-13234
1 parent 59da11b commit 73a9348

File tree

19 files changed

+649
-142
lines changed

19 files changed

+649
-142
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
156156
public static final String EVENT_INGESTED_FIELD_NAME = "event.ingested";
157157

158158
private static final TransportVersion INDEX_RESHARDING_METADATA = TransportVersion.fromName("index_resharding_metadata");
159+
private static final TransportVersion INDEX_CREATED_TRANSPORT_VERSION = TransportVersion.fromName("index_created_transport_version");
159160

160161
@Nullable
161162
public String getDownsamplingInterval() {
@@ -586,6 +587,7 @@ public Iterator<Setting<?>> settings() {
586587
public static final List<String> PARTIALLY_MOUNTED_INDEX_TIER_PREFERENCE = List.of(DataTier.DATA_FROZEN);
587588

588589
static final String KEY_VERSION = "version";
590+
static final String KEY_TRANSPORT_VERSION = "transport_version";
589591
static final String KEY_MAPPING_VERSION = "mapping_version";
590592
static final String KEY_SETTINGS_VERSION = "settings_version";
591593
static final String KEY_ALIASES_VERSION = "aliases_version";
@@ -626,6 +628,7 @@ public Iterator<Setting<?>> settings() {
626628

627629
private final Index index;
628630
private final long version;
631+
private final TransportVersion transportVersion;
629632

630633
private final long mappingVersion;
631634

@@ -713,6 +716,7 @@ public Iterator<Setting<?>> settings() {
713716
private IndexMetadata(
714717
final Index index,
715718
final long version,
719+
final TransportVersion transportVersion,
716720
final long mappingVersion,
717721
final long settingsVersion,
718722
final long aliasesVersion,
@@ -764,6 +768,7 @@ private IndexMetadata(
764768
) {
765769
this.index = index;
766770
this.version = version;
771+
this.transportVersion = transportVersion;
767772
assert mappingVersion >= 0 : mappingVersion;
768773
this.mappingVersion = mappingVersion;
769774
this.mappingsUpdatedVersion = mappingsUpdatedVersion;
@@ -831,6 +836,7 @@ IndexMetadata withMappingMetadata(MappingMetadata mapping) {
831836
return new IndexMetadata(
832837
this.index,
833838
this.version,
839+
this.transportVersion,
834840
this.mappingVersion,
835841
this.settingsVersion,
836842
this.aliasesVersion,
@@ -895,6 +901,7 @@ public IndexMetadata withInSyncAllocationIds(int shardId, Set<String> inSyncSet)
895901
return new IndexMetadata(
896902
this.index,
897903
this.version,
904+
this.transportVersion,
898905
this.mappingVersion,
899906
this.settingsVersion,
900907
this.aliasesVersion,
@@ -967,6 +974,7 @@ public IndexMetadata withSetPrimaryTerm(int shardId, long primaryTerm) {
967974
return new IndexMetadata(
968975
this.index,
969976
this.version,
977+
this.transportVersion,
970978
this.mappingVersion,
971979
this.settingsVersion,
972980
this.aliasesVersion,
@@ -1030,6 +1038,7 @@ public IndexMetadata withTimestampRanges(IndexLongFieldRange timestampRange, Ind
10301038
return new IndexMetadata(
10311039
this.index,
10321040
this.version,
1041+
this.transportVersion,
10331042
this.mappingVersion,
10341043
this.settingsVersion,
10351044
this.aliasesVersion,
@@ -1088,6 +1097,7 @@ public IndexMetadata withIncrementedVersion() {
10881097
return new IndexMetadata(
10891098
this.index,
10901099
this.version + 1,
1100+
this.transportVersion,
10911101
this.mappingVersion,
10921102
this.settingsVersion,
10931103
this.aliasesVersion,
@@ -1151,6 +1161,10 @@ public long getVersion() {
11511161
return this.version;
11521162
}
11531163

1164+
public TransportVersion getTransportVersion() {
1165+
return transportVersion;
1166+
}
1167+
11541168
public long getMappingVersion() {
11551169
return mappingVersion;
11561170
}
@@ -1658,6 +1672,7 @@ private static class IndexMetadataDiff implements Diff<IndexMetadata> {
16581672
private final String index;
16591673
private final int routingNumShards;
16601674
private final long version;
1675+
private final TransportVersion transportVersion;
16611676
private final long mappingVersion;
16621677
private final long settingsVersion;
16631678
private final long aliasesVersion;
@@ -1691,6 +1706,7 @@ private static class IndexMetadataDiff implements Diff<IndexMetadata> {
16911706
IndexMetadataDiff(IndexMetadata before, IndexMetadata after) {
16921707
index = after.index.getName();
16931708
version = after.version;
1709+
transportVersion = after.transportVersion;
16941710
mappingVersion = after.mappingVersion;
16951711
settingsVersion = after.settingsVersion;
16961712
aliasesVersion = after.aliasesVersion;
@@ -1744,6 +1760,9 @@ private static class IndexMetadataDiff implements Diff<IndexMetadata> {
17441760
index = in.readString();
17451761
routingNumShards = in.readInt();
17461762
version = in.readLong();
1763+
transportVersion = in.getTransportVersion().supports(INDEX_CREATED_TRANSPORT_VERSION)
1764+
? TransportVersion.readVersion(in)
1765+
: TransportVersion.fromId(0);
17471766
mappingVersion = in.readVLong();
17481767
settingsVersion = in.readVLong();
17491768
aliasesVersion = in.readVLong();
@@ -1811,6 +1830,9 @@ public void writeTo(StreamOutput out) throws IOException {
18111830
out.writeString(index);
18121831
out.writeInt(routingNumShards);
18131832
out.writeLong(version);
1833+
if (out.getTransportVersion().supports(INDEX_CREATED_TRANSPORT_VERSION)) {
1834+
TransportVersion.writeVersion(transportVersion, out);
1835+
}
18141836
out.writeVLong(mappingVersion);
18151837
out.writeVLong(settingsVersion);
18161838
out.writeVLong(aliasesVersion);
@@ -1851,6 +1873,7 @@ public void writeTo(StreamOutput out) throws IOException {
18511873
public IndexMetadata apply(IndexMetadata part) {
18521874
Builder builder = builder(index);
18531875
builder.version(version);
1876+
builder.transportVersion(transportVersion);
18541877
builder.mappingVersion(mappingVersion);
18551878
builder.settingsVersion(settingsVersion);
18561879
builder.aliasesVersion(aliasesVersion);
@@ -1894,6 +1917,11 @@ public static IndexMetadata readFrom(StreamInput in) throws IOException {
18941917
public static IndexMetadata readFrom(StreamInput in, @Nullable Function<String, MappingMetadata> mappingLookup) throws IOException {
18951918
Builder builder = new Builder(in.readString());
18961919
builder.version(in.readLong());
1920+
builder.transportVersion(
1921+
in.getTransportVersion().supports(INDEX_CREATED_TRANSPORT_VERSION)
1922+
? TransportVersion.readVersion(in)
1923+
: TransportVersion.fromId(0)
1924+
);
18971925
builder.mappingVersion(in.readVLong());
18981926
builder.settingsVersion(in.readVLong());
18991927
builder.aliasesVersion(in.readVLong());
@@ -1961,6 +1989,9 @@ public static IndexMetadata readFrom(StreamInput in, @Nullable Function<String,
19611989
public void writeTo(StreamOutput out, boolean mappingsAsHash) throws IOException {
19621990
out.writeString(index.getName()); // uuid will come as part of settings
19631991
out.writeLong(version);
1992+
if (out.getTransportVersion().supports(INDEX_CREATED_TRANSPORT_VERSION)) {
1993+
TransportVersion.writeVersion(transportVersion, out);
1994+
}
19641995
out.writeVLong(mappingVersion);
19651996
out.writeVLong(settingsVersion);
19661997
out.writeVLong(aliasesVersion);
@@ -2036,6 +2067,7 @@ public static class Builder {
20362067
private String index;
20372068
private State state = State.OPEN;
20382069
private long version = 1;
2070+
private TransportVersion transportVersion = TransportVersion.fromId(0);
20392071
private long mappingVersion = 1;
20402072
private long settingsVersion = 1;
20412073
private long aliasesVersion = 1;
@@ -2072,6 +2104,7 @@ public Builder(IndexMetadata indexMetadata) {
20722104
this.index = indexMetadata.getIndex().getName();
20732105
this.state = indexMetadata.state;
20742106
this.version = indexMetadata.version;
2107+
this.transportVersion = indexMetadata.transportVersion;
20752108
this.mappingVersion = indexMetadata.mappingVersion;
20762109
this.settingsVersion = indexMetadata.settingsVersion;
20772110
this.aliasesVersion = indexMetadata.aliasesVersion;
@@ -2280,6 +2313,15 @@ public Builder version(long version) {
22802313
return this;
22812314
}
22822315

2316+
public TransportVersion transportVersion() {
2317+
return this.transportVersion;
2318+
}
2319+
2320+
public Builder transportVersion(TransportVersion transportVersion) {
2321+
this.transportVersion = transportVersion;
2322+
return this;
2323+
}
2324+
22832325
public long mappingVersion() {
22842326
return mappingVersion;
22852327
}
@@ -2555,6 +2597,7 @@ IndexMetadata build(boolean repair) {
25552597
return new IndexMetadata(
25562598
new Index(index, uuid),
25572599
version,
2600+
transportVersion,
25582601
mappingVersion,
25592602
settingsVersion,
25602603
aliasesVersion,
@@ -2615,6 +2658,7 @@ public static void toXContent(IndexMetadata indexMetadata, XContentBuilder build
26152658
builder.startObject(indexMetadata.getIndex().getName());
26162659

26172660
builder.field(KEY_VERSION, indexMetadata.getVersion());
2661+
builder.field(KEY_TRANSPORT_VERSION, indexMetadata.getTransportVersion().toString());
26182662
builder.field(KEY_MAPPING_VERSION, indexMetadata.getMappingVersion());
26192663
builder.field(KEY_SETTINGS_VERSION, indexMetadata.getSettingsVersion());
26202664
builder.field(KEY_ALIASES_VERSION, indexMetadata.getAliasesVersion());
@@ -2872,6 +2916,7 @@ public static IndexMetadata fromXContent(XContentParser parser, Map<String, Mapp
28722916
switch (currentFieldName) {
28732917
case KEY_STATE -> builder.state(State.fromString(parser.text()));
28742918
case KEY_VERSION -> builder.version(parser.longValue());
2919+
case KEY_TRANSPORT_VERSION -> builder.transportVersion(TransportVersion.fromString(parser.text()));
28752920
case KEY_MAPPING_VERSION -> {
28762921
mappingVersion = true;
28772922
builder.mappingVersion(parser.longValue());

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateIndexService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ private IndexMetadata buildAndValidateTemporaryIndexMetadata(
627627
final IndexMetadata.Builder tmpImdBuilder = IndexMetadata.builder(request.index());
628628
tmpImdBuilder.setRoutingNumShards(routingNumShards);
629629
tmpImdBuilder.settings(indexSettings);
630+
tmpImdBuilder.transportVersion(TransportVersion.current());
630631
tmpImdBuilder.system(isSystem);
631632

632633
// Set up everything, now locally create the index to see that things are ok, and apply
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
9221000,9185009,9112014,8841075
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
batched_response_might_include_reduction_failure,8841074
1+
index_created_transport_version,8841075
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
initial_9.1.8,9112013
1+
index_created_transport_version,9112014
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
initial_9.2.2,9185008
1+
index_created_transport_version,9185009
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
get_inference_fields_action,9220000
1+
index_created_transport_version,9221000

server/src/test/java/org/elasticsearch/action/admin/cluster/reroute/ClusterRerouteResponseTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ public void testToXContentWithDeprecatedClusterState() {
160160
"indices": {
161161
"index": {
162162
"version": 1,
163+
"transport_version" : "0",
163164
"mapping_version": 1,
164165
"settings_version": 1,
165166
"aliases_version": 1,
@@ -249,6 +250,7 @@ public void testToXContentWithDeprecatedClusterStateAndMetadata() {
249250
"indices" : {
250251
"index" : {
251252
"version" : 1,
253+
"transport_version" : "0",
252254
"mapping_version" : 1,
253255
"settings_version" : 1,
254256
"aliases_version" : 1,

server/src/test/java/org/elasticsearch/cluster/ClusterStateTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ public void testToXContentWithMultipleProjects() throws IOException {
497497
"indices": {
498498
"common-index": {
499499
"version": 2,
500+
"transport_version" : "0",
500501
"mapping_version": 1,
501502
"settings_version": 1,
502503
"aliases_version": 1,
@@ -529,6 +530,7 @@ public void testToXContentWithMultipleProjects() throws IOException {
529530
"indices": {
530531
"another-index": {
531532
"version": 2,
533+
"transport_version" : "0",
532534
"mapping_version": 1,
533535
"settings_version": 1,
534536
"aliases_version": 1,
@@ -554,6 +556,7 @@ public void testToXContentWithMultipleProjects() throws IOException {
554556
},
555557
"common-index": {
556558
"version": 2,
559+
"transport_version" : "0",
557560
"mapping_version": 1,
558561
"settings_version": 1,
559562
"aliases_version": 1,
@@ -1105,6 +1108,7 @@ public void testToXContent() throws IOException {
11051108
"indices": {
11061109
"index": {
11071110
"version": 1,
1111+
"transport_version" : "0",
11081112
"mapping_version": 1,
11091113
"settings_version": 1,
11101114
"aliases_version": 1,
@@ -1381,6 +1385,7 @@ public void testToXContent_FlatSettingTrue_ReduceMappingFalse() throws IOExcepti
13811385
"indices" : {
13821386
"index" : {
13831387
"version" : 1,
1388+
"transport_version" : "0",
13841389
"mapping_version" : 1,
13851390
"settings_version" : 1,
13861391
"aliases_version" : 1,
@@ -1663,6 +1668,7 @@ public void testToXContent_FlatSettingFalse_ReduceMappingTrue() throws IOExcepti
16631668
"indices" : {
16641669
"index" : {
16651670
"version" : 1,
1671+
"transport_version" : "0",
16661672
"mapping_version" : 1,
16671673
"settings_version" : 1,
16681674
"aliases_version" : 1,
@@ -1854,6 +1860,7 @@ public void testToXContentSameTypeName() throws IOException {
18541860
"indices" : {
18551861
"index" : {
18561862
"version" : 2,
1863+
"transport_version" : "0",
18571864
"mapping_version" : 1,
18581865
"settings_version" : 1,
18591866
"aliases_version" : 1,

server/src/test/java/org/elasticsearch/cluster/metadata/IndexMetadataTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public void testIndexMetadataSerialization() throws IOException {
101101

102102
IndexMetadata metadata = IndexMetadata.builder("foo")
103103
.settings(indexSettings(numShard, numberOfReplicas).put("index.version.created", 1))
104+
.transportVersion(TransportVersion.current())
104105
.creationDate(randomLong())
105106
.primaryTerm(0, 2)
106107
.setRoutingNumShards(32)
@@ -152,6 +153,7 @@ public void testIndexMetadataSerialization() throws IOException {
152153
);
153154
assertEquals(metadata.hashCode(), fromXContentMeta.hashCode());
154155

156+
assertEquals(metadata.getTransportVersion(), fromXContentMeta.getTransportVersion());
155157
assertEquals(metadata.getNumberOfReplicas(), fromXContentMeta.getNumberOfReplicas());
156158
assertEquals(metadata.getNumberOfShards(), fromXContentMeta.getNumberOfShards());
157159
assertEquals(metadata.getCreationVersion(), fromXContentMeta.getCreationVersion());
@@ -179,6 +181,7 @@ public void testIndexMetadataSerialization() throws IOException {
179181
assertEquals(metadata, deserialized);
180182
assertEquals(metadata.hashCode(), deserialized.hashCode());
181183

184+
assertEquals(metadata.getTransportVersion(), deserialized.getTransportVersion());
182185
assertEquals(metadata.getNumberOfReplicas(), deserialized.getNumberOfReplicas());
183186
assertEquals(metadata.getNumberOfShards(), deserialized.getNumberOfShards());
184187
assertEquals(metadata.getCreationVersion(), deserialized.getCreationVersion());
@@ -215,6 +218,7 @@ public void testIndexMetadataFromXContentParsingWithoutEventIngestedField() thro
215218

216219
IndexMetadata metadata = IndexMetadata.builder("foo")
217220
.settings(indexSettings(numShard, numberOfReplicas).put("index.version.created", 1))
221+
.transportVersion(TransportVersion.current())
218222
.creationDate(randomLong())
219223
.primaryTerm(0, 2)
220224
.setRoutingNumShards(32)
@@ -283,6 +287,7 @@ public void testIndexMetadataFromXContentParsingWithoutEventIngestedField() thro
283287
fromXContentMeta
284288
);
285289
assertEquals(metadata.hashCode(), fromXContentMeta.hashCode());
290+
assertEquals(metadata.getTransportVersion(), fromXContentMeta.getTransportVersion());
286291
assertEquals(metadata.getNumberOfReplicas(), fromXContentMeta.getNumberOfReplicas());
287292
assertEquals(metadata.getNumberOfShards(), fromXContentMeta.getNumberOfShards());
288293
assertEquals(metadata.getCreationVersion(), fromXContentMeta.getCreationVersion());

0 commit comments

Comments
 (0)