Browse Source

Migrate more transport versions (#134340)

Migrates more 9.2 transport versions.

ES-12334
Jack Conradson 1 tháng trước cách đây
mục cha
commit
7c957c38de
27 tập tin đã thay đổi với 103 bổ sung51 xóa
  1. 0 8
      server/src/main/java/org/elasticsearch/TransportVersions.java
  2. 3 3
      server/src/main/java/org/elasticsearch/action/admin/indices/resolve/ResolveIndexAction.java
  3. 7 2
      server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java
  4. 9 4
      server/src/main/java/org/elasticsearch/cluster/metadata/ProjectMetadata.java
  5. 8 4
      server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java
  6. 5 2
      server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java
  7. 4 2
      server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java
  8. 1 0
      server/src/main/resources/transport/definitions/referable/esql_lookup_join_pre_join_filter.csv
  9. 1 0
      server/src/main/resources/transport/definitions/referable/gemini_thinking_budget_added.csv
  10. 1 0
      server/src/main/resources/transport/definitions/referable/inference_api_disable_eis_rate_limiting.csv
  11. 1 0
      server/src/main/resources/transport/definitions/referable/project_reserved_state_move_to_registry.csv
  12. 1 0
      server/src/main/resources/transport/definitions/referable/resolve_index_mode_filter.csv
  13. 1 0
      server/src/main/resources/transport/definitions/referable/semantic_query_multiple_inference_ids.csv
  14. 1 0
      server/src/main/resources/transport/definitions/referable/streams_endpoint_param_restrictions.csv
  15. 1 0
      server/src/main/resources/transport/definitions/referable/visit_percentage.csv
  16. 1 1
      server/src/main/resources/transport/upper_bounds/9.2.csv
  17. 4 2
      x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java
  18. 3 2
      x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/join/Join.java
  19. 6 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticQueryBuilder.java
  20. 6 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/completion/ElasticInferenceServiceCompletionServiceSettings.java
  21. 6 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/densetextembeddings/ElasticInferenceServiceDenseTextEmbeddingsServiceSettings.java
  22. 6 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/rerank/ElasticInferenceServiceRerankServiceSettings.java
  23. 6 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/sparseembeddings/ElasticInferenceServiceSparseEmbeddingsServiceSettings.java
  24. 3 2
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googlevertexai/completion/GoogleVertexAiChatCompletionTaskSettings.java
  25. 7 3
      x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/settings/RateLimitSettings.java
  26. 6 4
      x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/queries/SemanticQueryBuilderTests.java
  27. 5 2
      x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/settings/RateLimitSettingsTests.java

+ 0 - 8
server/src/main/java/org/elasticsearch/TransportVersions.java

@@ -343,14 +343,6 @@ public class TransportVersions {
     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 PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY = def(9_147_0_00);
-    public static final TransportVersion STREAMS_ENDPOINT_PARAM_RESTRICTIONS = def(9_148_0_00);
-    public static final TransportVersion RESOLVE_INDEX_MODE_FILTER = def(9_149_0_00);
-    public static final TransportVersion SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS = def(9_150_0_00);
-    public static final TransportVersion ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER = def(9_151_0_00);
-    public static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = def(9_152_0_00);
-    public static final TransportVersion GEMINI_THINKING_BUDGET_ADDED = def(9_153_0_00);
-    public static final TransportVersion VISIT_PERCENTAGE = def(9_154_0_00);
     public static final TransportVersion TIME_SERIES_TELEMETRY = def(9_155_0_00);
     public static final TransportVersion INFERENCE_API_EIS_DIAGNOSTICS = def(9_156_0_00);
 

+ 3 - 3
server/src/main/java/org/elasticsearch/action/admin/indices/resolve/ResolveIndexAction.java

@@ -10,7 +10,6 @@
 package org.elasticsearch.action.admin.indices.resolve;
 
 import org.elasticsearch.TransportVersion;
-import org.elasticsearch.TransportVersions;
 import org.elasticsearch.action.ActionListener;
 import org.elasticsearch.action.ActionRequestValidationException;
 import org.elasticsearch.action.ActionResponse;
@@ -78,6 +77,7 @@ public class ResolveIndexAction extends ActionType<ResolveIndexAction.Response>
     public static final RemoteClusterActionType<Response> REMOTE_TYPE = new RemoteClusterActionType<>(NAME, Response::new);
 
     private static final TransportVersion RESOLVE_INDEX_MODE_ADDED = TransportVersion.fromName("resolve_index_mode_added");
+    private static final TransportVersion RESOLVE_INDEX_MODE_FILTER = TransportVersion.fromName("resolve_index_mode_filter");
 
     private ResolveIndexAction() {
         super(NAME);
@@ -117,7 +117,7 @@ public class ResolveIndexAction extends ActionType<ResolveIndexAction.Response>
             super(in);
             this.names = in.readStringArray();
             this.indicesOptions = IndicesOptions.readIndicesOptions(in);
-            if (in.getTransportVersion().onOrAfter(TransportVersions.RESOLVE_INDEX_MODE_FILTER)) {
+            if (in.getTransportVersion().supports(RESOLVE_INDEX_MODE_FILTER)) {
                 this.indexModes = in.readEnumSet(IndexMode.class);
             } else {
                 this.indexModes = EnumSet.noneOf(IndexMode.class);
@@ -129,7 +129,7 @@ public class ResolveIndexAction extends ActionType<ResolveIndexAction.Response>
             super.writeTo(out);
             out.writeStringArray(names);
             indicesOptions.writeIndicesOptions(out);
-            if (out.getTransportVersion().onOrAfter(TransportVersions.RESOLVE_INDEX_MODE_FILTER)) {
+            if (out.getTransportVersion().supports(RESOLVE_INDEX_MODE_FILTER)) {
                 out.writeEnumSet(indexModes);
             }
         }

+ 7 - 2
server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java

@@ -11,6 +11,7 @@ package org.elasticsearch.action.bulk;
 
 import org.apache.lucene.util.Accountable;
 import org.apache.lucene.util.RamUsageEstimator;
+import org.elasticsearch.TransportVersion;
 import org.elasticsearch.TransportVersions;
 import org.elasticsearch.action.ActionRequest;
 import org.elasticsearch.action.ActionRequestValidationException;
@@ -65,6 +66,10 @@ public class BulkRequest extends LegacyActionRequest
         Accountable,
         RawIndexingDataTransportRequest {
 
+    private static final TransportVersion STREAMS_ENDPOINT_PARAM_RESTRICTIONS = TransportVersion.fromName(
+        "streams_endpoint_param_restrictions"
+    );
+
     private static final long SHALLOW_SIZE = RamUsageEstimator.shallowSizeOfInstance(BulkRequest.class);
 
     private static final int REQUEST_OVERHEAD = 50;
@@ -110,7 +115,7 @@ public class BulkRequest extends LegacyActionRequest
         if (in.getTransportVersion().onOrAfter(TransportVersions.INGEST_REQUEST_INCLUDE_SOURCE_ON_ERROR)) {
             includeSourceOnError = in.readBoolean();
         } // else default value is true
-        if (in.getTransportVersion().onOrAfter(TransportVersions.STREAMS_ENDPOINT_PARAM_RESTRICTIONS)) {
+        if (in.getTransportVersion().supports(STREAMS_ENDPOINT_PARAM_RESTRICTIONS)) {
             paramsUsed = in.readCollectionAsImmutableSet(StreamInput::readString);
         }
     }
@@ -479,7 +484,7 @@ public class BulkRequest extends LegacyActionRequest
         if (out.getTransportVersion().onOrAfter(TransportVersions.INGEST_REQUEST_INCLUDE_SOURCE_ON_ERROR)) {
             out.writeBoolean(includeSourceOnError);
         }
-        if (out.getTransportVersion().onOrAfter(TransportVersions.STREAMS_ENDPOINT_PARAM_RESTRICTIONS)) {
+        if (out.getTransportVersion().supports(STREAMS_ENDPOINT_PARAM_RESTRICTIONS)) {
             out.writeCollection(paramsUsed, StreamOutput::writeString);
         }
     }

+ 9 - 4
server/src/main/java/org/elasticsearch/cluster/metadata/ProjectMetadata.java

@@ -10,6 +10,7 @@
 package org.elasticsearch.cluster.metadata;
 
 import org.apache.lucene.util.CollectionUtil;
+import org.elasticsearch.TransportVersion;
 import org.elasticsearch.TransportVersions;
 import org.elasticsearch.cluster.Diff;
 import org.elasticsearch.cluster.Diffable;
@@ -87,6 +88,10 @@ public class ProjectMetadata implements Iterable<IndexMetadata>, Diffable<Projec
     private static final NamedDiffableValueSerializer<Metadata.ProjectCustom> PROJECT_CUSTOM_VALUE_SERIALIZER =
         new NamedDiffableValueSerializer<>(Metadata.ProjectCustom.class);
 
+    private static final TransportVersion PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY = TransportVersion.fromName(
+        "project_reserved_state_move_to_registry"
+    );
+
     private final ProjectId id;
 
     private final ImmutableOpenMap<String, IndexMetadata> indices;
@@ -2171,7 +2176,7 @@ public class ProjectMetadata implements Iterable<IndexMetadata>, Diffable<Projec
 
         readProjectCustoms(in, builder);
 
-        if (in.getTransportVersion().before(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+        if (in.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY) == false) {
             int reservedStateSize = in.readVInt();
             for (int i = 0; i < reservedStateSize; i++) {
                 ReservedStateMetadata.readFrom(in);
@@ -2212,7 +2217,7 @@ public class ProjectMetadata implements Iterable<IndexMetadata>, Diffable<Projec
         }
         out.writeCollection(templates.values());
         VersionedNamedWriteable.writeVersionedWriteables(out, customs.values());
-        if (out.getTransportVersion().before(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+        if (out.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY) == false) {
             out.writeCollection(Collections.emptySet());
         }
 
@@ -2265,7 +2270,7 @@ public class ProjectMetadata implements Iterable<IndexMetadata>, Diffable<Projec
             indices = DiffableUtils.readImmutableOpenMapDiff(in, DiffableUtils.getStringKeySerializer(), INDEX_METADATA_DIFF_VALUE_READER);
             templates = DiffableUtils.readImmutableOpenMapDiff(in, DiffableUtils.getStringKeySerializer(), TEMPLATES_DIFF_VALUE_READER);
             customs = DiffableUtils.readImmutableOpenMapDiff(in, DiffableUtils.getStringKeySerializer(), PROJECT_CUSTOM_VALUE_SERIALIZER);
-            if (in.getTransportVersion().before(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+            if (in.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY) == false) {
                 DiffableUtils.readImmutableOpenMapDiff(in, DiffableUtils.getStringKeySerializer(), RESERVED_DIFF_VALUE_READER);
             }
             if (in.getTransportVersion()
@@ -2291,7 +2296,7 @@ public class ProjectMetadata implements Iterable<IndexMetadata>, Diffable<Projec
             indices.writeTo(out);
             templates.writeTo(out);
             customs.writeTo(out);
-            if (out.getTransportVersion().before(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+            if (out.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY) == false) {
                 DiffableUtils.emptyDiff().writeTo(out);
             }
             if (out.getTransportVersion()

+ 8 - 4
server/src/main/java/org/elasticsearch/cluster/project/ProjectStateRegistry.java

@@ -51,6 +51,10 @@ public class ProjectStateRegistry extends AbstractNamedDiffable<Custom> implemen
     public static final ProjectStateRegistry EMPTY = new ProjectStateRegistry(Collections.emptyMap(), Collections.emptySet(), 0);
     private static final Entry EMPTY_ENTRY = new Entry(Settings.EMPTY, ImmutableOpenMap.of());
 
+    private static final TransportVersion PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY = TransportVersion.fromName(
+        "project_reserved_state_move_to_registry"
+    );
+
     public static final DiffableUtils.DiffableValueReader<String, ReservedStateMetadata> RESERVED_DIFF_VALUE_READER =
         new DiffableUtils.DiffableValueReader<>(ReservedStateMetadata::readFrom, ReservedStateMetadata::readDiffFrom);
 
@@ -377,7 +381,7 @@ public class ProjectStateRegistry extends AbstractNamedDiffable<Custom> implemen
             Settings settings = Settings.readSettingsFromStream(in);
 
             ImmutableOpenMap<String, ReservedStateMetadata> reservedStateMetadata;
-            if (in.getTransportVersion().onOrAfter(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+            if (in.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
                 int reservedStateSize = in.readVInt();
                 ImmutableOpenMap.Builder<String, ReservedStateMetadata> builder = ImmutableOpenMap.builder(reservedStateSize);
                 for (int i = 0; i < reservedStateSize; i++) {
@@ -406,7 +410,7 @@ public class ProjectStateRegistry extends AbstractNamedDiffable<Custom> implemen
         @Override
         public void writeTo(StreamOutput out) throws IOException {
             out.writeWriteable(settings);
-            if (out.getTransportVersion().onOrAfter(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+            if (out.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
                 out.writeCollection(reservedStateMetadata.values());
             }
         }
@@ -446,7 +450,7 @@ public class ProjectStateRegistry extends AbstractNamedDiffable<Custom> implemen
                 Diff<Settings> settingsDiff = Settings.readSettingsDiffFromStream(in);
 
                 DiffableUtils.MapDiff<String, ReservedStateMetadata, ImmutableOpenMap<String, ReservedStateMetadata>> reservedStateMetadata;
-                if (in.getTransportVersion().onOrAfter(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+                if (in.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
                     reservedStateMetadata = DiffableUtils.readImmutableOpenMapDiff(
                         in,
                         DiffableUtils.getStringKeySerializer(),
@@ -467,7 +471,7 @@ public class ProjectStateRegistry extends AbstractNamedDiffable<Custom> implemen
             @Override
             public void writeTo(StreamOutput out) throws IOException {
                 out.writeWriteable(settingsDiff);
-                if (out.getTransportVersion().onOrAfter(TransportVersions.PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
+                if (out.getTransportVersion().supports(PROJECT_RESERVED_STATE_MOVE_TO_REGISTRY)) {
                     reservedStateMetadata.writeTo(out);
                 }
             }

+ 5 - 2
server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java

@@ -10,6 +10,7 @@
 package org.elasticsearch.search.vectors;
 
 import org.apache.lucene.util.SetOnce;
+import org.elasticsearch.TransportVersion;
 import org.elasticsearch.TransportVersions;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -128,6 +129,8 @@ public class KnnSearchBuilder implements Writeable, ToXContentFragment, Rewritea
         return PARSER.parse(parser, null);
     }
 
+    private static final TransportVersion VISIT_PERCENTAGE = TransportVersion.fromName("visit_percentage");
+
     final String field;
     final VectorData queryVector;
     final QueryVectorBuilder queryVectorBuilder;
@@ -337,7 +340,7 @@ public class KnnSearchBuilder implements Writeable, ToXContentFragment, Rewritea
         this.field = in.readString();
         this.k = in.readVInt();
         this.numCands = in.readVInt();
-        if (in.getTransportVersion().onOrAfter(TransportVersions.VISIT_PERCENTAGE)) {
+        if (in.getTransportVersion().supports(VISIT_PERCENTAGE)) {
             this.visitPercentage = in.readOptionalFloat();
         } else {
             this.visitPercentage = null;
@@ -610,7 +613,7 @@ public class KnnSearchBuilder implements Writeable, ToXContentFragment, Rewritea
         out.writeString(field);
         out.writeVInt(k);
         out.writeVInt(numCands);
-        if (out.getTransportVersion().onOrAfter(TransportVersions.VISIT_PERCENTAGE)) {
+        if (out.getTransportVersion().supports(VISIT_PERCENTAGE)) {
             out.writeOptionalFloat(visitPercentage);
         }
         if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_14_0)) {

+ 4 - 2
server/src/main/java/org/elasticsearch/search/vectors/KnnVectorQueryBuilder.java

@@ -138,6 +138,8 @@ public class KnnVectorQueryBuilder extends AbstractQueryBuilder<KnnVectorQueryBu
         return PARSER.apply(parser, null);
     }
 
+    private static final TransportVersion VISIT_PERCENTAGE = TransportVersion.fromName("visit_percentage");
+
     private final String fieldName;
     private final VectorData queryVector;
     private final Integer k;
@@ -282,7 +284,7 @@ public class KnnVectorQueryBuilder extends AbstractQueryBuilder<KnnVectorQueryBu
         } else {
             this.numCands = in.readVInt();
         }
-        if (in.getTransportVersion().onOrAfter(TransportVersions.VISIT_PERCENTAGE)) {
+        if (in.getTransportVersion().supports(VISIT_PERCENTAGE)) {
             this.visitPercentage = in.readOptionalFloat();
         } else {
             this.visitPercentage = null;
@@ -396,7 +398,7 @@ public class KnnVectorQueryBuilder extends AbstractQueryBuilder<KnnVectorQueryBu
                 out.writeVInt(numCands);
             }
         }
-        if (out.getTransportVersion().onOrAfter(TransportVersions.VISIT_PERCENTAGE)) {
+        if (out.getTransportVersion().supports(VISIT_PERCENTAGE)) {
             out.writeOptionalFloat(visitPercentage);
         }
         if (out.getTransportVersion().onOrAfter(TransportVersions.V_8_14_0)) {

+ 1 - 0
server/src/main/resources/transport/definitions/referable/esql_lookup_join_pre_join_filter.csv

@@ -0,0 +1 @@
+9151000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/gemini_thinking_budget_added.csv

@@ -0,0 +1 @@
+9153000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/inference_api_disable_eis_rate_limiting.csv

@@ -0,0 +1 @@
+9152000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/project_reserved_state_move_to_registry.csv

@@ -0,0 +1 @@
+9147000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/resolve_index_mode_filter.csv

@@ -0,0 +1 @@
+9149000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/semantic_query_multiple_inference_ids.csv

@@ -0,0 +1 @@
+9150000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/streams_endpoint_param_restrictions.csv

@@ -0,0 +1 @@
+9148000

+ 1 - 0
server/src/main/resources/transport/definitions/referable/visit_percentage.csv

@@ -0,0 +1 @@
+9154000

+ 1 - 1
server/src/main/resources/transport/upper_bounds/9.2.csv

@@ -1 +1 @@
-esql_qualifiers_in_attributes,9146000
+visit_percentage,9154000

+ 4 - 2
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/LookupFromIndexService.java

@@ -60,6 +60,8 @@ public class LookupFromIndexService extends AbstractLookupService<LookupFromInde
     public static final String LOOKUP_ACTION_NAME = EsqlQueryAction.NAME + "/lookup_from_index";
     private static final Logger logger = LogManager.getLogger(LookupFromIndexService.class);
 
+    private static final TransportVersion ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER = TransportVersion.fromName("esql_lookup_join_pre_join_filter");
+
     public LookupFromIndexService(
         ClusterService clusterService,
         IndicesService indicesService,
@@ -249,7 +251,7 @@ public class LookupFromIndexService extends AbstractLookupService<LookupFromInde
                 source = new Source(source.source(), sourceText);
             }
             PhysicalPlan rightPreJoinPlan = null;
-            if (in.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER)) {
+            if (in.getTransportVersion().supports(ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER)) {
                 rightPreJoinPlan = planIn.readOptionalNamedWriteable(PhysicalPlan.class);
             }
             TransportRequest result = new TransportRequest(
@@ -304,7 +306,7 @@ public class LookupFromIndexService extends AbstractLookupService<LookupFromInde
             if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOOKUP_JOIN_SOURCE_TEXT)) {
                 out.writeString(source.text());
             }
-            if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER)) {
+            if (out.getTransportVersion().supports(ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER)) {
                 planOut.writeOptionalNamedWriteable(rightPreJoinPlan);
             }
         }

+ 3 - 2
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/join/Join.java

@@ -7,7 +7,7 @@
 
 package org.elasticsearch.xpack.esql.plan.logical.join;
 
-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;
@@ -69,6 +69,7 @@ import static org.elasticsearch.xpack.esql.type.EsqlDataTypeConverter.commonType
 
 public class Join extends BinaryPlan implements PostAnalysisVerificationAware, SortAgnostic, ExecutesOn, PostOptimizationVerificationAware {
     public static final NamedWriteableRegistry.Entry ENTRY = new NamedWriteableRegistry.Entry(LogicalPlan.class, "Join", Join::new);
+    private static final TransportVersion ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER = TransportVersion.fromName("esql_lookup_join_pre_join_filter");
     public static final DataType[] UNSUPPORTED_TYPES = {
         TEXT,
         VERSION,
@@ -138,7 +139,7 @@ public class Join extends BinaryPlan implements PostAnalysisVerificationAware, S
 
     protected LogicalPlan getRightToSerialize(StreamOutput out) {
         LogicalPlan rightToSerialize = right();
-        if (out.getTransportVersion().onOrAfter(TransportVersions.ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER) == false) {
+        if (out.getTransportVersion().supports(ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER) == false) {
             // Prior to TransportVersions.ESQL_LOOKUP_JOIN_PRE_JOIN_FILTER
             // we do not support a filter on top of the right side of the join
             // As we consider the filters optional, we remove them here

+ 6 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticQueryBuilder.java

@@ -57,6 +57,10 @@ public class SemanticQueryBuilder extends AbstractQueryBuilder<SemanticQueryBuil
 
     public static final NodeFeature SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS = new NodeFeature("semantic_query.multiple_inference_ids");
 
+    private static final TransportVersion SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS_TV = TransportVersion.fromName(
+        "semantic_query_multiple_inference_ids"
+    );
+
     // Use a placeholder inference ID that will never overlap with a real inference endpoint (user-created or internal)
     private static final String PLACEHOLDER_INFERENCE_ID = "$PLACEHOLDER";
 
@@ -107,7 +111,7 @@ public class SemanticQueryBuilder extends AbstractQueryBuilder<SemanticQueryBuil
         super(in);
         this.fieldName = in.readString();
         this.query = in.readString();
-        if (in.getTransportVersion().onOrAfter(TransportVersions.SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS)) {
+        if (in.getTransportVersion().supports(SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS_TV)) {
             this.inferenceResultsMap = in.readOptional(i1 -> i1.readImmutableMap(i2 -> i2.readNamedWriteable(InferenceResults.class)));
         } else {
             InferenceResults inferenceResults = in.readOptionalNamedWriteable(InferenceResults.class);
@@ -125,7 +129,7 @@ public class SemanticQueryBuilder extends AbstractQueryBuilder<SemanticQueryBuil
     protected void doWriteTo(StreamOutput out) throws IOException {
         out.writeString(fieldName);
         out.writeString(query);
-        if (out.getTransportVersion().onOrAfter(TransportVersions.SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS)) {
+        if (out.getTransportVersion().supports(SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS_TV)) {
             out.writeOptional((o, v) -> o.writeMap(v, StreamOutput::writeNamedWriteable), inferenceResultsMap);
         } else {
             InferenceResults inferenceResults = null;

+ 6 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/completion/ElasticInferenceServiceCompletionServiceSettings.java

@@ -36,6 +36,10 @@ public class ElasticInferenceServiceCompletionServiceSettings extends FilteredXC
 
     public static final String NAME = "elastic_inference_service_completion_service_settings";
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     public static ElasticInferenceServiceCompletionServiceSettings fromMap(Map<String, Object> map, ConfigurationParseContext context) {
         ValidationException validationException = new ValidationException();
 
@@ -68,7 +72,7 @@ public class ElasticInferenceServiceCompletionServiceSettings extends FilteredXC
     public ElasticInferenceServiceCompletionServiceSettings(StreamInput in) throws IOException {
         this.modelId = in.readString();
         this.rateLimitSettings = RateLimitSettings.DISABLED_INSTANCE;
-        if (in.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (in.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             new RateLimitSettings(in);
         }
     }
@@ -114,7 +118,7 @@ public class ElasticInferenceServiceCompletionServiceSettings extends FilteredXC
     @Override
     public void writeTo(StreamOutput out) throws IOException {
         out.writeString(modelId);
-        if (out.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (out.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             rateLimitSettings.writeTo(out);
         }
     }

+ 6 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/densetextembeddings/ElasticInferenceServiceDenseTextEmbeddingsServiceSettings.java

@@ -44,6 +44,10 @@ public class ElasticInferenceServiceDenseTextEmbeddingsServiceSettings extends F
 
     public static final String NAME = "elastic_inference_service_dense_embeddings_service_settings";
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     private final String modelId;
     private final SimilarityMeasure similarity;
     private final Integer dimensions;
@@ -97,7 +101,7 @@ public class ElasticInferenceServiceDenseTextEmbeddingsServiceSettings extends F
         this.maxInputTokens = in.readOptionalVInt();
         this.rateLimitSettings = RateLimitSettings.DISABLED_INSTANCE;
 
-        if (in.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (in.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             new RateLimitSettings(in);
         }
     }
@@ -188,7 +192,7 @@ public class ElasticInferenceServiceDenseTextEmbeddingsServiceSettings extends F
         out.writeOptionalEnum(SimilarityMeasure.translateSimilarity(similarity, out.getTransportVersion()));
         out.writeOptionalVInt(dimensions);
         out.writeOptionalVInt(maxInputTokens);
-        if (out.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (out.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             rateLimitSettings.writeTo(out);
         }
     }

+ 6 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/rerank/ElasticInferenceServiceRerankServiceSettings.java

@@ -36,6 +36,10 @@ public class ElasticInferenceServiceRerankServiceSettings extends FilteredXConte
 
     public static final String NAME = "elastic_rerank_service_settings";
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     public static ElasticInferenceServiceRerankServiceSettings fromMap(Map<String, Object> map, ConfigurationParseContext context) {
         ValidationException validationException = new ValidationException();
 
@@ -69,7 +73,7 @@ public class ElasticInferenceServiceRerankServiceSettings extends FilteredXConte
     public ElasticInferenceServiceRerankServiceSettings(StreamInput in) throws IOException {
         this.modelId = in.readString();
         this.rateLimitSettings = RateLimitSettings.DISABLED_INSTANCE;
-        if (in.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (in.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             new RateLimitSettings(in);
         }
     }
@@ -123,7 +127,7 @@ public class ElasticInferenceServiceRerankServiceSettings extends FilteredXConte
     @Override
     public void writeTo(StreamOutput out) throws IOException {
         out.writeString(modelId);
-        if (out.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (out.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             rateLimitSettings.writeTo(out);
         }
     }

+ 6 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/sparseembeddings/ElasticInferenceServiceSparseEmbeddingsServiceSettings.java

@@ -39,6 +39,10 @@ public class ElasticInferenceServiceSparseEmbeddingsServiceSettings extends Filt
 
     public static final String NAME = "elastic_inference_service_sparse_embeddings_service_settings";
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     public static ElasticInferenceServiceSparseEmbeddingsServiceSettings fromMap(
         Map<String, Object> map,
         ConfigurationParseContext context
@@ -84,7 +88,7 @@ public class ElasticInferenceServiceSparseEmbeddingsServiceSettings extends Filt
         this.modelId = in.readString();
         this.maxInputTokens = in.readOptionalVInt();
         this.rateLimitSettings = RateLimitSettings.DISABLED_INSTANCE;
-        if (in.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (in.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             new RateLimitSettings(in);
         }
     }
@@ -138,7 +142,7 @@ public class ElasticInferenceServiceSparseEmbeddingsServiceSettings extends Filt
     public void writeTo(StreamOutput out) throws IOException {
         out.writeString(modelId);
         out.writeOptionalVInt(maxInputTokens);
-        if (out.getTransportVersion().before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (out.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             rateLimitSettings.writeTo(out);
         }
     }

+ 3 - 2
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googlevertexai/completion/GoogleVertexAiChatCompletionTaskSettings.java

@@ -8,7 +8,6 @@
 package org.elasticsearch.xpack.inference.services.googlevertexai.completion;
 
 import org.elasticsearch.TransportVersion;
-import org.elasticsearch.TransportVersions;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.ValidationException;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -24,6 +23,8 @@ import java.util.Objects;
 public class GoogleVertexAiChatCompletionTaskSettings implements TaskSettings {
     public static final String NAME = "google_vertex_ai_chatcompletion_task_settings";
 
+    private static final TransportVersion GEMINI_THINKING_BUDGET_ADDED = TransportVersion.fromName("gemini_thinking_budget_added");
+
     private final ThinkingConfig thinkingConfig;
 
     public static final GoogleVertexAiChatCompletionTaskSettings EMPTY_SETTINGS = new GoogleVertexAiChatCompletionTaskSettings();
@@ -88,7 +89,7 @@ public class GoogleVertexAiChatCompletionTaskSettings implements TaskSettings {
 
     @Override
     public TransportVersion getMinimalSupportedVersion() {
-        return TransportVersions.GEMINI_THINKING_BUDGET_ADDED;
+        return GEMINI_THINKING_BUDGET_ADDED;
     }
 
     @Override

+ 7 - 3
x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/settings/RateLimitSettings.java

@@ -7,7 +7,7 @@
 
 package org.elasticsearch.xpack.inference.services.settings;
 
-import org.elasticsearch.TransportVersions;
+import org.elasticsearch.TransportVersion;
 import org.elasticsearch.common.ValidationException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -36,6 +36,10 @@ public class RateLimitSettings implements Writeable, ToXContentFragment {
     public static final String REQUESTS_PER_MINUTE_FIELD = "requests_per_minute";
     public static final RateLimitSettings DISABLED_INSTANCE = new RateLimitSettings(1, TimeUnit.MINUTES, false);
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     public static RateLimitSettings of(
         Map<String, Object> map,
         RateLimitSettings defaultValue,
@@ -133,7 +137,7 @@ public class RateLimitSettings implements Writeable, ToXContentFragment {
     public RateLimitSettings(StreamInput in) throws IOException {
         requestsPerTimeUnit = in.readVLong();
         timeUnit = TimeUnit.MINUTES;
-        if (in.getTransportVersion().onOrAfter(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (in.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
             enabled = in.readBoolean();
         } else {
             enabled = true;
@@ -167,7 +171,7 @@ public class RateLimitSettings implements Writeable, ToXContentFragment {
     @Override
     public void writeTo(StreamOutput out) throws IOException {
         out.writeVLong(requestsPerTimeUnit);
-        if (out.getTransportVersion().onOrAfter(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (out.getTransportVersion().supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
             out.writeBoolean(enabled);
         }
     }

+ 6 - 4
x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/queries/SemanticQueryBuilderTests.java

@@ -108,6 +108,10 @@ public class SemanticQueryBuilderTests extends AbstractQueryTestCase<SemanticQue
     private static final String INFERENCE_ID = "test_service";
     private static final String SEARCH_INFERENCE_ID = "search_test_service";
 
+    private static final TransportVersion SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS = TransportVersion.fromName(
+        "semantic_query_multiple_inference_ids"
+    );
+
     private static InferenceResultType inferenceResultType;
     private static DenseVectorFieldMapper.ElementType denseVectorElementType;
     private static boolean useSearchInferenceId;
@@ -408,9 +412,7 @@ public class SemanticQueryBuilderTests extends AbstractQueryTestCase<SemanticQue
                     in.setTransportVersion(version);
                     QueryBuilder deserializedQuery = in.readNamedWriteable(QueryBuilder.class);
 
-                    SemanticQueryBuilder expectedQuery = version.onOrAfter(TransportVersions.SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS)
-                        ? originalQuery
-                        : bwcQuery;
+                    SemanticQueryBuilder expectedQuery = version.supports(SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS) ? originalQuery : bwcQuery;
                     assertThat(deserializedQuery, equalTo(expectedQuery));
                 }
             }
@@ -441,7 +443,7 @@ public class SemanticQueryBuilderTests extends AbstractQueryTestCase<SemanticQue
             try (BytesStreamOutput output = new BytesStreamOutput()) {
                 output.setTransportVersion(version);
 
-                if (version.onOrAfter(TransportVersions.SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS)) {
+                if (version.supports(SEMANTIC_QUERY_MULTIPLE_INFERENCE_IDS)) {
                     output.writeNamedWriteable(originalQuery);
                     try (StreamInput in = new NamedWriteableAwareStreamInput(output.bytes().streamInput(), namedWriteableRegistry())) {
                         in.setTransportVersion(version);

+ 5 - 2
x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/settings/RateLimitSettingsTests.java

@@ -9,7 +9,6 @@ package org.elasticsearch.xpack.inference.services.settings;
 
 import org.elasticsearch.ElasticsearchStatusException;
 import org.elasticsearch.TransportVersion;
-import org.elasticsearch.TransportVersions;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.ValidationException;
 import org.elasticsearch.common.io.stream.Writeable;
@@ -31,6 +30,10 @@ import static org.hamcrest.Matchers.is;
 
 public class RateLimitSettingsTests extends AbstractBWCWireSerializationTestCase<RateLimitSettings> {
 
+    private static final TransportVersion INFERENCE_API_DISABLE_EIS_RATE_LIMITING = TransportVersion.fromName(
+        "inference_api_disable_eis_rate_limiting"
+    );
+
     public static RateLimitSettings createRandom() {
         return new RateLimitSettings(randomLongBetween(1, 1000000));
     }
@@ -190,7 +193,7 @@ public class RateLimitSettingsTests extends AbstractBWCWireSerializationTestCase
 
     @Override
     protected RateLimitSettings mutateInstanceForVersion(RateLimitSettings instance, TransportVersion version) {
-        if (version.before(TransportVersions.INFERENCE_API_DISABLE_EIS_RATE_LIMITING)) {
+        if (version.supports(INFERENCE_API_DISABLE_EIS_RATE_LIMITING) == false) {
             return new RateLimitSettings(instance.requestsPerTimeUnit(), instance.timeUnit(), true);
         } else {
             return instance;