瀏覽代碼

Move InferenceConfigUpdate under VersionedNamedWriteable (#84022)

In #81809 we introduced a mechanism to check searializability of search request
to earlier version nodes already on the coordinating node. This requires
knowledge about the version that NamedWritable classes have been introduced,
which is why we started moving classes that are used inside the search request
under the VersionedNamedWriteable interface to make sure future additions
implement the mthod that provides the version information.

This change moves the InferenceConfigUpdate and implementing classes under that
sub-interface. I have used the versions they were first released in
looking at the pull requests that introduced the classes.
Christoph Büscher 3 年之前
父節點
當前提交
e7ca5324a0

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ClassificationConfigUpdate.java

@@ -6,6 +6,7 @@
  */
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -121,6 +122,7 @@ public class ClassificationConfigUpdate implements InferenceConfigUpdate, NamedX
         return topClassesResultsField;
     }
 
+    @Override
     public String getResultsField() {
         return resultsField;
     }
@@ -246,6 +248,11 @@ public class ClassificationConfigUpdate implements InferenceConfigUpdate, NamedX
             && (predictionFieldType == null || predictionFieldType.equals(originalConfig.getPredictionFieldType()));
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_8_0;
+    }
+
     public static class Builder implements InferenceConfigUpdate.Builder<Builder, ClassificationConfigUpdate> {
         private Integer numTopClasses;
         private String topClassesResultsField;

+ 6 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/EmptyConfigUpdate.java

@@ -65,6 +65,11 @@ public class EmptyConfigUpdate implements InferenceConfigUpdate {
         return EmptyConfigUpdate.class.hashCode();
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_9_0;
+    }
+
     public static class Builder implements InferenceConfigUpdate.Builder<Builder, EmptyConfigUpdate> {
 
         @Override
@@ -72,6 +77,7 @@ public class EmptyConfigUpdate implements InferenceConfigUpdate {
             return this;
         }
 
+        @Override
         public EmptyConfigUpdate build() {
             return new EmptyConfigUpdate();
         }

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/FillMaskConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -101,6 +102,11 @@ public class FillMaskConfigUpdate extends NlpConfigUpdate implements NamedXConte
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
+
     @Override
     public InferenceConfig apply(InferenceConfig originalConfig) {
         if (originalConfig instanceof FillMaskConfig == false) {
@@ -191,6 +197,7 @@ public class FillMaskConfigUpdate extends NlpConfigUpdate implements NamedXConte
             return this;
         }
 
+        @Override
         public FillMaskConfigUpdate build() {
             return new FillMaskConfigUpdate(this.numTopClasses, this.resultsField, this.tokenizationUpdate);
         }

+ 2 - 2
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/InferenceConfigUpdate.java

@@ -6,7 +6,7 @@
  */
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
-import org.elasticsearch.common.io.stream.NamedWriteable;
+import org.elasticsearch.common.io.stream.VersionedNamedWriteable;
 import org.elasticsearch.xpack.core.ml.inference.TrainedModelConfig;
 import org.elasticsearch.xpack.core.ml.inference.results.WarningInferenceResults;
 import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
@@ -15,7 +15,7 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
-public interface InferenceConfigUpdate extends NamedWriteable {
+public interface InferenceConfigUpdate extends VersionedNamedWriteable {
     Set<String> RESERVED_ML_FIELD_NAMES = new HashSet<>(
         Arrays.asList(WarningInferenceResults.WARNING.getPreferredName(), TrainedModelConfig.MODEL_ID.getPreferredName())
     );

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/NerConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -144,6 +145,11 @@ public class NerConfigUpdate extends NlpConfigUpdate {
         return Objects.hash(resultsField, tokenizationUpdate);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
+
     public static class Builder implements InferenceConfigUpdate.Builder<NerConfigUpdate.Builder, NerConfigUpdate> {
         private String resultsField;
         private TokenizationUpdate tokenizationUpdate;
@@ -159,6 +165,7 @@ public class NerConfigUpdate extends NlpConfigUpdate {
             return this;
         }
 
+        @Override
         public NerConfigUpdate build() {
             return new NerConfigUpdate(resultsField, tokenizationUpdate);
         }

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/PassThroughConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -146,6 +147,11 @@ public class PassThroughConfigUpdate extends NlpConfigUpdate implements NamedXCo
         return Objects.hash(resultsField, tokenizationUpdate);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
+
     public static class Builder implements InferenceConfigUpdate.Builder<PassThroughConfigUpdate.Builder, PassThroughConfigUpdate> {
         private String resultsField;
         private TokenizationUpdate tokenizationUpdate;
@@ -161,6 +167,7 @@ public class PassThroughConfigUpdate extends NlpConfigUpdate implements NamedXCo
             return this;
         }
 
+        @Override
         public PassThroughConfigUpdate build() {
             return new PassThroughConfigUpdate(this.resultsField, tokenizationUpdate);
         }

+ 8 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/RegressionConfigUpdate.java

@@ -6,6 +6,7 @@
  */
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -84,6 +85,7 @@ public class RegressionConfigUpdate implements InferenceConfigUpdate, NamedXCont
         return numTopFeatureImportanceValues;
     }
 
+    @Override
     public String getResultsField() {
         return resultsField;
     }
@@ -109,6 +111,11 @@ public class RegressionConfigUpdate implements InferenceConfigUpdate, NamedXCont
         return NAME.getPreferredName();
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_8_0;
+    }
+
     @Override
     public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
         builder.startObject();
@@ -186,6 +193,7 @@ public class RegressionConfigUpdate implements InferenceConfigUpdate, NamedXCont
             return this;
         }
 
+        @Override
         public RegressionConfigUpdate build() {
             return new RegressionConfigUpdate(resultsField, numTopFeatureImportanceValues);
         }

+ 6 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ResultsFieldUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
@@ -68,6 +69,11 @@ public class ResultsFieldUpdate implements InferenceConfigUpdate {
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_9_0;
+    }
+
     @Override
     public void writeTo(StreamOutput out) throws IOException {
         out.writeString(resultsField);

+ 10 - 3
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/TextClassificationConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -21,10 +22,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.NlpConfig.CLASSIFICATION_LABELS;
+import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.NlpConfig.NUM_TOP_CLASSES;
+import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.NlpConfig.RESULTS_FIELD;
 import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.NlpConfig.TOKENIZATION;
-import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.TextClassificationConfig.CLASSIFICATION_LABELS;
-import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.TextClassificationConfig.NUM_TOP_CLASSES;
-import static org.elasticsearch.xpack.core.ml.inference.trainedmodel.TextClassificationConfig.RESULTS_FIELD;
 
 public class TextClassificationConfigUpdate extends NlpConfigUpdate implements NamedXContentObject {
 
@@ -96,6 +97,11 @@ public class TextClassificationConfigUpdate extends NlpConfigUpdate implements N
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
+
     @Override
     public void writeTo(StreamOutput out) throws IOException {
         super.writeTo(out);
@@ -237,6 +243,7 @@ public class TextClassificationConfigUpdate extends NlpConfigUpdate implements N
             return this;
         }
 
+        @Override
         public TextClassificationConfigUpdate build() {
             return new TextClassificationConfigUpdate(
                 this.classificationLabels,

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/TextEmbeddingConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.xcontent.ObjectParser;
@@ -95,6 +96,11 @@ public class TextEmbeddingConfigUpdate extends NlpConfigUpdate implements NamedX
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
+
     @Override
     public InferenceConfig apply(InferenceConfig originalConfig) {
         if ((resultsField == null || resultsField.equals(originalConfig.getResultsField())) && super.isNoop()) {
@@ -160,6 +166,7 @@ public class TextEmbeddingConfigUpdate extends NlpConfigUpdate implements NamedX
             return this;
         }
 
+        @Override
         public TextEmbeddingConfigUpdate build() {
             return new TextEmbeddingConfigUpdate(resultsField, tokenizationUpdate);
         }

+ 7 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/inference/trainedmodel/ZeroShotClassificationConfigUpdate.java

@@ -7,6 +7,7 @@
 
 package org.elasticsearch.xpack.core.ml.inference.trainedmodel;
 
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.core.Nullable;
@@ -235,8 +236,14 @@ public class ZeroShotClassificationConfigUpdate extends NlpConfigUpdate implemen
             return this;
         }
 
+        @Override
         public ZeroShotClassificationConfigUpdate build() {
             return new ZeroShotClassificationConfigUpdate(labels, isMultiLabel, resultsField, tokenizationUpdate);
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
 }