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 extends ToXContent> 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;