From 35f6300ec04bad47fbf07be3d07bfe7014ffb2b0 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 13 Jul 2023 18:44:23 -0700 Subject: [PATCH 1/6] Remove index version and transport version from main endpoint response The index and transport versions are low level details of how a node behaves in a cluster. They were recently added to the main endpoint response, but they are too low level and should be moved to another endpoint TBD. This commit removes those versions from the main endpoint response. Due to the fact lucene version is now derived from index version, this commit also adds an explicit lucene version member to the main response. --- .../elasticsearch/rest/root/MainResponse.java | 92 ++++++++----------- .../rest/root/TransportMainAction.java | 4 +- .../rest/root/MainResponseTests.java | 27 +++--- .../rest/root/RestMainActionTests.java | 7 +- .../org/elasticsearch/TransportVersion.java | 4 +- 5 files changed, 53 insertions(+), 81 deletions(-) diff --git a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java index f5845c85253b7..10bc67d5b7b8b 100644 --- a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java +++ b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java @@ -29,8 +29,7 @@ public class MainResponse extends ActionResponse implements ToXContentObject { private String nodeName; private Version version; - private IndexVersion indexVersion; - private TransportVersion transportVersion; + private String luceneVersion; private ClusterName clusterName; private String clusterUuid; private Build build; @@ -41,26 +40,30 @@ public class MainResponse extends ActionResponse implements ToXContentObject { super(in); nodeName = in.readString(); version = Version.readVersion(in); - indexVersion = in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_031) ? IndexVersion.readVersion(in) : null; - transportVersion = in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_019) ? TransportVersion.readVersion(in) : null; + + if (in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_034)) { + luceneVersion = in.readString(); + } else { + if (in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_031)) { + luceneVersion = IndexVersion.readVersion(in).luceneVersion().toString(); + } else if (version.before(Version.V_8_10_0)) { + luceneVersion = IndexVersion.fromId(version.id).luceneVersion().toString(); + } else { + luceneVersion = "unknown"; + } + if (in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_019)) { + TransportVersion.readVersion(in); + } + } clusterName = new ClusterName(in); clusterUuid = in.readString(); build = Build.readBuild(in); } - public MainResponse( - String nodeName, - Version version, - IndexVersion indexVersion, - TransportVersion transportVersion, - ClusterName clusterName, - String clusterUuid, - Build build - ) { + public MainResponse(String nodeName, Version version, String luceneVersion, ClusterName clusterName, String clusterUuid, Build build) { this.nodeName = nodeName; this.version = version; - this.indexVersion = indexVersion; - this.transportVersion = transportVersion; + this.luceneVersion = luceneVersion; this.clusterName = clusterName; this.clusterUuid = clusterUuid; this.build = build; @@ -74,12 +77,8 @@ public Version getVersion() { return version; } - public IndexVersion getIndexVersion() { - return indexVersion; - } - - public TransportVersion getTransportVersion() { - return transportVersion; + public String getLuceneVersion() { + return luceneVersion; } public ClusterName getClusterName() { @@ -98,27 +97,22 @@ public Build getBuild() { public void writeTo(StreamOutput out) throws IOException { out.writeString(nodeName); Version.writeVersion(version, out); - if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_031)) { - IndexVersion.writeVersion(indexVersion, out); - } - if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_019)) { - TransportVersion.writeVersion(transportVersion, out); + + if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_034)) { + out.writeString(luceneVersion.toString()); + } else { + if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_031)) { + IndexVersion.writeVersion(IndexVersion.current(), out); + } + if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_019)) { + TransportVersion.writeVersion(TransportVersion.current(), out); + } } clusterName.writeTo(out); out.writeString(clusterUuid); Build.writeBuild(build, out); } - private String getLuceneVersion() { - if (indexVersion != null) { - return indexVersion.luceneVersion().toString(); - } else if (version.before(Version.V_8_10_0)) { - return IndexVersion.fromId(version.id).luceneVersion().toString(); - } else { - return "unknown"; - } - } - @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); @@ -132,11 +126,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws .field("build_hash", build.hash()) .field("build_date", build.date()) .field("build_snapshot", build.isSnapshot()) - .field("lucene_version", getLuceneVersion()) - .field("index_version", indexVersion != null ? indexVersion.toString() : "unknown") + .field("lucene_version", luceneVersion) .field("minimum_wire_compatibility_version", version.minimumCompatibilityVersion().toString()) .field("minimum_index_compatibility_version", version.minimumIndexCompatibilityVersion().toString()) - .field("transport_version", transportVersion != null ? transportVersion.toString() : "unknown") .endObject(); builder.field("tagline", "You Know, for Search"); builder.endObject(); @@ -170,16 +162,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws response.version = Version.fromString( ((String) value.get("number")).replace("-SNAPSHOT", "").replaceFirst("-(alpha\\d+|beta\\d+|rc\\d+)", "") ); - - String indexVersion = (String) value.get("index_version"); - response.indexVersion = indexVersion != null && indexVersion.equals("unknown") == false - ? IndexVersion.fromId(Integer.parseInt(indexVersion)) - : null; - - String transportVersion = (String) value.get("transport_version"); - response.transportVersion = transportVersion != null && transportVersion.equals("unknown") == false - ? TransportVersion.fromString(transportVersion) - : null; + response.luceneVersion = ((String) value.get("lucene_version")); }, (parser, context) -> parser.map(), new ParseField("version")); } @@ -198,8 +181,7 @@ public boolean equals(Object o) { MainResponse other = (MainResponse) o; return Objects.equals(nodeName, other.nodeName) && Objects.equals(version, other.version) - && Objects.equals(indexVersion, other.indexVersion) - && Objects.equals(transportVersion, other.transportVersion) + && Objects.equals(luceneVersion, other.luceneVersion) && Objects.equals(clusterUuid, other.clusterUuid) && Objects.equals(build, other.build) && Objects.equals(clusterName, other.clusterName); @@ -207,7 +189,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(nodeName, version, indexVersion, transportVersion, clusterUuid, build, clusterName); + return Objects.hash(nodeName, version, luceneVersion, clusterUuid, build, clusterName); } @Override @@ -218,10 +200,8 @@ public String toString() { + '\'' + ", version=" + version - + ", indexVersion=" - + indexVersion - + ", transportVersion=" - + transportVersion + + ", luceneVersion=" + + luceneVersion + ", clusterName=" + clusterName + ", clusterUuid='" diff --git a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/TransportMainAction.java b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/TransportMainAction.java index e43ab5ec742d0..75ea0e1f7ab15 100644 --- a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/TransportMainAction.java +++ b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/TransportMainAction.java @@ -9,7 +9,6 @@ package org.elasticsearch.rest.root; import org.elasticsearch.Build; -import org.elasticsearch.TransportVersion; import org.elasticsearch.Version; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.ActionFilters; @@ -47,8 +46,7 @@ protected void doExecute(Task task, MainRequest request, ActionListener clusterUuid = clusterUuid + randomAlphaOfLength(5); case 1 -> nodeName = nodeName + randomAlphaOfLength(5); case 2 -> @@ -129,9 +122,11 @@ protected MainResponse mutateInstance(MainResponse mutateInstance) { build = new Build(Build.Type.UNKNOWN, build.hash(), build.date(), build.isSnapshot() == false, build.qualifiedVersion()); case 3 -> version = randomValueOtherThan(version, () -> VersionUtils.randomVersion(random())); case 4 -> clusterName = new ClusterName(clusterName + randomAlphaOfLength(5)); - case 5 -> transportVersion = randomValueOtherThan(transportVersion, () -> TransportVersionUtils.randomVersion(random())); - case 6 -> indexVersion = randomValueOtherThan(indexVersion, () -> IndexVersionUtils.randomVersion(random())); + case 5 -> luceneVersion = randomValueOtherThan( + luceneVersion, + () -> IndexVersionUtils.randomVersion(random()).luceneVersion().toString() + ); } - return new MainResponse(nodeName, version, indexVersion, transportVersion, clusterName, clusterUuid, build); + return new MainResponse(nodeName, version, luceneVersion, clusterName, clusterUuid, build); } } diff --git a/modules/rest-root/src/test/java/org/elasticsearch/rest/root/RestMainActionTests.java b/modules/rest-root/src/test/java/org/elasticsearch/rest/root/RestMainActionTests.java index 49de15e445f75..7b2e0f3107b8d 100644 --- a/modules/rest-root/src/test/java/org/elasticsearch/rest/root/RestMainActionTests.java +++ b/modules/rest-root/src/test/java/org/elasticsearch/rest/root/RestMainActionTests.java @@ -37,14 +37,12 @@ public void testHeadResponse() throws Exception { final String clusterUUID = randomAlphaOfLengthBetween(10, 20); final Version version = Version.CURRENT; final IndexVersion indexVersion = IndexVersion.current(); - final TransportVersion transportVersion = TransportVersion.current(); final Build build = Build.current(); final MainResponse mainResponse = new MainResponse( nodeName, version, - indexVersion, - transportVersion, + indexVersion.luceneVersion().toString(), clusterName, clusterUUID, build @@ -78,8 +76,7 @@ public void testGetResponse() throws Exception { final MainResponse mainResponse = new MainResponse( nodeName, version, - indexVersion, - transportVersion, + indexVersion.luceneVersion().toString(), clusterName, clusterUUID, build diff --git a/server/src/main/java/org/elasticsearch/TransportVersion.java b/server/src/main/java/org/elasticsearch/TransportVersion.java index 1b4d585582401..5896becc3d7aa 100644 --- a/server/src/main/java/org/elasticsearch/TransportVersion.java +++ b/server/src/main/java/org/elasticsearch/TransportVersion.java @@ -154,9 +154,11 @@ private static TransportVersion registerTransportVersion(int id, String uniqueId public static final TransportVersion V_8_500_031 = registerTransportVersion(8_500_031, "e7aa7e95-37e7-46a3-aad1-90a21c0769e7"); public static final TransportVersion V_8_500_032 = registerTransportVersion(8_500_032, "a9a14bc6-c3f2-41d9-a3d8-c686bf2c901d"); public static final TransportVersion V_8_500_033 = registerTransportVersion(8_500_033, "193ab7c4-a751-4cbd-a66a-2d7d56ccbc10"); + public static final TransportVersion V_8_500_034 = registerTransportVersion(8_500_034, "d76a4f22-8878-43e0-acfa-15e452195fa7"); + private static class CurrentHolder { - private static final TransportVersion CURRENT = findCurrent(V_8_500_033); + private static final TransportVersion CURRENT = findCurrent(V_8_500_034); // finds the pluggable current version, or uses the given fallback private static TransportVersion findCurrent(TransportVersion fallback) { From 3b789dd4690fc8b1f1f5d4e190403347caae3ed6 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 13 Jul 2023 19:38:54 -0700 Subject: [PATCH 2/6] fix --- .../org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java b/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java index 7171be3f1b8bb..92bef9e3b2135 100644 --- a/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java +++ b/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java @@ -54,8 +54,7 @@ MainResponse createMainResponse(Version version) { final String date = new Date(randomNonNegativeLong()).toString(); Build build = new Build(Build.Type.UNKNOWN, randomAlphaOfLength(8), date, randomBoolean(), version.toString()); IndexVersion indexVersion = IndexVersion.current(); - TransportVersion transportVersion = TransportVersion.current(); - return new MainResponse(nodeName, version, indexVersion, transportVersion, clusterName, clusterUuid, build); + return new MainResponse(nodeName, version, indexVersion.luceneVersion().toString(), clusterName, clusterUuid, build); } String webServerAddress() { From 5ed9d69842d02099f26241b0d7215343151b8a5a Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Fri, 14 Jul 2023 09:34:30 -0700 Subject: [PATCH 3/6] add clarifying comments --- .../org/elasticsearch/rest/root/MainResponse.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java index 10bc67d5b7b8b..e4422426b6296 100644 --- a/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java +++ b/modules/rest-root/src/main/java/org/elasticsearch/rest/root/MainResponse.java @@ -41,6 +41,11 @@ public class MainResponse extends ActionResponse implements ToXContentObject { nodeName = in.readString(); version = Version.readVersion(in); + // Index version and transport version were briefly included in the main response, but + // removed before the 8.9.0 release. Reading code remains here (throwing away the values) + // for those versions until the new format has propagated through serverless. Additionally, + // the lucene version was previously read by inferring from either Version or IndexVersion. + // Now the lucene version is read explicitly. if (in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_034)) { luceneVersion = in.readString(); } else { @@ -98,8 +103,13 @@ public void writeTo(StreamOutput out) throws IOException { out.writeString(nodeName); Version.writeVersion(version, out); + // Index version and transport version were briefly included in the main response, but + // removed before the 8.9.0 release. Writing code remains here (writing the latest versions) + // for those versions until the new format has propagated through serverless. Additionally, + // the lucene version was previously inferred from either Version or IndexVersion. + // Now the lucene version is written explicitly. if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_034)) { - out.writeString(luceneVersion.toString()); + out.writeString(luceneVersion); } else { if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_031)) { IndexVersion.writeVersion(IndexVersion.current(), out); From 38203ad0e95276fed60ccc7c3e0b85de518e9830 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Fri, 14 Jul 2023 09:36:16 -0700 Subject: [PATCH 4/6] spotless --- server/src/main/java/org/elasticsearch/TransportVersion.java | 1 - .../java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java | 1 - 2 files changed, 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/TransportVersion.java b/server/src/main/java/org/elasticsearch/TransportVersion.java index 5896becc3d7aa..564ed77a53495 100644 --- a/server/src/main/java/org/elasticsearch/TransportVersion.java +++ b/server/src/main/java/org/elasticsearch/TransportVersion.java @@ -156,7 +156,6 @@ private static TransportVersion registerTransportVersion(int id, String uniqueId public static final TransportVersion V_8_500_033 = registerTransportVersion(8_500_033, "193ab7c4-a751-4cbd-a66a-2d7d56ccbc10"); public static final TransportVersion V_8_500_034 = registerTransportVersion(8_500_034, "d76a4f22-8878-43e0-acfa-15e452195fa7"); - private static class CurrentHolder { private static final TransportVersion CURRENT = findCurrent(V_8_500_034); diff --git a/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java b/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java index 92bef9e3b2135..8591f4480d36e 100644 --- a/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java +++ b/x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java @@ -8,7 +8,6 @@ package org.elasticsearch.xpack.sql.jdbc; import org.elasticsearch.Build; -import org.elasticsearch.TransportVersion; import org.elasticsearch.Version; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.index.IndexVersion; From 2c6362fc84456870fffd37dd4987e8a6515f941f Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Fri, 14 Jul 2023 10:31:50 -0700 Subject: [PATCH 5/6] fix docs --- docs/reference/setup/install/check-running.asciidoc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/reference/setup/install/check-running.asciidoc b/docs/reference/setup/install/check-running.asciidoc index 8aafb3b494b7c..726de3ed9a0e4 100644 --- a/docs/reference/setup/install/check-running.asciidoc +++ b/docs/reference/setup/install/check-running.asciidoc @@ -40,10 +40,8 @@ GET / "build_date" : "2016-03-30T09:51:41.449Z", "build_snapshot" : false, "lucene_version" : "{lucene_version}", - "index_version" : "67890", "minimum_wire_compatibility_version" : "1.2.3", - "minimum_index_compatibility_version" : "1.2.3", - "transport_version" : "12345" + "minimum_index_compatibility_version" : "1.2.3" }, "tagline" : "You Know, for Search" } @@ -56,6 +54,4 @@ GET / // TESTRESPONSE[s/"build_snapshot" : false,/"build_snapshot" : $body.version.build_snapshot,/] // TESTRESPONSE[s/"minimum_wire_compatibility_version" : "1.2.3"/"minimum_wire_compatibility_version" : $body.version.minimum_wire_compatibility_version/] // TESTRESPONSE[s/"minimum_index_compatibility_version" : "1.2.3"/"minimum_index_compatibility_version" : $body.version.minimum_index_compatibility_version/] -// TESTRESPONSE[s/"transport_version" : "12345"/"transport_version" : $body.version.transport_version/] -// TESTRESPONSE[s/"index_version" : "67890"/"index_version" : $body.version.index_version/] // So much s/// but at least we test that the layout is close to matching.... From f3da48cf6bd1c2edd1752efb65c9ccdd39a0153e Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Mon, 17 Jul 2023 17:15:27 -0700 Subject: [PATCH 6/6] mute test --- .../qa/verify_version_constants/VerifyVersionConstantsIT.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qa/verify-version-constants/src/test/java/org/elasticsearch/qa/verify_version_constants/VerifyVersionConstantsIT.java b/qa/verify-version-constants/src/test/java/org/elasticsearch/qa/verify_version_constants/VerifyVersionConstantsIT.java index 8a632ec6d20f6..e10709a5b078a 100644 --- a/qa/verify-version-constants/src/test/java/org/elasticsearch/qa/verify_version_constants/VerifyVersionConstantsIT.java +++ b/qa/verify-version-constants/src/test/java/org/elasticsearch/qa/verify_version_constants/VerifyVersionConstantsIT.java @@ -8,6 +8,7 @@ package org.elasticsearch.qa.verify_version_constants; +import org.apache.lucene.tests.util.LuceneTestCase; import org.elasticsearch.Version; import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; @@ -24,6 +25,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.lessThan; +@LuceneTestCase.AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/97736") public class VerifyVersionConstantsIT extends ESRestTestCase { public void testLuceneVersionConstant() throws IOException, ParseException {