diff --git a/modules/lang-mustache/src/internalClusterTest/java/org/elasticsearch/script/mustache/MultiSearchTemplateIT.java b/modules/lang-mustache/src/internalClusterTest/java/org/elasticsearch/script/mustache/MultiSearchTemplateIT.java index 6a418d2265a48..2c94f1d58f4b3 100644 --- a/modules/lang-mustache/src/internalClusterTest/java/org/elasticsearch/script/mustache/MultiSearchTemplateIT.java +++ b/modules/lang-mustache/src/internalClusterTest/java/org/elasticsearch/script/mustache/MultiSearchTemplateIT.java @@ -9,7 +9,7 @@ package org.elasticsearch.script.mustache; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.common.Strings; @@ -210,7 +210,7 @@ public void testCCSCheckCompatibility() throws Exception { "[fail_before_current_version] was released first in version %s, failed compatibility " + "check trying to send it to node with version %s", FailBeforeCurrentVersionQueryBuilder.FUTURE_VERSION.toReleaseVersion(), - TransportVersions.MINIMUM_CCS_VERSION.toReleaseVersion() + TransportVersion.minimumCCSVersion().toReleaseVersion() ); String actualCause = ex.getCause().getMessage(); assertEquals(expectedCause, actualCause); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/search/msearch/MultiSearchIT.java b/server/src/internalClusterTest/java/org/elasticsearch/search/msearch/MultiSearchIT.java index 5e4ae084eaa4a..88e7606ced277 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/search/msearch/MultiSearchIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/search/msearch/MultiSearchIT.java @@ -10,7 +10,6 @@ package org.elasticsearch.search.msearch; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.action.search.MultiSearchRequest; import org.elasticsearch.action.search.MultiSearchResponse.Item; import org.elasticsearch.common.settings.Settings; @@ -93,7 +92,7 @@ public void testSimpleMultiSearchMoreRequests() throws Exception { * TransportVersions.MINIMUM_CCS_VERSION works */ public void testCCSCheckCompatibility() throws Exception { - TransportVersion transportVersion = TransportVersionUtils.getNextVersion(TransportVersions.MINIMUM_CCS_VERSION, true); + TransportVersion transportVersion = TransportVersionUtils.getNextVersion(TransportVersion.minimumCCSVersion(), true); createIndex("test"); ensureGreen(); prepareIndex("test").setId("1").setSource("field", "xxx").get(); diff --git a/server/src/main/java/org/elasticsearch/TransportVersion.java b/server/src/main/java/org/elasticsearch/TransportVersion.java index 3f76760f317f4..f92ab4949487a 100644 --- a/server/src/main/java/org/elasticsearch/TransportVersion.java +++ b/server/src/main/java/org/elasticsearch/TransportVersion.java @@ -61,8 +61,8 @@ * numbers. So the minimum compatible version is hard-coded as the transport version used by the highest minor release of the previous * major version. {@link TransportVersions#MINIMUM_COMPATIBLE} should be updated appropriately whenever a major release happens. *

- * The earliest CCS compatible version is hardcoded at {@link TransportVersions#MINIMUM_CCS_VERSION}, as the transport version used by the - * previous minor release. This should be updated appropriately whenever a minor release happens. + * The earliest CCS compatible version is hardcoded at {@link TransportVersion.VersionsHolder#MINIMUM_CCS_VERSION}, as the transport version + * used by the previous minor release. This should be updated appropriately whenever a minor release happens. * *

Scope of usefulness of {@link TransportVersion}

* {@link TransportVersion} is a property of the transport connection between a pair of nodes, and should not be used as an indication of @@ -274,6 +274,14 @@ public static TransportVersion current() { return VersionsHolder.CURRENT; } + /** + * Reference to the minimum transport version that can be used with CCS. + * This should be the transport version used by the previous minor release. + */ + public static TransportVersion minimumCCSVersion() { + return VersionsHolder.MINIMUM_CCS_VERSION; + } + /** * Sorted list of all defined transport versions */ @@ -422,7 +430,9 @@ private static class VersionsHolder { private static final Map ALL_VERSIONS_BY_ID; private static final Map ALL_VERSIONS_BY_NAME; private static final IntFunction VERSION_LOOKUP_BY_RELEASE; + private static final TransportVersion CURRENT; + private static final TransportVersion MINIMUM_CCS_VERSION; static { // collect all the transport versions from server and es modules/plugins (defined in server) @@ -460,7 +470,9 @@ private static class VersionsHolder { ALL_VERSIONS = Collections.unmodifiableList(allVersions); ALL_VERSIONS_BY_ID = ALL_VERSIONS.stream().collect(Collectors.toUnmodifiableMap(TransportVersion::id, Function.identity())); ALL_VERSIONS_BY_NAME = Collections.unmodifiableMap(allVersionsByName); + CURRENT = ALL_VERSIONS.getLast(); + MINIMUM_CCS_VERSION = ALL_VERSIONS_BY_ID.get(9112006); } private static List addTransportVersions(Collection addFrom, List addTo) { diff --git a/server/src/main/java/org/elasticsearch/TransportVersions.java b/server/src/main/java/org/elasticsearch/TransportVersions.java index da61d44264571..2cfc6a0b9264f 100644 --- a/server/src/main/java/org/elasticsearch/TransportVersions.java +++ b/server/src/main/java/org/elasticsearch/TransportVersions.java @@ -212,7 +212,6 @@ static TransportVersion def(int id) { public static final TransportVersion ML_INFERENCE_COHERE_API_VERSION_8_19 = def(8_841_0_60); public static final TransportVersion ESQL_DOCUMENTS_FOUND_AND_VALUES_LOADED_8_19 = def(8_841_0_61); public static final TransportVersion ESQL_PROFILE_INCLUDE_PLAN_8_19 = def(8_841_0_62); - public static final TransportVersion ESQL_FIXED_INDEX_LIKE_8_19 = def(8_841_0_64); public static final TransportVersion INITIAL_ELASTICSEARCH_8_19_1 = def(8_841_0_65); public static final TransportVersion INITIAL_ELASTICSEARCH_8_19_2 = def(8_841_0_66); public static final TransportVersion INITIAL_ELASTICSEARCH_8_19_3 = def(8_841_0_67); @@ -335,27 +334,6 @@ static TransportVersion def(int id) { public static final TransportVersion ML_INFERENCE_COHERE_API_VERSION = def(9_110_0_00); public static final TransportVersion ESQL_PROFILE_INCLUDE_PLAN = def(9_111_0_00); public static final TransportVersion MAPPINGS_IN_DATA_STREAMS = def(9_112_0_00); - public static final TransportVersion ESQL_FIXED_INDEX_LIKE_9_1 = def(9_112_0_02); - public static final TransportVersion ESQL_SAMPLE_OPERATOR_STATUS_9_1 = def(9_112_0_03); - public static final TransportVersion INITIAL_ELASTICSEARCH_9_1_1 = def(9_112_0_04); - public static final TransportVersion INITIAL_ELASTICSEARCH_9_1_2 = def(9_112_0_05); - public static final TransportVersion INITIAL_ELASTICSEARCH_9_1_3 = def(9_112_0_06); - public static final TransportVersion INITIAL_ELASTICSEARCH_9_1_4 = def(9_112_0_07); - public static final TransportVersion PROJECT_STATE_REGISTRY_RECORDS_DELETIONS = def(9_113_0_00); - public static final TransportVersion ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE = def(9_114_0_00); - public static final TransportVersion ML_INFERENCE_IBM_WATSONX_COMPLETION_ADDED = def(9_115_0_00); - public static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = def(9_117_0_00); - public static final TransportVersion ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE = def(9_118_0_00); - public static final TransportVersion ESQL_FIXED_INDEX_LIKE = def(9_119_0_00); - public static final TransportVersion LOOKUP_JOIN_CCS = def(9_120_0_00); - public static final TransportVersion NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO = def(9_121_0_00); - public static final TransportVersion ESQL_CATEGORIZE_OPTIONS = def(9_122_0_00); - public static final TransportVersion ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED = def(9_123_0_00); - public static final TransportVersion PROJECT_STATE_REGISTRY_ENTRY = def(9_124_0_00); - public static final TransportVersion ML_INFERENCE_LLAMA_ADDED = def(9_125_0_00); - public static final TransportVersion SHARD_WRITE_LOAD_IN_CLUSTER_INFO = def(9_126_0_00); - public static final TransportVersion ESQL_SAMPLE_OPERATOR_STATUS = def(9_127_0_00); - public static final TransportVersion ALLOCATION_DECISION_NOT_PREFERRED = def(9_145_0_00); public static final TransportVersion ESQL_QUALIFIERS_IN_ATTRIBUTES = def(9_146_0_00); /* @@ -419,12 +397,6 @@ static TransportVersion def(int id) { */ public static final TransportVersion MINIMUM_COMPATIBLE = INITIAL_ELASTICSEARCH_8_19; - /** - * Reference to the minimum transport version that can be used with CCS. - * This should be the transport version used by the previous minor release. - */ - public static final TransportVersion MINIMUM_CCS_VERSION = INITIAL_ELASTICSEARCH_9_1_3; - /** * Sorted list of all versions defined in this class */ diff --git a/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java b/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java index 4e3544f0170cb..0e9b0811015d1 100644 --- a/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java +++ b/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java @@ -10,7 +10,7 @@ package org.elasticsearch.action.search; import org.apache.lucene.util.BytesRef; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.InputStreamStreamInput; @@ -127,14 +127,14 @@ private static SearchContextIdForNode innerReadSearchContextIdForNode(String con */ public static void checkCCSVersionCompatibility(Writeable writeableRequest) { try { - writeableRequest.writeTo(new VersionCheckingStreamOutput(TransportVersions.MINIMUM_CCS_VERSION)); + writeableRequest.writeTo(new VersionCheckingStreamOutput(TransportVersion.minimumCCSVersion())); } catch (Exception e) { // if we cannot serialize, raise this as an error to indicate to the caller that CCS has problems with this request throw new IllegalArgumentException( "[" + writeableRequest.getClass() + "] is not compatible with version " - + TransportVersions.MINIMUM_CCS_VERSION.toReleaseVersion() + + TransportVersion.minimumCCSVersion().toReleaseVersion() + " and the '" + SearchService.CCS_VERSION_CHECK_SETTING.getKey() + "' setting is enabled.", diff --git a/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java b/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java index 810a853c56f90..226b90a15adea 100644 --- a/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java +++ b/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java @@ -9,6 +9,7 @@ package org.elasticsearch.cluster; +import org.elasticsearch.TransportVersion; import org.elasticsearch.TransportVersions; import org.elasticsearch.cluster.routing.RecoverySource; import org.elasticsearch.cluster.routing.ShardRouting; @@ -48,6 +49,11 @@ public class ClusterInfo implements ChunkedToXContent, Writeable { public static final ClusterInfo EMPTY = new ClusterInfo(); + private static final TransportVersion SHARD_WRITE_LOAD_IN_CLUSTER_INFO = TransportVersion.fromName("shard_write_load_in_cluster_info"); + private static final TransportVersion NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO = TransportVersion.fromName( + "node_usage_stats_for_thread_pools_in_cluster_info" + ); + private final Map leastAvailableSpaceUsage; private final Map mostAvailableSpaceUsage; final Map shardSizes; @@ -109,12 +115,12 @@ public ClusterInfo(StreamInput in) throws IOException { } else { this.estimatedHeapUsages = Map.of(); } - if (in.getTransportVersion().onOrAfter(TransportVersions.NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO)) { + if (in.getTransportVersion().supports(NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO)) { this.nodeUsageStatsForThreadPools = in.readImmutableMap(NodeUsageStatsForThreadPools::new); } else { this.nodeUsageStatsForThreadPools = Map.of(); } - if (in.getTransportVersion().onOrAfter(TransportVersions.SHARD_WRITE_LOAD_IN_CLUSTER_INFO)) { + if (in.getTransportVersion().supports(SHARD_WRITE_LOAD_IN_CLUSTER_INFO)) { this.shardWriteLoads = in.readImmutableMap(ShardId::new, StreamInput::readDouble); } else { this.shardWriteLoads = Map.of(); @@ -132,10 +138,10 @@ public void writeTo(StreamOutput out) throws IOException { if (out.getTransportVersion().onOrAfter(TransportVersions.HEAP_USAGE_IN_CLUSTER_INFO)) { out.writeMap(this.estimatedHeapUsages, StreamOutput::writeWriteable); } - if (out.getTransportVersion().onOrAfter(TransportVersions.NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO)) { + if (out.getTransportVersion().supports(NODE_USAGE_STATS_FOR_THREAD_POOLS_IN_CLUSTER_INFO)) { out.writeMap(this.nodeUsageStatsForThreadPools, StreamOutput::writeWriteable); } - if (out.getTransportVersion().onOrAfter(TransportVersions.SHARD_WRITE_LOAD_IN_CLUSTER_INFO)) { + if (out.getTransportVersion().supports(SHARD_WRITE_LOAD_IN_CLUSTER_INFO)) { out.writeMap(this.shardWriteLoads, StreamOutput::writeWriteable, StreamOutput::writeDouble); } } diff --git a/server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java b/server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java index 464c28a4cc834..3233e57b2bf2c 100644 --- a/server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java +++ b/server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java @@ -45,9 +45,14 @@ */ public class ProjectStateRegistry extends AbstractNamedDiffable implements Custom, NamedDiffable { public static final String TYPE = "projects_registry"; + private static final TransportVersion PROJECT_STATE_REGISTRY_ENTRY = TransportVersion.fromName("project_state_registry_entry"); public static final ProjectStateRegistry EMPTY = new ProjectStateRegistry(Collections.emptyMap(), Collections.emptySet(), 0); private static final Entry EMPTY_ENTRY = new Entry(Settings.EMPTY); + private static final TransportVersion PROJECT_STATE_REGISTRY_RECORDS_DELETIONS = TransportVersion.fromName( + "project_state_registry_records_deletions" + ); + private final Map projectsEntries; // Projects that have been marked for deletion based on their file-based setting private final Set projectsMarkedForDeletion; @@ -59,13 +64,13 @@ public static ProjectStateRegistry get(ClusterState clusterState) { } public ProjectStateRegistry(StreamInput in) throws IOException { - if (in.getTransportVersion().onOrAfter(TransportVersions.PROJECT_STATE_REGISTRY_ENTRY)) { + if (in.getTransportVersion().supports(PROJECT_STATE_REGISTRY_ENTRY)) { projectsEntries = in.readMap(ProjectId::readFrom, Entry::readFrom); } else { Map settingsMap = in.readMap(ProjectId::readFrom, Settings::readSettingsFromStream); projectsEntries = settingsMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> new Entry(e.getValue()))); } - if (in.getTransportVersion().onOrAfter(TransportVersions.PROJECT_STATE_REGISTRY_RECORDS_DELETIONS)) { + if (in.getTransportVersion().supports(PROJECT_STATE_REGISTRY_RECORDS_DELETIONS)) { projectsMarkedForDeletion = in.readCollectionAsImmutableSet(ProjectId::readFrom); projectsMarkedForDeletionGeneration = in.readVLong(); } else { @@ -135,7 +140,7 @@ public Iterator toXContentChunked(ToXContent.Params params } public static NamedDiff readDiffFrom(StreamInput in) throws IOException { - if (in.getTransportVersion().onOrAfter(TransportVersions.PROJECT_STATE_REGISTRY_ENTRY)) { + if (in.getTransportVersion().supports(PROJECT_STATE_REGISTRY_ENTRY)) { return new ProjectStateRegistryDiff(in); } return readDiffFrom(Custom.class, TYPE, in); @@ -161,7 +166,7 @@ public TransportVersion getMinimalSupportedVersion() { @Override public void writeTo(StreamOutput out) throws IOException { - if (out.getTransportVersion().onOrAfter(TransportVersions.PROJECT_STATE_REGISTRY_ENTRY)) { + if (out.getTransportVersion().supports(PROJECT_STATE_REGISTRY_ENTRY)) { out.writeMap(projectsEntries); } else { Map settingsMap = projectsEntries.entrySet() @@ -169,7 +174,7 @@ public void writeTo(StreamOutput out) throws IOException { .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().settings())); out.writeMap(settingsMap); } - if (out.getTransportVersion().onOrAfter(TransportVersions.PROJECT_STATE_REGISTRY_RECORDS_DELETIONS)) { + if (out.getTransportVersion().supports(PROJECT_STATE_REGISTRY_RECORDS_DELETIONS)) { out.writeCollection(projectsMarkedForDeletion); out.writeVLong(projectsMarkedForDeletionGeneration); } else { @@ -261,7 +266,7 @@ static class ProjectStateRegistryDiff implements NamedDiff { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.PROJECT_STATE_REGISTRY_ENTRY; + return PROJECT_STATE_REGISTRY_ENTRY; } @Override diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java index 441909e08a73c..40c9f8c5b4c85 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java @@ -9,7 +9,7 @@ package org.elasticsearch.cluster.routing.allocation.decider; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; @@ -115,8 +115,12 @@ enum Type implements Writeable { NOT_PREFERRED, YES; + private static final TransportVersion ALLOCATION_DECISION_NOT_PREFERRED = TransportVersion.fromName( + "allocation_decision_not_preferred" + ); + public static Type readFrom(StreamInput in) throws IOException { - if (in.getTransportVersion().onOrAfter(TransportVersions.ALLOCATION_DECISION_NOT_PREFERRED)) { + if (in.getTransportVersion().supports(ALLOCATION_DECISION_NOT_PREFERRED)) { return in.readEnum(Type.class); } else { int i = in.readVInt(); @@ -138,7 +142,7 @@ public static Type min(Type a, Type b) { @Override public void writeTo(StreamOutput out) throws IOException { - if (out.getTransportVersion().onOrAfter(TransportVersions.ALLOCATION_DECISION_NOT_PREFERRED)) { + if (out.getTransportVersion().supports(ALLOCATION_DECISION_NOT_PREFERRED)) { out.writeEnum(this); } else { out.writeVInt(switch (this) { diff --git a/server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java index a1eadb9ae7a5a..1452d08f307d3 100644 --- a/server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java @@ -46,6 +46,8 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder { + private static final TransportVersion PROJECT_STATE_REGISTRY_ENTRY = TransportVersion.fromName("project_state_registry_entry"); + @Override protected ClusterState.Custom makeTestChanges(ClusterState.Custom testInstance) { return mutate((ProjectStateRegistry) testInstance); @@ -94,7 +95,7 @@ public static Settings randomSettings() { public void testProjectStateRegistryBwcSerialization() throws IOException { ProjectStateRegistry projectStateRegistry = randomProjectStateRegistry(); - TransportVersion oldVersion = TransportVersionUtils.getPreviousVersion(TransportVersions.PROJECT_STATE_REGISTRY_ENTRY); + TransportVersion oldVersion = TransportVersionUtils.getPreviousVersion(PROJECT_STATE_REGISTRY_ENTRY); ClusterState.Custom serialized = copyInstance(projectStateRegistry, oldVersion); assertThat(serialized, equalTo(projectStateRegistry)); } diff --git a/x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/AsyncSearchActionIT.java b/x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/AsyncSearchActionIT.java index 91d35d79b7c87..e194759979ec4 100644 --- a/x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/AsyncSearchActionIT.java +++ b/x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/AsyncSearchActionIT.java @@ -11,7 +11,6 @@ import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.ResourceNotFoundException; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.TimeValue; @@ -679,7 +678,7 @@ public void testCCSCheckCompatibility() throws Exception { SubmitAsyncSearchRequest request = new SubmitAsyncSearchRequest(new SearchSourceBuilder().query(new DummyQueryBuilder() { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersionUtils.getNextVersion(TransportVersions.MINIMUM_CCS_VERSION, true); + return TransportVersionUtils.getNextVersion(TransportVersion.minimumCCSVersion(), true); } }), indexName); diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ccr/action/CcrStatsActionTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ccr/action/CcrStatsActionTests.java index b4389377dff34..217b22aec41c2 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ccr/action/CcrStatsActionTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ccr/action/CcrStatsActionTests.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.core.ccr.action; +import org.elasticsearch.TransportVersion; import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.core.TimeValue; @@ -56,6 +57,6 @@ public void testSerializationBwc() throws IOException { request.masterNodeTimeout(TimeValue.timeValueSeconds(randomFrom(20, 25, 30))); } assertSerialization(request, TransportVersionUtils.getPreviousVersion(TransportVersions.V_8_14_0)); - assertSerialization(request, TransportVersions.MINIMUM_CCS_VERSION); + assertSerialization(request, TransportVersion.minimumCCSVersion()); } } diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/termsenum/TransportTermsEnumActionTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/termsenum/TransportTermsEnumActionTests.java index 975d08eb45277..53683da16d8a1 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/termsenum/TransportTermsEnumActionTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/termsenum/TransportTermsEnumActionTests.java @@ -7,7 +7,6 @@ package org.elasticsearch.xpack.core.termsenum; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionListener; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.TimeValue; @@ -71,7 +70,7 @@ public void onFailure(final Exception e) { */ public void testCCSCheckCompatibility() throws Exception { TermsEnumRequest request = new TermsEnumRequest().field("field").timeout(TimeValue.timeValueSeconds(5)); - TransportVersion version = TransportVersionUtils.getNextVersion(TransportVersions.MINIMUM_CCS_VERSION, true); + TransportVersion version = TransportVersionUtils.getNextVersion(TransportVersion.minimumCCSVersion(), true); request.indexFilter(new DummyQueryBuilder() { @Override public TransportVersion getMinimalSupportedVersion() { diff --git a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/EsField.java b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/EsField.java index 87dadaed4da91..d328f7f7fb760 100644 --- a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/EsField.java +++ b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/EsField.java @@ -6,6 +6,7 @@ */ package org.elasticsearch.xpack.esql.core.type; +import org.elasticsearch.TransportVersion; import org.elasticsearch.TransportVersions; import org.elasticsearch.action.fieldcaps.IndexFieldCapabilities; import org.elasticsearch.common.io.stream.StreamInput; @@ -27,6 +28,10 @@ */ public class EsField implements Writeable { + private static final TransportVersion ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE = TransportVersion.fromName( + "esql_serialize_timeseries_field_type" + ); + /** * Fields in a TSDB can be either dimensions or metrics. This enum provides a way to store, serialize, and operate on those field * roles within the ESQL query processing pipeline. @@ -200,13 +205,13 @@ public void writeContent(StreamOutput out) throws IOException { } protected void writeTimeSeriesFieldType(StreamOutput out) throws IOException { - if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE)) { + if (out.getTransportVersion().supports(ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE)) { this.timeSeriesFieldType.writeTo(out); } } protected static TimeSeriesFieldType readTimeSeriesFieldType(StreamInput in) throws IOException { - if (in.getTransportVersion().onOrAfter(TransportVersions.ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE)) { + if (in.getTransportVersion().supports(ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE)) { return TimeSeriesFieldType.readFromStream(in); } else { return TimeSeriesFieldType.UNKNOWN; diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/SampleOperator.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/SampleOperator.java index 1395a0d0ad73c..f10709c793636 100644 --- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/SampleOperator.java +++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/SampleOperator.java @@ -8,7 +8,6 @@ package org.elasticsearch.compute.operator; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.Randomness; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; @@ -177,6 +176,8 @@ public record Status(long collectNanos, long emitNanos, int pagesProcessed, long Status::new ); + private static final TransportVersion ESQL_SAMPLE_OPERATOR_STATUS = TransportVersion.fromName("esql_sample_operator_status"); + Status(StreamInput streamInput) throws IOException { this( streamInput.readVLong(), @@ -248,8 +249,7 @@ public TransportVersion getMinimalSupportedVersion() { @Override public boolean supportsVersion(TransportVersion version) { - return version.onOrAfter(TransportVersions.ESQL_SAMPLE_OPERATOR_STATUS) - || version.isPatchFrom(TransportVersions.ESQL_SAMPLE_OPERATOR_STATUS_9_1); + return version.supports(ESQL_SAMPLE_OPERATOR_STATUS); } } } diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/Categorize.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/Categorize.java index b9785624ff512..7562dd91a27be 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/Categorize.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/Categorize.java @@ -7,7 +7,7 @@ package org.elasticsearch.xpack.esql.expression.function.grouping; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -77,6 +77,8 @@ public class Categorize extends GroupingFunction.NonEvaluatableGroupingFunction Map.ofEntries(entry(ANALYZER, KEYWORD), entry(OUTPUT_FORMAT, KEYWORD), entry(SIMILARITY_THRESHOLD, INTEGER)) ); + private static final TransportVersion ESQL_CATEGORIZE_OPTIONS = TransportVersion.fromName("esql_categorize_options"); + private final Expression field; private final Expression options; @@ -141,9 +143,7 @@ private Categorize(StreamInput in) throws IOException { this( Source.readFrom((PlanStreamInput) in), in.readNamedWriteable(Expression.class), - in.getTransportVersion().onOrAfter(TransportVersions.ESQL_CATEGORIZE_OPTIONS) - ? in.readOptionalNamedWriteable(Expression.class) - : null + in.getTransportVersion().supports(ESQL_CATEGORIZE_OPTIONS) ? in.readOptionalNamedWriteable(Expression.class) : null ); } @@ -151,7 +151,7 @@ private Categorize(StreamInput in) throws IOException { public void writeTo(StreamOutput out) throws IOException { source().writeTo(out); out.writeNamedWriteable(field); - if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_CATEGORIZE_OPTIONS)) { + if (out.getTransportVersion().supports(ESQL_CATEGORIZE_OPTIONS)) { out.writeOptionalNamedWriteable(options); } } diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/io/stream/PlanStreamWrapperQueryBuilder.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/io/stream/PlanStreamWrapperQueryBuilder.java index 9cdf193c56fef..72188253e8696 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/io/stream/PlanStreamWrapperQueryBuilder.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/io/stream/PlanStreamWrapperQueryBuilder.java @@ -9,7 +9,6 @@ import org.apache.lucene.search.Query; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -33,6 +32,8 @@ public class PlanStreamWrapperQueryBuilder implements QueryBuilder { PlanStreamWrapperQueryBuilder::new ); + private static final TransportVersion ESQL_FIXED_INDEX_LIKE = TransportVersion.fromName("esql_fixed_index_like"); + private final Configuration configuration; private final QueryBuilder next; @@ -55,7 +56,7 @@ public void writeTo(StreamOutput out) throws IOException { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.ESQL_FIXED_INDEX_LIKE; + return ESQL_FIXED_INDEX_LIKE; } @Override diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalRelation.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalRelation.java index a086ed89660a2..06f824b4764ef 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalRelation.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalRelation.java @@ -6,7 +6,7 @@ */ package org.elasticsearch.xpack.esql.plan.logical.local; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -29,6 +29,10 @@ public class LocalRelation extends LeafPlan { LocalRelation::new ); + private static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = TransportVersion.fromName( + "esql_local_relation_with_new_blocks" + ); + private final List output; private final LocalSupplier supplier; @@ -41,7 +45,7 @@ public LocalRelation(Source source, List output, LocalSupplier suppli public LocalRelation(StreamInput in) throws IOException { super(Source.readFrom((PlanStreamInput) in)); this.output = in.readNamedWriteableCollectionAsList(Attribute.class); - if (in.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (in.getTransportVersion().supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { this.supplier = in.readNamedWriteable(LocalSupplier.class); } else { this.supplier = LocalSourceExec.readLegacyLocalSupplierFrom((PlanStreamInput) in); @@ -52,7 +56,7 @@ public LocalRelation(StreamInput in) throws IOException { public void writeTo(StreamOutput out) throws IOException { source().writeTo(out); out.writeNamedWriteableCollection(output); - if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (out.getTransportVersion().supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { out.writeNamedWriteable(supplier); } else { if (hasEmptySupplier()) { diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/physical/LocalSourceExec.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/physical/LocalSourceExec.java index 5994ce813c851..48677db3f4325 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/physical/LocalSourceExec.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/physical/LocalSourceExec.java @@ -7,7 +7,7 @@ package org.elasticsearch.xpack.esql.plan.physical; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -31,6 +31,10 @@ public class LocalSourceExec extends LeafExec { LocalSourceExec::new ); + private static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = TransportVersion.fromName( + "esql_local_relation_with_new_blocks" + ); + private final List output; private final LocalSupplier supplier; @@ -43,7 +47,7 @@ public LocalSourceExec(Source source, List output, LocalSupplier supp public LocalSourceExec(StreamInput in) throws IOException { super(Source.readFrom((PlanStreamInput) in)); this.output = in.readNamedWriteableCollectionAsList(Attribute.class); - if (in.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (in.getTransportVersion().supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { this.supplier = in.readNamedWriteable(LocalSupplier.class); } else { this.supplier = readLegacyLocalSupplierFrom((PlanStreamInput) in); @@ -67,7 +71,7 @@ public static LocalSupplier readLegacyLocalSupplierFrom(PlanStreamInput in) thro public void writeTo(StreamOutput out) throws IOException { source().writeTo(out); out.writeNamedWriteableCollection(output); - if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (out.getTransportVersion().supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { out.writeNamedWriteable(supplier); } else { if (supplier == EmptyLocalSupplier.EMPTY) { diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java index 3e4704bad0c45..54b1464ba012e 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java @@ -9,7 +9,7 @@ import org.elasticsearch.ElasticsearchException; import org.elasticsearch.ExceptionsHelper; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.fieldcaps.FieldCapabilitiesFailure; import org.elasticsearch.action.search.ShardSearchFailure; @@ -93,6 +93,8 @@ public class EsqlSession { private static final Logger LOGGER = LogManager.getLogger(EsqlSession.class); + private static final TransportVersion LOOKUP_JOIN_CCS = TransportVersion.fromName("lookup_join_ccs"); + /** * Interface for running the underlying plan. * Abstracts away the underlying execution engine. @@ -595,7 +597,7 @@ private void validateRemoteVersions(EsqlExecutionInfo executionInfo) { if (clusterAlias.equals(RemoteClusterAware.LOCAL_CLUSTER_GROUP_KEY) == false) { // No need to check local, obviously var connection = remoteClusterService.getConnection(clusterAlias); - if (connection != null && connection.getTransportVersion().before(TransportVersions.LOOKUP_JOIN_CCS)) { + if (connection != null && connection.getTransportVersion().supports(LOOKUP_JOIN_CCS) == false) { skipClusterOrError( clusterAlias, executionInfo, diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/CopyingLocalSupplierTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/CopyingLocalSupplierTests.java index b5503c5c6cc27..d9a9e1481b793 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/CopyingLocalSupplierTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/CopyingLocalSupplierTests.java @@ -8,13 +8,16 @@ package org.elasticsearch.xpack.esql.plan.logical.local; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.compute.data.Block; import static org.hamcrest.Matchers.equalTo; public class CopyingLocalSupplierTests extends LocalSupplierTests { + private static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = TransportVersion.fromName( + "esql_local_relation_with_new_blocks" + ); + @Override protected LocalSupplier createTestInstance() { Block[] blocks = randomList(1, 10, LocalSupplierTests::randomBlock).toArray(Block[]::new); @@ -23,7 +26,7 @@ protected LocalSupplier createTestInstance() { protected void assertOnBWCObject(LocalSupplier testInstance, LocalSupplier bwcDeserializedObject, TransportVersion version) { assertNotSame(version.toString(), bwcDeserializedObject, testInstance); - if (version.onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (version.supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { assertThat(testInstance, equalTo(bwcDeserializedObject)); } else { assertTrue(version.toString(), bwcDeserializedObject instanceof ImmediateLocalSupplier); diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/EmptyLocalSupplierTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/EmptyLocalSupplierTests.java index c1a12e50417df..16e61947d1a35 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/EmptyLocalSupplierTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/EmptyLocalSupplierTests.java @@ -8,7 +8,6 @@ package org.elasticsearch.xpack.esql.plan.logical.local; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.xpack.esql.io.stream.PlanStreamOutput; @@ -18,6 +17,10 @@ public class EmptyLocalSupplierTests extends LocalSupplierTests { + private static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = TransportVersion.fromName( + "esql_local_relation_with_new_blocks" + ); + @Override protected LocalSupplier createTestInstance() { return EmptyLocalSupplier.EMPTY; @@ -31,7 +34,7 @@ protected void assertOnBWCObject(LocalSupplier testInstance, LocalSupplier bwcDe @Override protected void writeTo(BytesStreamOutput output, LocalSupplier instance, TransportVersion version) throws IOException { - if (version.onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (version.supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { new PlanStreamOutput(output, null).writeNamedWriteable(instance); } else { output.writeVInt(0); diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalSupplierTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalSupplierTests.java index 1d144b995711f..299bd53426a25 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalSupplierTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/local/LocalSupplierTests.java @@ -30,6 +30,10 @@ public abstract class LocalSupplierTests extends AbstractWireTestCase { + private static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = TransportVersion.fromName( + "esql_local_relation_with_new_blocks" + ); + private static final NavigableSet DEFAULT_BWC_VERSIONS = getAllBWCVersions(); private static final BlockFactory BLOCK_FACTORY = BlockFactory.getInstance( @@ -70,7 +74,7 @@ protected LocalSupplier copyInstance(LocalSupplier instance, TransportVersion ve } protected void writeTo(BytesStreamOutput output, LocalSupplier instance, TransportVersion version) throws IOException { - if (version.onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (version.supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { new PlanStreamOutput(output, null).writeNamedWriteable(instance); } else { instance.writeTo(new PlanStreamOutput(output, null)); @@ -78,7 +82,7 @@ protected void writeTo(BytesStreamOutput output, LocalSupplier instance, Transpo } protected LocalSupplier readFrom(StreamInput input, TransportVersion version) throws IOException { - if (version.onOrAfter(TransportVersions.ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { + if (version.supports(ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS)) { return new PlanStreamInput(input, getNamedWriteableRegistry(), null).readNamedWriteable(LocalSupplier.class); } else { return LocalSourceExec.readLegacyLocalSupplierFrom(new PlanStreamInput(input, getNamedWriteableRegistry(), null)); diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankServiceSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankServiceSettings.java index e302ab4d3606d..06ce78142a159 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankServiceSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankServiceSettings.java @@ -8,7 +8,6 @@ package org.elasticsearch.xpack.inference.services.azureaistudio.rerank; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -27,6 +26,9 @@ public class AzureAiStudioRerankServiceSettings extends AzureAiStudioServiceSettings { public static final String NAME = "azure_ai_studio_rerank_service_settings"; + private static final TransportVersion ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED = TransportVersion.fromName( + "ml_inference_azure_ai_studio_rerank_added" + ); public static AzureAiStudioRerankServiceSettings fromMap(Map map, ConfigurationParseContext context) { final var validationException = new ValidationException(); @@ -80,7 +82,7 @@ public String getWriteableName() { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED; + return ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED; } @Override diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankTaskSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankTaskSettings.java index 1faeee4a10f16..faf486a5447e5 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankTaskSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureaistudio/rerank/AzureAiStudioRerankTaskSettings.java @@ -8,7 +8,6 @@ package org.elasticsearch.xpack.inference.services.azureaistudio.rerank; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -32,6 +31,9 @@ */ public class AzureAiStudioRerankTaskSettings implements TaskSettings { public static final String NAME = "azure_ai_studio_rerank_task_settings"; + private static final TransportVersion ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED = TransportVersion.fromName( + "ml_inference_azure_ai_studio_rerank_added" + ); public static AzureAiStudioRerankTaskSettings fromMap(Map map) { final var validationException = new ValidationException(); @@ -94,7 +96,7 @@ public String getWriteableName() { @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED; + return ML_INFERENCE_AZURE_AI_STUDIO_RERANK_ADDED; } @Override diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/CustomServiceSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/CustomServiceSettings.java index 8b799e472d512..7df514e05d921 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/CustomServiceSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/CustomServiceSettings.java @@ -66,6 +66,10 @@ public class CustomServiceSettings extends FilteredXContentObject implements Ser private static final String RESPONSE_SCOPE = String.join(".", ModelConfigurations.SERVICE_SETTINGS, RESPONSE); private static final int DEFAULT_EMBEDDING_BATCH_SIZE = 10; + private static final TransportVersion ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE = TransportVersion.fromName( + "ml_inference_custom_service_embedding_type" + ); + public static CustomServiceSettings fromMap(Map map, ConfigurationParseContext context, TaskType taskType) { ValidationException validationException = new ValidationException(); @@ -169,7 +173,7 @@ public TextEmbeddingSettings(StreamInput in) throws IOException { this.dimensions = in.readOptionalVInt(); this.maxInputTokens = in.readOptionalVInt(); - if (in.getTransportVersion().before(TransportVersions.ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { + if (in.getTransportVersion().supports(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE) == false) { in.readOptionalEnum(DenseVectorFieldMapper.ElementType.class); } } @@ -180,7 +184,7 @@ public void writeTo(StreamOutput out) throws IOException { out.writeOptionalVInt(dimensions); out.writeOptionalVInt(maxInputTokens); - if (out.getTransportVersion().before(TransportVersions.ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { + if (out.getTransportVersion().supports(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE) == false) { out.writeOptionalEnum(null); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/response/TextEmbeddingResponseParser.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/response/TextEmbeddingResponseParser.java index 51f7ef29be666..a2eebd9127a08 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/response/TextEmbeddingResponseParser.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/custom/response/TextEmbeddingResponseParser.java @@ -7,7 +7,7 @@ package org.elasticsearch.xpack.inference.services.custom.response; -import org.elasticsearch.TransportVersions; +import org.elasticsearch.TransportVersion; import org.elasticsearch.common.Strings; import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.io.stream.StreamInput; @@ -37,6 +37,10 @@ public class TextEmbeddingResponseParser extends BaseCustomResponseParser { public static final String TEXT_EMBEDDING_PARSER_EMBEDDINGS = "text_embeddings"; public static final String EMBEDDING_TYPE = "embedding_type"; + private static final TransportVersion ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE = TransportVersion.fromName( + "ml_inference_custom_service_embedding_type" + ); + public static TextEmbeddingResponseParser fromMap( Map responseParserMap, String scope, @@ -79,7 +83,7 @@ public TextEmbeddingResponseParser(String textEmbeddingsPath, CustomServiceEmbed public TextEmbeddingResponseParser(StreamInput in) throws IOException { this.textEmbeddingsPath = in.readString(); - if (in.getTransportVersion().onOrAfter(TransportVersions.ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { + if (in.getTransportVersion().onOrAfter(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { this.embeddingType = in.readEnum(CustomServiceEmbeddingType.class); } else { this.embeddingType = CustomServiceEmbeddingType.FLOAT; @@ -89,7 +93,7 @@ public TextEmbeddingResponseParser(StreamInput in) throws IOException { public void writeTo(StreamOutput out) throws IOException { out.writeString(textEmbeddingsPath); - if (out.getTransportVersion().onOrAfter(TransportVersions.ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { + if (out.getTransportVersion().onOrAfter(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { out.writeEnum(embeddingType); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/ibmwatsonx/completion/IbmWatsonxChatCompletionServiceSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/ibmwatsonx/completion/IbmWatsonxChatCompletionServiceSettings.java index 0492a626787cf..81544a462bece 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/ibmwatsonx/completion/IbmWatsonxChatCompletionServiceSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/ibmwatsonx/completion/IbmWatsonxChatCompletionServiceSettings.java @@ -8,7 +8,6 @@ package org.elasticsearch.xpack.inference.services.ibmwatsonx.completion; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -41,6 +40,10 @@ public class IbmWatsonxChatCompletionServiceSettings extends FilteredXContentObj IbmWatsonxRateLimitServiceSettings { public static final String NAME = "ibm_watsonx_completion_service_settings"; + private static final TransportVersion ML_INFERENCE_IBM_WATSONX_COMPLETION_ADDED = TransportVersion.fromName( + "ml_inference_ibm_watsonx_completion_added" + ); + /** * Rate limits are defined at * Watson Machine Learning plans. @@ -160,7 +163,7 @@ protected XContentBuilder toXContentFragmentOfExposedFields(XContentBuilder buil @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.ML_INFERENCE_IBM_WATSONX_COMPLETION_ADDED; + return ML_INFERENCE_IBM_WATSONX_COMPLETION_ADDED; } @Override diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/llama/LlamaService.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/llama/LlamaService.java index 8a84283f2747e..829dbe0a18955 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/llama/LlamaService.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/llama/LlamaService.java @@ -9,7 +9,6 @@ import org.elasticsearch.ElasticsearchStatusException; import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; import org.elasticsearch.action.ActionListener; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.ValidationException; @@ -77,6 +76,7 @@ public class LlamaService extends SenderService { public static final String NAME = "llama"; private static final String SERVICE_NAME = "Llama"; + private static final TransportVersion ML_INFERENCE_LLAMA_ADDED = TransportVersion.fromName("ml_inference_llama_added"); /** * The optimal batch size depends on the hardware the model is deployed on. * For Llama use a conservatively small max batch size as it is @@ -363,7 +363,7 @@ public Model parsePersistedConfig(String modelId, TaskType taskType, Map { + private static final TransportVersion ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE = TransportVersion.fromName( + "ml_inference_custom_service_embedding_type" + ); + public static TextEmbeddingResponseParser createRandom() { return new TextEmbeddingResponseParser("$." + randomAlphaOfLength(5), randomFrom(CustomServiceEmbeddingType.values())); } @@ -317,7 +320,7 @@ public void testParse_ThrowsException_WhenExtractedField_IsNotAList() { @Override protected TextEmbeddingResponseParser mutateInstanceForVersion(TextEmbeddingResponseParser instance, TransportVersion version) { - if (version.before(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE)) { + if (version.supports(ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE) == false) { return new TextEmbeddingResponseParser(instance.getTextEmbeddingsPath(), CustomServiceEmbeddingType.FLOAT); } return instance;