From 18a9874579dfd03f7c601d5e6a8ece5e38f2f774 Mon Sep 17 00:00:00 2001 From: Kunal Kotwani Date: Tue, 25 Jun 2024 16:49:30 +0000 Subject: [PATCH 1/2] Add rolling version upgrade support for ignore_unmapped Signed-off-by: Kunal Kotwani --- src/main/java/org/opensearch/knn/index/IndexUtil.java | 10 ++++++++++ .../opensearch/knn/index/query/KNNQueryBuilder.java | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opensearch/knn/index/IndexUtil.java b/src/main/java/org/opensearch/knn/index/IndexUtil.java index 208da2ea9..9776e9f54 100644 --- a/src/main/java/org/opensearch/knn/index/IndexUtil.java +++ b/src/main/java/org/opensearch/knn/index/IndexUtil.java @@ -271,6 +271,16 @@ public static boolean isVersionOnOrAfterMinRequiredVersion(Version version, Stri return version.onOrAfter(minimalRequiredVersion); } + /** + * Returns the min version required for feature support + * + * @param feature The name of the feature + * @return Min OpenSearch version required for the feature support + */ + public static Version getMinVersionForFeature(String feature) { + return minimalRequiredVersionMap.get(feature); + } + /** * Checks if index requires shared state * diff --git a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java index cef65307a..005a967ba 100644 --- a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java +++ b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java @@ -12,6 +12,7 @@ import java.util.Objects; import lombok.extern.log4j.Log4j2; + import org.apache.lucene.search.MatchNoDocsQuery; import org.opensearch.core.common.Strings; import org.opensearch.index.mapper.NumberFieldMapper; @@ -40,6 +41,7 @@ import static org.opensearch.knn.common.KNNConstants.MAX_DISTANCE; import static org.opensearch.knn.common.KNNConstants.MIN_SCORE; import static org.opensearch.knn.common.KNNValidationUtil.validateByteVectorValue; +import static org.opensearch.knn.index.IndexUtil.getMinVersionForFeature; import static org.opensearch.knn.index.IndexUtil.isClusterOnOrAfterMinRequiredVersion; import static org.opensearch.knn.index.util.KNNEngine.ENGINES_SUPPORTING_RADIAL_SEARCH; @@ -216,7 +218,7 @@ public KNNQueryBuilder(StreamInput in) throws IOException { vector = in.readFloatArray(); k = in.readInt(); filter = in.readOptionalNamedWriteable(QueryBuilder.class); - if (isClusterOnOrAfterMinRequiredVersion("ignore_unmapped")) { + if (in.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { ignoreUnmapped = in.readOptionalBoolean(); } if (isClusterOnOrAfterMinRequiredVersion(KNNConstants.RADIAL_SEARCH_KEY)) { @@ -324,7 +326,7 @@ protected void doWriteTo(StreamOutput out) throws IOException { out.writeFloatArray(vector); out.writeInt(k); out.writeOptionalNamedWriteable(filter); - if (isClusterOnOrAfterMinRequiredVersion("ignore_unmapped")) { + if (out.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { out.writeOptionalBoolean(ignoreUnmapped); } if (isClusterOnOrAfterMinRequiredVersion(KNNConstants.RADIAL_SEARCH_KEY)) { From 7550f9e62e81c23a36cf3da4cc82c39c060258b8 Mon Sep 17 00:00:00 2001 From: Kunal Kotwani Date: Tue, 25 Jun 2024 19:35:04 +0000 Subject: [PATCH 2/2] Fix linting errors Signed-off-by: Kunal Kotwani --- src/main/java/org/opensearch/knn/index/IndexUtil.java | 2 +- .../java/org/opensearch/knn/index/query/KNNQueryBuilder.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opensearch/knn/index/IndexUtil.java b/src/main/java/org/opensearch/knn/index/IndexUtil.java index 9776e9f54..155a82c4e 100644 --- a/src/main/java/org/opensearch/knn/index/IndexUtil.java +++ b/src/main/java/org/opensearch/knn/index/IndexUtil.java @@ -273,7 +273,7 @@ public static boolean isVersionOnOrAfterMinRequiredVersion(Version version, Stri /** * Returns the min version required for feature support - * + * * @param feature The name of the feature * @return Min OpenSearch version required for the feature support */ diff --git a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java index 005a967ba..8f7b703a7 100644 --- a/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java +++ b/src/main/java/org/opensearch/knn/index/query/KNNQueryBuilder.java @@ -218,7 +218,7 @@ public KNNQueryBuilder(StreamInput in) throws IOException { vector = in.readFloatArray(); k = in.readInt(); filter = in.readOptionalNamedWriteable(QueryBuilder.class); - if (in.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { + if (in.getVersion().onOrAfter(getMinVersionForFeature("ignore_unmapped"))) { ignoreUnmapped = in.readOptionalBoolean(); } if (isClusterOnOrAfterMinRequiredVersion(KNNConstants.RADIAL_SEARCH_KEY)) {