Browse Source

Remove index version and transport version from main endpoint response (#97675)

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.
Ryan Ernst 2 years ago
parent
commit
3f8f7182be

+ 1 - 5
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....

+ 46 - 56
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,35 @@ 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;
+
+        // 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_037)) {
+            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 +82,8 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
         return version;
     }
 
-    public IndexVersion getIndexVersion() {
-        return indexVersion;
-    }
-
-    public TransportVersion getTransportVersion() {
-        return transportVersion;
+    public String getLuceneVersion() {
+        return luceneVersion;
     }
 
     public ClusterName getClusterName() {
@@ -98,27 +102,27 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
     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);
+
+        // 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_037)) {
+            out.writeString(luceneVersion);
+        } 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 +136,9 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
             .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 +172,7 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
             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 +191,7 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
         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 +199,7 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
 
     @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 +210,8 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
             + '\''
             + ", version="
             + version
-            + ", indexVersion="
-            + indexVersion
-            + ", transportVersion="
-            + transportVersion
+            + ", luceneVersion="
+            + luceneVersion
             + ", clusterName="
             + clusterName
             + ", clusterUuid='"

+ 1 - 3
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 @@ public class TransportMainAction extends HandledTransportAction<MainRequest, Mai
             new MainResponse(
                 nodeName,
                 Version.CURRENT,
-                IndexVersion.current(),
-                TransportVersion.current(),
+                IndexVersion.current().luceneVersion().toString(),
                 clusterState.getClusterName(),
                 clusterState.metadata().clusterUUID(),
                 Build.current()

+ 11 - 16
modules/rest-root/src/test/java/org/elasticsearch/rest/root/MainResponseTests.java

@@ -40,7 +40,7 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
         IndexVersion indexVersion = IndexVersionUtils.randomVersion();
         TransportVersion transportVersion = TransportVersionUtils.randomVersion();
         Build build = new Build(Build.Type.UNKNOWN, randomAlphaOfLength(8), date, randomBoolean(), version.toString());
-        return new MainResponse(nodeName, version, indexVersion, transportVersion, clusterName, clusterUuid, build);
+        return new MainResponse(nodeName, version, indexVersion.luceneVersion().toString(), clusterName, clusterUuid, build);
     }
 
     @Override
@@ -59,12 +59,10 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
         Build build = new Build(current.type(), current.hash(), current.date(), current.isSnapshot(), current.qualifiedVersion());
         Version version = Version.CURRENT;
         IndexVersion indexVersion = IndexVersion.current();
-        TransportVersion transportVersion = TransportVersion.current();
         MainResponse response = new MainResponse(
             "nodeName",
             version,
-            indexVersion,
-            transportVersion,
+            indexVersion.luceneVersion().toString(),
             new ClusterName("clusterName"),
             clusterUUID,
             build
@@ -87,10 +85,8 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
                                 "build_date": "%s",
                                 "build_snapshot": %s,
                                 "lucene_version": "%s",
-                                "index_version": "%s",
                                 "minimum_wire_compatibility_version": "%s",
-                                "minimum_index_compatibility_version": "%s",
-                                "transport_version": "%s"
+                                "minimum_index_compatibility_version": "%s"
                             },
                             "tagline": "You Know, for Search"
                         }
@@ -102,10 +98,8 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
                     current.date(),
                     current.isSnapshot(),
                     indexVersion.luceneVersion().toString(),
-                    indexVersion.toString(),
                     version.minimumCompatibilityVersion().toString(),
-                    version.minimumIndexCompatibilityVersion().toString(),
-                    transportVersion.toString()
+                    version.minimumIndexCompatibilityVersion().toString()
                 )
             ),
             Strings.toString(builder)
@@ -117,11 +111,10 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
         String clusterUuid = mutateInstance.getClusterUuid();
         Build build = mutateInstance.getBuild();
         Version version = mutateInstance.getVersion();
-        IndexVersion indexVersion = mutateInstance.getIndexVersion();
-        TransportVersion transportVersion = mutateInstance.getTransportVersion();
+        String luceneVersion = mutateInstance.getLuceneVersion();
         String nodeName = mutateInstance.getNodeName();
         ClusterName clusterName = mutateInstance.getClusterName();
-        switch (randomIntBetween(0, 6)) {
+        switch (randomIntBetween(0, 5)) {
             case 0 -> clusterUuid = clusterUuid + randomAlphaOfLength(5);
             case 1 -> nodeName = nodeName + randomAlphaOfLength(5);
             case 2 ->
@@ -129,9 +122,11 @@ public class MainResponseTests extends AbstractXContentSerializingTestCase<MainR
                 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);
     }
 }

+ 2 - 5
modules/rest-root/src/test/java/org/elasticsearch/rest/root/RestMainActionTests.java

@@ -37,14 +37,12 @@ public class RestMainActionTests extends ESTestCase {
         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 class RestMainActionTests extends ESTestCase {
         final MainResponse mainResponse = new MainResponse(
             nodeName,
             version,
-            indexVersion,
-            transportVersion,
+            indexVersion.luceneVersion().toString(),
             clusterName,
             clusterUUID,
             build

+ 2 - 0
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 java.text.ParseException;
 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 {

+ 2 - 2
server/src/main/java/org/elasticsearch/TransportVersion.java

@@ -156,12 +156,12 @@ public record TransportVersion(int id) implements Comparable<TransportVersion> {
     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, "16871c8b-88ba-4432-980a-10fd9ecad2dc");
     public static final TransportVersion V_8_500_035 = registerTransportVersion(8_500_035, "664dd6ce-3487-4fbd-81a9-af778b28be45");
-
     // Introduced for stateless plugin
     public static final TransportVersion V_8_500_036 = registerTransportVersion(8_500_036, "3343c64f-d7ac-4f02-9262-3e1acfc56f89");
+    public static final TransportVersion V_8_500_037 = registerTransportVersion(8_500_037, "d76a4f22-8878-43e0-acfa-15e452195fa7");
 
     private static class CurrentHolder {
-        private static final TransportVersion CURRENT = findCurrent(V_8_500_036);
+        private static final TransportVersion CURRENT = findCurrent(V_8_500_037);
 
         // finds the pluggable current version, or uses the given fallback
         private static TransportVersion findCurrent(TransportVersion fallback) {

+ 1 - 3
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;
@@ -54,8 +53,7 @@ public abstract class WebServerTestCase extends ESTestCase {
         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() {