diff --git a/server/src/main/java/org/elasticsearch/action/RoutingMissingException.java b/server/src/main/java/org/elasticsearch/action/RoutingMissingException.java index cb22248daa62e..5804598febd10 100644 --- a/server/src/main/java/org/elasticsearch/action/RoutingMissingException.java +++ b/server/src/main/java/org/elasticsearch/action/RoutingMissingException.java @@ -10,8 +10,10 @@ package org.elasticsearch.action; import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.rest.RestStatus; import java.io.IOException; @@ -40,12 +42,18 @@ public RestStatus status() { public RoutingMissingException(StreamInput in) throws IOException { super(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readString(); + } id = in.readString(); } @Override protected void writeTo(StreamOutput out, Writer nestedExceptionsWriter) throws IOException { super.writeTo(out, nestedExceptionsWriter); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexRequest.java index fe2cdd482ae3d..84c040df758d3 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.admin.indices.get; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.action.support.IndicesOptions; @@ -112,6 +113,9 @@ public GetIndexRequest(TimeValue masterTimeout) { public GetIndexRequest(StreamInput in) throws IOException { super(in); indices = in.readStringArray(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readStringArray(); + } indicesOptions = IndicesOptions.readIndicesOptions(in); features = in.readArray(i -> Feature.fromId(i.readByte()), Feature[]::new); humanReadable = in.readBoolean(); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java b/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java index 4a50f3b20a6c9..91f7dfd8a98f5 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.admin.indices.get; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.cluster.metadata.AliasMetadata; import org.elasticsearch.cluster.metadata.MappingMetadata; @@ -19,6 +20,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.ChunkedToXContentObject; import org.elasticsearch.core.UpdateForV10; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.xcontent.ToXContent; import java.io.IOException; @@ -75,10 +77,18 @@ public GetIndexResponse( @UpdateForV10(owner = UpdateForV10.Owner.DATA_MANAGEMENT) GetIndexResponse(StreamInput in) throws IOException { this.indices = in.readStringArray(); - mappings = in.readImmutableOpenMap( - StreamInput::readString, - i -> i.readBoolean() ? new MappingMetadata(i) : MappingMetadata.EMPTY_MAPPINGS - ); + mappings = in.readImmutableOpenMap(StreamInput::readString, in.getTransportVersion().before(TransportVersions.V_8_0_0) ? i -> { + int numMappings = i.readVInt(); + assert numMappings == 0 || numMappings == 1 : "Expected 0 or 1 mappings but got " + numMappings; + if (numMappings == 1) { + String type = i.readString(); + assert MapperService.SINGLE_MAPPING_NAME.equals(type) : "Expected [_doc] but got [" + type + "]"; + return new MappingMetadata(i); + } else { + return MappingMetadata.EMPTY_MAPPINGS; + } + } : i -> i.readBoolean() ? new MappingMetadata(i) : MappingMetadata.EMPTY_MAPPINGS); + aliases = in.readImmutableOpenMap(StreamInput::readString, i -> i.readCollectionAsList(AliasMetadata::new)); settings = in.readImmutableOpenMap(StreamInput::readString, Settings::readSettingsFromStream); defaultSettings = in.readImmutableOpenMap(StreamInput::readString, Settings::readSettingsFromStream); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsIndexRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsIndexRequest.java index 829b9b8bde0b3..6ac78e7c27aed 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsIndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetFieldMappingsIndexRequest.java @@ -9,10 +9,12 @@ package org.elasticsearch.action.admin.indices.mapping.get; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.OriginalIndices; import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.action.support.single.shard.SingleShardRequest; +import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -27,8 +29,14 @@ public class GetFieldMappingsIndexRequest extends SingleShardRequest mapIn.readImmutableMap(inpt -> new FieldMappingMetadata(inpt.readString(), inpt.readBytesReference())) - ); + mappings = in.readImmutableMap(mapIn -> { + if (mapIn.getTransportVersion().before(TransportVersions.V_8_0_0)) { + int typesSize = mapIn.readVInt(); + assert typesSize == 1 || typesSize == 0 : "Expected 0 or 1 types but got " + typesSize; + if (typesSize == 0) { + return Collections.emptyMap(); + } + mapIn.readString(); // type + } + return mapIn.readImmutableMap(inpt -> new FieldMappingMetadata(inpt.readString(), inpt.readBytesReference())); + }); } /** returns the retrieved field mapping. The return map keys are index, field (as specified in the request). */ @@ -123,6 +134,10 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws @Override public void writeTo(StreamOutput out) throws IOException { out.writeMap(mappings, (outpt, map) -> { + if (outpt.getTransportVersion().before(TransportVersions.V_8_0_0)) { + outpt.writeVInt(1); + outpt.writeString(MapperService.SINGLE_MAPPING_NAME); + } outpt.writeMap(map, (o, v) -> { o.writeString(v.fullName()); o.writeBytesReference(v.source); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetMappingsRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetMappingsRequest.java index e661c53c805a1..ca4314b4b9922 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetMappingsRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/GetMappingsRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.admin.indices.mapping.get; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.action.support.IndicesOptions; @@ -42,6 +43,9 @@ public GetMappingsRequest(TimeValue masterTimeout) { public GetMappingsRequest(StreamInput in) throws IOException { super(in); indices = in.readStringArray(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readStringArray(); + } indicesOptions = IndicesOptions.readIndicesOptions(in); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/put/PutMappingRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/put/PutMappingRequest.java index 72b2d951bc03e..05cc0d2cf05d8 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/put/PutMappingRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/mapping/put/PutMappingRequest.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.admin.indices.mapping.put; import org.elasticsearch.ElasticsearchGenerationException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.action.support.IndicesOptions; @@ -23,6 +24,7 @@ import org.elasticsearch.common.util.CollectionUtils; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.index.Index; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.xcontent.XContentBuilder; import org.elasticsearch.xcontent.XContentFactory; import org.elasticsearch.xcontent.XContentType; @@ -95,6 +97,12 @@ public PutMappingRequest(StreamInput in) throws IOException { super(in); indices = in.readStringArray(); indicesOptions = IndicesOptions.readIndicesOptions(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + String type = in.readOptionalString(); + if (MapperService.SINGLE_MAPPING_NAME.equals(type) == false) { + throw new IllegalArgumentException("Expected type [_doc] but received [" + type + "]"); + } + } source = in.readString(); concreteIndex = in.readOptionalWriteable(Index::new); origin = in.readOptionalString(); @@ -322,6 +330,9 @@ public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeStringArrayNullable(indices); indicesOptions.writeIndicesOptions(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(source); out.writeOptionalWriteable(concreteIndex); out.writeOptionalString(origin); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/segments/IndicesSegmentsRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/segments/IndicesSegmentsRequest.java index de9692cdaaded..bdacfb0ab642d 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/segments/IndicesSegmentsRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/segments/IndicesSegmentsRequest.java @@ -31,6 +31,9 @@ public IndicesSegmentsRequest() { public IndicesSegmentsRequest(StreamInput in) throws IOException { super(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readBoolean(); // old 'verbose' option, since removed + } if (in.getTransportVersion().onOrAfter(TransportVersions.V_8_15_0)) { this.includeVectorFormatsInfo = in.readBoolean(); } @@ -53,6 +56,9 @@ public boolean isIncludeVectorFormatsInfo() { @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeBoolean(false); + } if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_15_0)) { out.writeBoolean(includeVectorFormatsInfo); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java index 81b44b6720567..0f11cb45e08d5 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java @@ -10,6 +10,7 @@ import org.elasticsearch.ElasticsearchGenerationException; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.action.admin.indices.alias.Alias; @@ -76,7 +77,15 @@ public PutIndexTemplateRequest(StreamInput in) throws IOException { order = in.readInt(); create = in.readBoolean(); settings = readSettingsFromStream(in); - mappings = in.readOptionalString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + int size = in.readVInt(); + for (int i = 0; i < size; i++) { + in.readString(); // type - cannot assert on _doc because 7x allows arbitrary type names + this.mappings = in.readString(); + } + } else { + this.mappings = in.readOptionalString(); + } int aliasesSize = in.readVInt(); for (int i = 0; i < aliasesSize; i++) { aliases.add(new Alias(in)); @@ -441,7 +450,15 @@ public void writeTo(StreamOutput out) throws IOException { out.writeInt(order); out.writeBoolean(create); settings.writeTo(out); - out.writeOptionalString(mappings); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeVInt(mappings == null ? 0 : 1); + if (mappings != null) { + out.writeString(MapperService.SINGLE_MAPPING_NAME); + out.writeString(mappings); + } + } else { + out.writeOptionalString(mappings); + } out.writeCollection(aliases); out.writeOptionalVInt(version); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java index 0687b0fcbbed0..f41cb6fbc0306 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.admin.indices.validate.query; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.support.broadcast.BroadcastShardRequest; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -33,6 +34,14 @@ public class ShardValidateQueryRequest extends BroadcastShardRequest { public ShardValidateQueryRequest(StreamInput in) throws IOException { super(in); query = in.readNamedWriteable(QueryBuilder.class); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + int typesSize = in.readVInt(); + if (typesSize > 0) { + for (int i = 0; i < typesSize; i++) { + in.readString(); + } + } + } filteringAliases = AliasFilter.readFrom(in); explain = in.readBoolean(); rewrite = in.readBoolean(); @@ -72,6 +81,9 @@ public long nowInMillis() { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeNamedWriteable(query); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeVInt(0); // no types to filter + } filteringAliases.writeTo(out); out.writeBoolean(explain); out.writeBoolean(rewrite); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java index 1117b1997b739..f30206c1d238a 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.admin.indices.validate.query; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.ValidateActions; import org.elasticsearch.action.support.IndicesOptions; @@ -48,6 +49,14 @@ public ValidateQueryRequest() { public ValidateQueryRequest(StreamInput in) throws IOException { super(in); query = in.readNamedWriteable(QueryBuilder.class); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + int typesSize = in.readVInt(); + if (typesSize > 0) { + for (int i = 0; i < typesSize; i++) { + in.readString(); + } + } + } explain = in.readBoolean(); rewrite = in.readBoolean(); allShards = in.readBoolean(); @@ -129,6 +138,9 @@ public boolean allShards() { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeNamedWriteable(query); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeVInt(0); // no types to filter + } out.writeBoolean(explain); out.writeBoolean(rewrite); out.writeBoolean(allShards); diff --git a/server/src/main/java/org/elasticsearch/action/fieldcaps/IndexFieldCapabilities.java b/server/src/main/java/org/elasticsearch/action/fieldcaps/IndexFieldCapabilities.java index 7b19c1928d535..349ae476dd724 100644 --- a/server/src/main/java/org/elasticsearch/action/fieldcaps/IndexFieldCapabilities.java +++ b/server/src/main/java/org/elasticsearch/action/fieldcaps/IndexFieldCapabilities.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.fieldcaps; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -46,8 +47,15 @@ public static IndexFieldCapabilities readFrom(StreamInput in) throws IOException boolean isMetadatafield = in.readBoolean(); boolean isSearchable = in.readBoolean(); boolean isAggregatable = in.readBoolean(); - boolean isDimension = in.readBoolean(); - TimeSeriesParams.MetricType metricType = in.readOptionalEnum(TimeSeriesParams.MetricType.class); + boolean isDimension; + TimeSeriesParams.MetricType metricType; + if (in.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0)) { + isDimension = in.readBoolean(); + metricType = in.readOptionalEnum(TimeSeriesParams.MetricType.class); + } else { + isDimension = false; + metricType = null; + } return new IndexFieldCapabilities( name, type, @@ -67,8 +75,10 @@ public void writeTo(StreamOutput out) throws IOException { out.writeBoolean(isMetadatafield); out.writeBoolean(isSearchable); out.writeBoolean(isAggregatable); - out.writeBoolean(isDimension); - out.writeOptionalEnum(metricType); + if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0)) { + out.writeBoolean(isDimension); + out.writeOptionalEnum(metricType); + } out.writeMap(meta, StreamOutput::writeString); } diff --git a/server/src/main/java/org/elasticsearch/action/get/GetRequest.java b/server/src/main/java/org/elasticsearch/action/get/GetRequest.java index aeb5f52094e94..5459782de9b5b 100644 --- a/server/src/main/java/org/elasticsearch/action/get/GetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/GetRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.action.get; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.RealtimeRequest; import org.elasticsearch.action.ValidateActions; @@ -18,6 +19,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.lucene.uid.Versions; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.SourceLoader; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; @@ -65,6 +67,9 @@ public GetRequest() {} public GetRequest(StreamInput in) throws IOException { super(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readString(); + } id = in.readString(); routing = in.readOptionalString(); preference = in.readOptionalString(); @@ -81,6 +86,9 @@ public GetRequest(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeOptionalString(routing); out.writeOptionalString(preference); diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java index 98b52e7b7b83d..5e754f81055ab 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.get; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.CompositeIndicesRequest; import org.elasticsearch.action.IndicesRequest; @@ -25,6 +26,7 @@ import org.elasticsearch.common.lucene.uid.Versions; import org.elasticsearch.core.Nullable; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.SourceLoader; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import org.elasticsearch.xcontent.ParseField; @@ -80,6 +82,9 @@ public Item() { public Item(StreamInput in) throws IOException { index = in.readString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalString(); + } id = in.readString(); routing = in.readOptionalString(); storedFields = in.readOptionalStringArray(); @@ -171,6 +176,9 @@ public Item fetchSourceContext(FetchSourceContext fetchSourceContext) { @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeOptionalString(routing); out.writeOptionalStringArray(storedFields); diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java index 967762f9b2055..08db6dee8e543 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetResponse.java @@ -10,11 +10,13 @@ package org.elasticsearch.action.get; import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.common.collect.Iterators; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.xcontent.ParseField; import org.elasticsearch.xcontent.ToXContentObject; import org.elasticsearch.xcontent.XContentBuilder; @@ -45,6 +47,9 @@ public Failure(String index, String id, Exception exception) { Failure(StreamInput in) throws IOException { index = in.readString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalString(); + } id = in.readString(); exception = in.readException(); } @@ -73,6 +78,9 @@ public String getMessage() { @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeException(exception); } diff --git a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java index 40078aa1efe81..f1b16d6099666 100644 --- a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java @@ -37,6 +37,7 @@ import org.elasticsearch.core.Nullable; import org.elasticsearch.index.Index; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.ingest.IngestService; import org.elasticsearch.xcontent.XContentBuilder; @@ -159,6 +160,10 @@ public IndexRequest(StreamInput in) throws IOException { public IndexRequest(@Nullable ShardId shardId, StreamInput in) throws IOException { super(shardId, in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + String type = in.readOptionalString(); + assert MapperService.SINGLE_MAPPING_NAME.equals(type) : "Expected [_doc] but received [" + type + "]"; + } id = in.readOptionalString(); routing = in.readOptionalString(); boolean beforeSourceContext = in.getTransportVersion().supports(INDEX_SOURCE) == false; @@ -745,6 +750,9 @@ public void writeThin(StreamOutput out) throws IOException { } private void writeBody(StreamOutput out) throws IOException { + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeOptionalString(id); out.writeOptionalString(routing); if (out.getTransportVersion().supports(INDEX_SOURCE)) { diff --git a/server/src/main/java/org/elasticsearch/action/search/SearchRequest.java b/server/src/main/java/org/elasticsearch/action/search/SearchRequest.java index 6e77aadc5448b..f3e7eacaeb9df 100644 --- a/server/src/main/java/org/elasticsearch/action/search/SearchRequest.java +++ b/server/src/main/java/org/elasticsearch/action/search/SearchRequest.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.search; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.IndicesRequest; @@ -243,6 +244,15 @@ public SearchRequest(StreamInput in) throws IOException { preference = in.readOptionalString(); scrollKeepAlive = in.readOptionalTimeValue(); source = in.readOptionalWriteable(SearchSourceBuilder::new); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + String[] types = in.readStringArray(); + if (types.length > 0) { + throw new IllegalStateException( + "types are no longer supported in search requests but found [" + Arrays.toString(types) + "]" + ); + } + } indicesOptions = IndicesOptions.readIndicesOptions(in); requestCache = in.readOptionalBoolean(); batchedReduceSize = in.readVInt(); @@ -282,6 +292,10 @@ public void writeTo(StreamOutput out, boolean skipIndices) throws IOException { out.writeOptionalString(preference); out.writeOptionalTimeValue(scrollKeepAlive); out.writeOptionalWriteable(source); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeStringArray(Strings.EMPTY_ARRAY); + } indicesOptions.writeIndicesOptions(out); out.writeOptionalBoolean(requestCache); out.writeVInt(batchedReduceSize); diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/MultiTermVectorsResponse.java b/server/src/main/java/org/elasticsearch/action/termvectors/MultiTermVectorsResponse.java index 23996ec4976e6..42196fac28528 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/MultiTermVectorsResponse.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/MultiTermVectorsResponse.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.termvectors; import org.elasticsearch.ElasticsearchException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.common.collect.Iterators; import org.elasticsearch.common.io.stream.StreamInput; @@ -39,6 +40,13 @@ public Failure(String index, String id, Exception cause) { public Failure(StreamInput in) throws IOException { index = in.readString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + String type = in.readOptionalString(); + if (type != null) { + throw new IllegalStateException("types are no longer supported but found [" + type + "]"); + } + } id = in.readString(); cause = in.readException(); } @@ -67,6 +75,10 @@ public Exception getCause() { @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeOptionalString(null); + } out.writeString(id); out.writeException(cause); } diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java index 0e410969cc639..7a7b2afab75d1 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.termvectors; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.RealtimeRequest; import org.elasticsearch.action.ValidateActions; @@ -124,6 +125,10 @@ public TermVectorsRequest() {} TermVectorsRequest(StreamInput in) throws IOException { super(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + in.readString(); + } id = in.readString(); if (in.readBoolean()) { @@ -469,6 +474,10 @@ public ActionRequestValidationException validate() { @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeString("_doc"); + } out.writeString(id); out.writeBoolean(doc != null); diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsResponse.java b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsResponse.java index 1e5e0397ff957..4c4aa7de46f6b 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsResponse.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsResponse.java @@ -17,6 +17,7 @@ import org.apache.lucene.util.ArrayUtil; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.CharsRefBuilder; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.action.termvectors.TermVectorsRequest.Flag; import org.elasticsearch.common.bytes.BytesArray; @@ -25,6 +26,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.core.TimeValue; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.xcontent.ToXContentObject; import org.elasticsearch.xcontent.XContentBuilder; @@ -85,6 +87,10 @@ public TermVectorsResponse(String index, String id) { TermVectorsResponse(StreamInput in) throws IOException { index = in.readString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + in.readString(); + } id = in.readString(); docVersion = in.readVLong(); exists = in.readBoolean(); @@ -99,6 +105,10 @@ public TermVectorsResponse(String index, String id) { @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeVLong(docVersion); final boolean docExists = isExists(); diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java index 079b6611119b2..657ad029626af 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java @@ -10,6 +10,7 @@ package org.elasticsearch.action.update; import org.apache.lucene.util.RamUsageEstimator; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.DocWriteRequest; import org.elasticsearch.action.index.IndexRequest; @@ -27,6 +28,7 @@ import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.core.Nullable; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.script.Script; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; @@ -133,6 +135,10 @@ public UpdateRequest(StreamInput in) throws IOException { public UpdateRequest(@Nullable ShardId shardId, StreamInput in) throws IOException { super(shardId, in); waitForActiveShards = ActiveShardCount.readFrom(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + String type = in.readString(); + assert MapperService.SINGLE_MAPPING_NAME.equals(type) : "Expected [_doc] but received [" + type + "]"; + } id = in.readString(); routing = in.readOptionalString(); if (in.readBoolean()) { @@ -701,6 +707,9 @@ public void writeThin(StreamOutput out) throws IOException { private void doWrite(StreamOutput out, boolean thin) throws IOException { waitForActiveShards.writeTo(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeOptionalString(routing); diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetadata.java index 1b3dbcc9a50e9..ee4869508eaf2 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetadata.java @@ -10,6 +10,7 @@ package org.elasticsearch.cluster.metadata; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.cluster.Diff; import org.elasticsearch.cluster.SimpleDiffable; import org.elasticsearch.common.compress.CompressedXContent; @@ -75,7 +76,13 @@ public MappingMetadata(String type, Map mapping) { } public static void writeMappingMetadata(StreamOutput out, Map mappings) throws IOException { - out.writeMap(mappings, (o, v) -> { + out.writeMap(mappings, out.getTransportVersion().before(TransportVersions.V_8_0_0) ? (o, v) -> { + o.writeVInt(v == EMPTY_MAPPINGS ? 0 : 1); + if (v != EMPTY_MAPPINGS) { + o.writeString(MapperService.SINGLE_MAPPING_NAME); + v.writeTo(o); + } + } : (o, v) -> { o.writeBoolean(v != EMPTY_MAPPINGS); if (v != EMPTY_MAPPINGS) { v.writeTo(o); diff --git a/server/src/main/java/org/elasticsearch/common/xcontent/XContentHelper.java b/server/src/main/java/org/elasticsearch/common/xcontent/XContentHelper.java index 0215fb1e97686..f62fa6abff3a7 100644 --- a/server/src/main/java/org/elasticsearch/common/xcontent/XContentHelper.java +++ b/server/src/main/java/org/elasticsearch/common/xcontent/XContentHelper.java @@ -11,6 +11,7 @@ import org.elasticsearch.ElasticsearchGenerationException; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; @@ -743,7 +744,12 @@ public static BytesReference childBytes(XContentParser parser) throws IOExceptio * @param xContentType an instance to serialize */ public static void writeTo(StreamOutput out, XContentType xContentType) throws IOException { - out.writeVInt(xContentType.ordinal()); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // when sending an enumeration to , ToXContent public GetResult(StreamInput in) throws IOException { index = in.readString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalString(); + } id = in.readString(); seqNo = in.readZLong(); primaryTerm = in.readVLong(); @@ -282,6 +287,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeZLong(seqNo); out.writeVLong(primaryTerm); diff --git a/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java index bb60f31f23e12..fbb905b702293 100644 --- a/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java @@ -11,7 +11,9 @@ import org.apache.lucene.search.Query; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ParsingException; +import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.index.mapper.IdFieldMapper; @@ -23,6 +25,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Objects; @@ -52,11 +55,22 @@ public IdsQueryBuilder() { */ public IdsQueryBuilder(StreamInput in) throws IOException { super(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + String[] types = in.readStringArray(); + if (types.length > 0) { + throw new IllegalStateException("types are no longer supported in ids query but found [" + Arrays.toString(types) + "]"); + } + } Collections.addAll(ids, in.readStringArray()); } @Override protected void doWriteTo(StreamOutput out) throws IOException { + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeStringArray(Strings.EMPTY_ARRAY); + } out.writeStringCollection(ids); } diff --git a/server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java index a1f4e14949acd..56e002287e1e3 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java @@ -13,6 +13,7 @@ import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.Query; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -112,6 +113,10 @@ public MatchQueryBuilder(StreamInput in) throws IOException { minimumShouldMatch = in.readOptionalString(); fuzzyRewrite = in.readOptionalString(); fuzziness = in.readOptionalWriteable(Fuzziness::new); + // cutoff_frequency has been removed + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalFloat(); + } autoGenerateSynonymsPhraseQuery = in.readBoolean(); } @@ -130,6 +135,10 @@ protected void doWriteTo(StreamOutput out) throws IOException { out.writeOptionalString(minimumShouldMatch); out.writeOptionalString(fuzzyRewrite); out.writeOptionalWriteable(fuzziness); + // cutoff_frequency has been removed + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalFloat(null); + } out.writeBoolean(autoGenerateSynonymsPhraseQuery); } diff --git a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java index a8a3858aabf38..4b2f4f2517622 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java @@ -17,6 +17,7 @@ import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.RoutingMissingException; import org.elasticsearch.action.termvectors.MultiTermVectorsItemResponse; import org.elasticsearch.action.termvectors.MultiTermVectorsRequest; @@ -200,6 +201,13 @@ public Item(@Nullable String index, XContentBuilder doc) { @SuppressWarnings("unchecked") Item(StreamInput in) throws IOException { index = in.readOptionalString(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + String type = in.readOptionalString(); + if (type != null) { + throw new IllegalStateException("types are no longer supported but found [" + type + "]"); + } + } if (in.readBoolean()) { doc = (BytesReference) in.readGenericValue(); xContentType = in.readEnum(XContentType.class); @@ -216,6 +224,10 @@ public Item(@Nullable String index, XContentBuilder doc) { @Override public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(index); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeOptionalString(null); + } out.writeBoolean(doc != null); if (doc != null) { out.writeGenericValue(doc); diff --git a/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java index db072d93cd66a..df7f28a7a15d5 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java @@ -13,6 +13,7 @@ import org.apache.lucene.search.Query; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; @@ -221,6 +222,9 @@ public MultiMatchQueryBuilder(StreamInput in) throws IOException { fuzzyRewrite = in.readOptionalString(); tieBreaker = in.readOptionalFloat(); lenient = in.readOptionalBoolean(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalFloat(); + } zeroTermsQuery = ZeroTermsQueryOption.readFromStream(in); autoGenerateSynonymsPhraseQuery = in.readBoolean(); fuzzyTranspositions = in.readBoolean(); @@ -241,6 +245,9 @@ protected void doWriteTo(StreamOutput out) throws IOException { out.writeOptionalString(fuzzyRewrite); out.writeOptionalFloat(tieBreaker); out.writeOptionalBoolean(lenient); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalFloat(null); + } zeroTermsQuery.writeTo(out); out.writeBoolean(autoGenerateSynonymsPhraseQuery); out.writeBoolean(fuzzyTranspositions); diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java b/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java index 0f60518e90256..f9ac1e9cb5b86 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java @@ -10,15 +10,18 @@ package org.elasticsearch.index.shard; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.core.TimeValue; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.xcontent.ToXContent; import org.elasticsearch.xcontent.ToXContentFragment; import org.elasticsearch.xcontent.XContentBuilder; import java.io.IOException; +import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -394,6 +397,13 @@ public IndexingStats() { public IndexingStats(StreamInput in) throws IOException { totalStats = new Stats(in); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + if (in.readBoolean()) { + Map typeStats = in.readMap(Stats::new); + assert typeStats.size() == 1; + assert typeStats.containsKey(MapperService.SINGLE_MAPPING_NAME); + } + } } public IndexingStats(Stats totalStats) { @@ -463,5 +473,8 @@ static final class Fields { @Override public void writeTo(StreamOutput out) throws IOException { totalStats.writeTo(out); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeBoolean(false); + } } } diff --git a/server/src/main/java/org/elasticsearch/index/translog/Translog.java b/server/src/main/java/org/elasticsearch/index/translog/Translog.java index b2b1edfd7e92c..a5088b5896c80 100644 --- a/server/src/main/java/org/elasticsearch/index/translog/Translog.java +++ b/server/src/main/java/org/elasticsearch/index/translog/Translog.java @@ -1370,9 +1370,9 @@ protected void writeHeader(int format, StreamOutput out) throws IOException { @Override public void writeBody(final StreamOutput out) throws IOException { - final int format = out.getTransportVersion().supports(REORDERED_TRANSLOG_OPERATIONS) - ? SERIALIZATION_FORMAT - : FORMAT_NO_DOC_TYPE; + final int format = out.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0) + ? out.getTransportVersion().supports(REORDERED_TRANSLOG_OPERATIONS) ? SERIALIZATION_FORMAT : FORMAT_NO_DOC_TYPE + : FORMAT_NO_VERSION_TYPE; if (format < FORMAT_REORDERED) { out.writeVInt(format); out.writeString(Uid.decodeId(uid.bytes, uid.offset, uid.length)); @@ -1572,9 +1572,9 @@ public long version() { @Override public void writeBody(final StreamOutput out) throws IOException { - final int format = out.getTransportVersion().supports(REORDERED_TRANSLOG_OPERATIONS) - ? SERIALIZATION_FORMAT - : FORMAT_NO_DOC_TYPE; + final int format = out.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0) + ? out.getTransportVersion().supports(REORDERED_TRANSLOG_OPERATIONS) ? SERIALIZATION_FORMAT : FORMAT_NO_DOC_TYPE + : FORMAT_NO_VERSION_TYPE; if (format < FORMAT_REORDERED) { out.writeVInt(format); if (format < FORMAT_NO_DOC_TYPE) { diff --git a/server/src/main/java/org/elasticsearch/indices/TermsLookup.java b/server/src/main/java/org/elasticsearch/indices/TermsLookup.java index 75cbed396565b..0bab521a984e2 100644 --- a/server/src/main/java/org/elasticsearch/indices/TermsLookup.java +++ b/server/src/main/java/org/elasticsearch/indices/TermsLookup.java @@ -9,9 +9,11 @@ package org.elasticsearch.indices; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.query.TermsQueryBuilder; import org.elasticsearch.xcontent.ConstructingObjectParser; import org.elasticsearch.xcontent.ParseField; @@ -53,6 +55,9 @@ public TermsLookup(String index, String id, String path) { * Read from a stream. */ public TermsLookup(StreamInput in) throws IOException { + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalString(); + } id = in.readString(); path = in.readString(); index = in.readString(); @@ -61,6 +66,9 @@ public TermsLookup(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(MapperService.SINGLE_MAPPING_NAME); + } out.writeString(id); out.writeString(path); out.writeString(index); diff --git a/server/src/main/java/org/elasticsearch/monitor/os/OsStats.java b/server/src/main/java/org/elasticsearch/monitor/os/OsStats.java index 715e5851e9c28..840ea14364f96 100644 --- a/server/src/main/java/org/elasticsearch/monitor/os/OsStats.java +++ b/server/src/main/java/org/elasticsearch/monitor/os/OsStats.java @@ -12,6 +12,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -294,13 +295,17 @@ public Mem(StreamInput in) throws IOException { total = 0; } this.total = total; - long adjustedTotal = in.readLong(); - assert adjustedTotal >= 0 : "expected adjusted total memory to be positive, got: " + adjustedTotal; - if (adjustedTotal < 0) { - logger.error("negative adjusted total memory [{}] deserialized in memory stats", adjustedTotal); - adjustedTotal = 0; + if (in.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0)) { + long adjustedTotal = in.readLong(); + assert adjustedTotal >= 0 : "expected adjusted total memory to be positive, got: " + adjustedTotal; + if (adjustedTotal < 0) { + logger.error("negative adjusted total memory [{}] deserialized in memory stats", adjustedTotal); + adjustedTotal = 0; + } + this.adjustedTotal = adjustedTotal; + } else { + this.adjustedTotal = total; } - this.adjustedTotal = adjustedTotal; long free = in.readLong(); assert free >= 0 : "expected free memory to be positive, got: " + free; if (free < 0) { @@ -313,7 +318,9 @@ public Mem(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { out.writeLong(total); - out.writeLong(adjustedTotal); + if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0)) { + out.writeLong(adjustedTotal); + } out.writeLong(free); } diff --git a/server/src/main/java/org/elasticsearch/script/ScriptContextStats.java b/server/src/main/java/org/elasticsearch/script/ScriptContextStats.java index e726b63bfcd31..5e070690b97ee 100644 --- a/server/src/main/java/org/elasticsearch/script/ScriptContextStats.java +++ b/server/src/main/java/org/elasticsearch/script/ScriptContextStats.java @@ -9,6 +9,7 @@ package org.elasticsearch.script; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -58,8 +59,10 @@ public static ScriptContextStats read(StreamInput in) throws IOException { var compilations = in.readVLong(); var cacheEvictions = in.readVLong(); var compilationLimitTriggered = in.readVLong(); - TimeSeries compilationsHistory = new TimeSeries(in); - TimeSeries cacheEvictionsHistory = new TimeSeries(in); + TimeSeries compilationsHistory; + TimeSeries cacheEvictionsHistory; + compilationsHistory = new TimeSeries(in); + cacheEvictionsHistory = new TimeSeries(in); return new ScriptContextStats( context, compilations, @@ -88,8 +91,10 @@ public void writeTo(StreamOutput out) throws IOException { out.writeVLong(compilations); out.writeVLong(cacheEvictions); out.writeVLong(compilationLimitTriggered); - compilationsHistory.writeTo(out); - cacheEvictionsHistory.writeTo(out); + if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_0_0)) { + compilationsHistory.writeTo(out); + cacheEvictionsHistory.writeTo(out); + } } public String getContext() { diff --git a/server/src/main/java/org/elasticsearch/search/SearchHit.java b/server/src/main/java/org/elasticsearch/search/SearchHit.java index b381b828ca8d7..31429dd91d9a9 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchHit.java +++ b/server/src/main/java/org/elasticsearch/search/SearchHit.java @@ -204,6 +204,9 @@ public static SearchHit readFrom(StreamInput in, boolean pooled) throws IOExcept rank = NO_RANK; } final Text id = in.readOptionalText(); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + in.readOptionalText(); + } final NestedIdentity nestedIdentity = in.readOptionalWriteable(NestedIdentity::new); final long version = in.readLong(); final long seqNo = in.readZLong(); @@ -315,6 +318,9 @@ public void writeTo(StreamOutput out) throws IOException { throw new IllegalArgumentException("cannot serialize [rank] to version [" + out.getTransportVersion().toReleaseVersion() + "]"); } out.writeOptionalText(id); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalText(SINGLE_MAPPING_TYPE); + } out.writeOptionalWriteable(nestedIdentity); out.writeLong(version); out.writeZLong(seqNo); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java index d7c788c9a3533..26da58334e16b 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalBinaryRange.java @@ -10,6 +10,7 @@ package org.elasticsearch.search.aggregations.bucket.range; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.core.Releasables; @@ -58,7 +59,9 @@ private static String generateKey(BytesRef from, BytesRef to, DocValueFormat for } private static Bucket createFromStream(StreamInput in, DocValueFormat format) throws IOException { - String key = in.readOptionalString(); + // NOTE: the key is required in version == 8.0.0, + // while it is optional for all subsequent versions. + String key = in.getTransportVersion().equals(TransportVersions.V_8_0_0) ? in.readString() : in.readOptionalString(); BytesRef from = in.readOptional(StreamInput::readBytesRef); BytesRef to = in.readOptional(StreamInput::readBytesRef); long docCount = in.readLong(); @@ -69,7 +72,11 @@ private static Bucket createFromStream(StreamInput in, DocValueFormat format) th @Override public void writeTo(StreamOutput out) throws IOException { - out.writeOptionalString(key); + if (out.getTransportVersion().equals(TransportVersions.V_8_0_0)) { + out.writeString(key == null ? generateKey(from, to, format) : key); + } else { + out.writeOptionalString(key); + } out.writeOptional(StreamOutput::writeBytesRef, from); out.writeOptional(StreamOutput::writeBytesRef, to); out.writeLong(docCount); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java index 01076668674e5..b0ddc3e47354d 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java @@ -8,6 +8,7 @@ */ package org.elasticsearch.search.aggregations.bucket.range; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.core.Releasables; @@ -137,7 +138,13 @@ private static String generateKey(double from, double to, DocValueFormat format) @Override public void writeTo(StreamOutput out) throws IOException { - out.writeOptionalString(key); + // NOTE: the key is required in version == 8.0.0, + // while it is optional for all subsequent versions. + if (out.getTransportVersion().equals(TransportVersions.V_8_0_0)) { + out.writeString(key == null ? generateKey(from, to, format) : key); + } else { + out.writeOptionalString(key); + } out.writeDouble(from); out.writeOptionalDouble(from); out.writeDouble(to); @@ -223,7 +230,9 @@ public InternalRange(StreamInput in) throws IOException { int size = in.readVInt(); List ranges = new ArrayList<>(size); for (int i = 0; i < size; i++) { - final String key = in.readOptionalString(); + // NOTE: the key is required in version == 8.0.0, + // while it is optional for all subsequent versions. + final String key = in.getTransportVersion().equals(TransportVersions.V_8_0_0) ? in.readString() : in.readOptionalString(); double from = in.readDouble(); final Double originalFrom = in.readOptionalDouble(); if (originalFrom != null) { diff --git a/server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java b/server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java index 0bdfb6187d142..32ac446b85fdc 100644 --- a/server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java +++ b/server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java @@ -20,6 +20,7 @@ import org.elasticsearch.cluster.metadata.AliasMetadata; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.common.CheckedBiConsumer; +import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.hash.MessageDigests; @@ -54,6 +55,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -304,6 +306,15 @@ public ShardSearchRequest(StreamInput in) throws IOException { source.subSearches(subSearchSourceBuilders); } } + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types no longer relevant so ignore + String[] types = in.readStringArray(); + if (types.length > 0) { + throw new IllegalStateException( + "types are no longer supported in search requests but found [" + Arrays.toString(types) + "]" + ); + } + } aliasFilter = AliasFilter.readFrom(in); indexBoost = in.readFloat(); nowInMillis = in.readVLong(); @@ -351,6 +362,10 @@ protected final void innerWriteTo(StreamOutput out, boolean asKey) throws IOExce } out.writeNamedWriteableCollection(rankQueryBuilders); } + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + // types not supported so send an empty array to previous versions + out.writeStringArray(Strings.EMPTY_ARRAY); + } aliasFilter.writeTo(out); out.writeFloat(indexBoost); if (asKey == false) { diff --git a/server/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java b/server/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java index 422a99e7d72f5..d703eaed1dc95 100644 --- a/server/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java @@ -21,6 +21,7 @@ import org.apache.lucene.util.BitSet; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.geo.GeoPoint; @@ -39,6 +40,7 @@ import org.elasticsearch.index.fielddata.plain.LatLonPointIndexFieldData; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.query.GeoValidationMethod; +import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryRewriteContext; import org.elasticsearch.index.query.SearchExecutionContext; import org.elasticsearch.search.DocValueFormat; @@ -161,6 +163,14 @@ public GeoDistanceSortBuilder(StreamInput in) throws IOException { unit = DistanceUnit.readFromStream(in); order = SortOrder.readFromStream(in); sortMode = in.readOptionalWriteable(SortMode::readFromStream); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + if (in.readOptionalNamedWriteable(QueryBuilder.class) != null || in.readOptionalString() != null) { + throw new IOException( + "the [sort] options [nested_path] and [nested_filter] are removed in 8.x, " + "please use [nested] instead" + ); + } + + } nestedSort = in.readOptionalWriteable(NestedSortBuilder::new); validation = GeoValidationMethod.readFromStream(in); ignoreUnmapped = in.readBoolean(); @@ -174,6 +184,10 @@ public void writeTo(StreamOutput out) throws IOException { unit.writeTo(out); order.writeTo(out); out.writeOptionalWriteable(sortMode); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalNamedWriteable(null); + out.writeOptionalString(null); + } out.writeOptionalWriteable(nestedSort); validation.writeTo(out); out.writeBoolean(ignoreUnmapped); diff --git a/server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java b/server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java index a8a06008c3971..106b483790fe3 100644 --- a/server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java @@ -16,6 +16,7 @@ import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRefBuilder; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -31,6 +32,7 @@ import org.elasticsearch.index.fielddata.fieldcomparator.BytesRefFieldComparatorSource; import org.elasticsearch.index.fielddata.fieldcomparator.DoubleValuesComparatorSource; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryRewriteContext; import org.elasticsearch.index.query.QueryShardException; import org.elasticsearch.index.query.SearchExecutionContext; @@ -110,6 +112,13 @@ public ScriptSortBuilder(StreamInput in) throws IOException { type = ScriptSortType.readFromStream(in); order = SortOrder.readFromStream(in); sortMode = in.readOptionalWriteable(SortMode::readFromStream); + if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) { + if (in.readOptionalNamedWriteable(QueryBuilder.class) != null || in.readOptionalString() != null) { + throw new IOException( + "the [sort] options [nested_path] and [nested_filter] are removed in 8.x, " + "please use [nested] instead" + ); + } + } nestedSort = in.readOptionalWriteable(NestedSortBuilder::new); } @@ -119,6 +128,10 @@ public void writeTo(StreamOutput out) throws IOException { type.writeTo(out); order.writeTo(out); out.writeOptionalWriteable(sortMode); + if (out.getTransportVersion().before(TransportVersions.V_8_0_0)) { + out.writeOptionalString(null); + out.writeOptionalNamedWriteable(null); + } out.writeOptionalWriteable(nestedSort); } diff --git a/server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java b/server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java index 9b252437cb004..a47c3482be3fe 100644 --- a/server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java @@ -679,6 +679,6 @@ protected boolean doEquals(KnnVectorQueryBuilder other) { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersion.minimumCompatible(); + return TransportVersions.V_8_0_0; } } diff --git a/server/src/main/java/org/elasticsearch/transport/Header.java b/server/src/main/java/org/elasticsearch/transport/Header.java index 3de52591cdd04..468bdb6e58e9f 100644 --- a/server/src/main/java/org/elasticsearch/transport/Header.java +++ b/server/src/main/java/org/elasticsearch/transport/Header.java @@ -10,6 +10,7 @@ package org.elasticsearch.transport; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.core.Tuple; @@ -95,7 +96,7 @@ void finishParsingHeader(StreamInput input) throws IOException { this.headers = ThreadContext.readHeadersFromStream(input); if (isRequest()) { - if (version.equals(TransportHandshaker.V8_HANDSHAKE_VERSION)) { + if (version.before(TransportVersions.V_8_0_0)) { // discard features input.readStringArray(); } diff --git a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java index ffd3866d64536..5243d371ae96c 100644 --- a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java +++ b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java @@ -14,6 +14,7 @@ import org.apache.logging.log4j.Logger; import org.apache.lucene.util.BytesRef; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionListener; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.Strings; @@ -297,8 +298,7 @@ public static BytesReference serialize( byteStreamOutput.skip(TcpHeader.HEADER_SIZE); threadContext.writeTo(byteStreamOutput); if (messageDirection == MessageDirection.REQUEST) { - // although we won't write a v8 handshake in production, tests for reading v8 handshakes need this condition for writing - if (version.equals(TransportHandshaker.V8_HANDSHAKE_VERSION)) { + if (version.before(TransportVersions.V_8_0_0)) { // empty features array byteStreamOutput.writeStringArray(Strings.EMPTY_ARRAY); } diff --git a/server/src/main/java/org/elasticsearch/transport/TransportLogger.java b/server/src/main/java/org/elasticsearch/transport/TransportLogger.java index 56338808deae2..17338289a15fa 100644 --- a/server/src/main/java/org/elasticsearch/transport/TransportLogger.java +++ b/server/src/main/java/org/elasticsearch/transport/TransportLogger.java @@ -11,6 +11,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.util.concurrent.ThreadContext; @@ -89,6 +90,10 @@ private static String format(TcpChannel channel, BytesReference message, String ThreadContext.readHeadersFromStream(streamInput); if (isRequest) { + if (version.before(TransportVersions.V_8_0_0)) { + // discard features + streamInput.readStringArray(); + } sb.append(", action: ").append(streamInput.readString()); } sb.append(']');