浏览代码

Remove flavor from build (#85796)

The default distribution is the only remaining build flavor, and has been for
quite a while now. This commit removes flavor from the internal Build
class. It keeps rest api compat for nodes info for now by hardcoding
`default`.
Ryan Ernst 3 年之前
父节点
当前提交
d60cde6681
共有 31 个文件被更改,包括 46 次插入365 次删除
  1. 0 12
      client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
  2. 0 4
      distribution/build.gradle
  3. 0 2
      distribution/src/bin/elasticsearch
  4. 0 1
      distribution/src/bin/elasticsearch-cli
  5. 0 1
      distribution/src/bin/elasticsearch-cli.bat
  6. 0 1
      distribution/src/bin/elasticsearch-env
  7. 0 1
      distribution/src/bin/elasticsearch-env.bat
  8. 1 1
      distribution/src/bin/elasticsearch-service.bat
  9. 0 3
      distribution/src/bin/elasticsearch.bat
  10. 1 38
      distribution/tools/plugin-cli/src/main/java/org/elasticsearch/plugins/cli/InstallPluginAction.java
  11. 0 88
      distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/cli/InstallLicensedPluginTests.java
  12. 3 20
      distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/cli/InstallPluginActionTests.java
  13. 0 1
      docs/Versions.asciidoc
  14. 0 1
      docs/plugins/discovery-azure-classic.asciidoc
  15. 2 2
      docs/reference/cluster/nodes-info.asciidoc
  16. 1 2
      docs/reference/cluster/stats.asciidoc
  17. 0 1
      docs/reference/setup/install/check-running.asciidoc
  18. 12 45
      server/src/main/java/org/elasticsearch/Build.java
  19. 1 2
      server/src/main/java/org/elasticsearch/Version.java
  20. 2 1
      server/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoResponse.java
  21. 6 7
      server/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java
  22. 0 3
      server/src/main/java/org/elasticsearch/action/main/MainResponse.java
  23. 1 2
      server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java
  24. 1 2
      server/src/main/java/org/elasticsearch/node/Node.java
  25. 0 2
      server/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java
  26. 9 84
      server/src/test/java/org/elasticsearch/BuildTests.java
  27. 3 26
      server/src/test/java/org/elasticsearch/action/main/MainResponseTests.java
  28. 1 2
      server/src/test/java/org/elasticsearch/bootstrap/ElasticsearchCliTests.java
  29. 1 1
      x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/collector/cluster/ClusterStatsMonitoringDocTests.java
  30. 1 8
      x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java
  31. 0 1
      x-pack/plugin/sql/src/main/bin/elasticsearch-sql-cli.bat

+ 0 - 12
client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java

@@ -12,7 +12,6 @@ import org.apache.http.Header;
 import org.apache.http.HttpEntity;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.elasticsearch.Build;
 import org.elasticsearch.ElasticsearchException;
 import org.elasticsearch.ElasticsearchStatusException;
 import org.elasticsearch.action.ActionListener;
@@ -2591,17 +2590,6 @@ public class RestHighLevelClient implements Closeable {
                 return Optional.of("Invalid or missing tagline [" + mainResponse.getTagline() + "]");
             }
 
-            if (major == 7) {
-                // >= 7.0 and < 7.14
-                String responseFlavor = mainResponse.getVersion().getBuildFlavor();
-                if ("default".equals(responseFlavor) == false) {
-                    // Flavor is unknown when running tests, and non-mocked responses will return an unknown flavor
-                    if (Build.CURRENT.flavor() != Build.Flavor.UNKNOWN || "unknown".equals(responseFlavor) == false) {
-                        return Optional.of("Invalid or missing build flavor [" + responseFlavor + "]");
-                    }
-                }
-            }
-
             return Optional.empty();
         }
 

+ 0 - 4
distribution/build.gradle

@@ -516,10 +516,6 @@ subprojects {
         'def': footer
       ],
 
-      'es.distribution.flavor': [
-        'def': 'default'
-      ],
-
       'es.distribution.type': [
         'deb': 'deb',
         'rpm': 'rpm',

+ 0 - 2
distribution/src/bin/elasticsearch

@@ -114,7 +114,6 @@ if [[ $DAEMONIZE = false ]]; then
     $ES_JAVA_OPTS \
     -Des.path.home="$ES_HOME" \
     -Des.path.conf="$ES_PATH_CONF" \
-    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
     -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
     -cp "$ES_CLASSPATH" \
     org.elasticsearch.bootstrap.Elasticsearch \
@@ -125,7 +124,6 @@ else
     $ES_JAVA_OPTS \
     -Des.path.home="$ES_HOME" \
     -Des.path.conf="$ES_PATH_CONF" \
-    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
     -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
     -cp "$ES_CLASSPATH" \
     org.elasticsearch.bootstrap.Elasticsearch \

+ 0 - 1
distribution/src/bin/elasticsearch-cli

@@ -25,7 +25,6 @@ exec \
   $ES_JAVA_OPTS \
   -Des.path.home="$ES_HOME" \
   -Des.path.conf="$ES_PATH_CONF" \
-  -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \
   -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
   -cp "$ES_CLASSPATH" \
   "$ES_MAIN_CLASS" \

+ 0 - 1
distribution/src/bin/elasticsearch-cli.bat

@@ -20,7 +20,6 @@ set ES_JAVA_OPTS=-Xms4m -Xmx64m -XX:+UseSerialGC %ES_JAVA_OPTS%
   %ES_JAVA_OPTS% ^
   -Des.path.home="%ES_HOME%" ^
   -Des.path.conf="%ES_PATH_CONF%" ^
-  -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" ^
   -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" ^
   -cp "%ES_CLASSPATH%" ^
   "%ES_MAIN_CLASS%" ^

+ 0 - 1
distribution/src/bin/elasticsearch-env

@@ -89,7 +89,6 @@ fi
 # now make ES_PATH_CONF absolute
 ES_PATH_CONF=`cd "$ES_PATH_CONF"; pwd`
 
-ES_DISTRIBUTION_FLAVOR=@es.distribution.flavor@
 ES_DISTRIBUTION_TYPE=@es.distribution.type@
 
 if [[ "$ES_DISTRIBUTION_TYPE" == "docker" ]]; then

+ 0 - 1
distribution/src/bin/elasticsearch-env.bat

@@ -26,7 +26,6 @@ if not defined ES_PATH_CONF (
 rem now make ES_PATH_CONF absolute
 for %%I in ("%ES_PATH_CONF%..") do set ES_PATH_CONF=%%~dpfI
 
-set ES_DISTRIBUTION_FLAVOR=@es.distribution.flavor@
 set ES_DISTRIBUTION_TYPE=@es.distribution.type@
 
 cd /d "%ES_HOME%"

+ 1 - 1
distribution/src/bin/elasticsearch-service.bat

@@ -194,7 +194,7 @@ if "%JVM_SS%" == "" (
 set OTHER_JAVA_OPTS=%OTHER_JAVA_OPTS:"=%
 set OTHER_JAVA_OPTS=%OTHER_JAVA_OPTS:~1%
 
-set ES_PARAMS=-Delasticsearch;-Des.path.home="%ES_HOME%";-Des.path.conf="%ES_PATH_CONF%";-Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%";-Des.distribution.type="%ES_DISTRIBUTION_TYPE%"
+set ES_PARAMS=-Delasticsearch;-Des.path.home="%ES_HOME%";-Des.path.conf="%ES_PATH_CONF%";-Des.distribution.type="%ES_DISTRIBUTION_TYPE%"
 
 if "%ES_START_TYPE%" == "" set ES_START_TYPE=manual
 if "%ES_STOP_TIMEOUT%" == "" set ES_STOP_TIMEOUT=0

+ 0 - 3
distribution/src/bin/elasticsearch.bat

@@ -105,7 +105,6 @@ IF "%attemptautoconfig%"=="Y" (
     ECHO.!KEYSTORE_PASSWORD!| %JAVA% %ES_JAVA_OPTS% ^
       -Des.path.home="%ES_HOME%" ^
       -Des.path.conf="%ES_PATH_CONF%" ^
-      -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" ^
       -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" ^
       -cp "!ES_CLASSPATH!;!ES_HOME!/lib/tools/security-cli/*;!ES_HOME!/modules/x-pack-core/*;!ES_HOME!/modules/x-pack-security/*" "org.elasticsearch.xpack.security.cli.AutoConfigureNode" !newparams!
     SET SHOULDEXIT=Y
@@ -122,7 +121,6 @@ IF "!enrolltocluster!"=="Y" (
     ECHO.!KEYSTORE_PASSWORD!| %JAVA% %ES_JAVA_OPTS% ^
       -Des.path.home="%ES_HOME%" ^
       -Des.path.conf="%ES_PATH_CONF%" ^
-      -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" ^
       -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" ^
       -cp "!ES_CLASSPATH!;!ES_HOME!/lib/tools/security-cli/*;!ES_HOME!/modules/x-pack-core/*;!ES_HOME!/modules/x-pack-security/*" "org.elasticsearch.xpack.security.cli.AutoConfigureNode" ^
       !newparams! --enrollment-token %enrollmenttoken%
@@ -154,7 +152,6 @@ if "%MAYBE_JVM_OPTIONS_PARSER_FAILED%" == "jvm_options_parser_failed" (
 
 ECHO.!KEYSTORE_PASSWORD!| %JAVA% %ES_JAVA_OPTS% -Delasticsearch ^
   -Des.path.home="%ES_HOME%" -Des.path.conf="%ES_PATH_CONF%" ^
-  -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" ^
   -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" ^
   -cp "%ES_CLASSPATH%" "org.elasticsearch.bootstrap.Elasticsearch" !newparams!
 

+ 1 - 38
distribution/tools/plugin-cli/src/main/java/org/elasticsearch/plugins/cli/InstallPluginAction.java

@@ -225,7 +225,7 @@ public class InstallPluginAction implements Closeable {
             terminal.println(logPrefix + "Installing " + pluginId);
             try {
                 if ("x-pack".equals(pluginId)) {
-                    handleInstallXPack(buildFlavor());
+                    throw new UserException(ExitCodes.CONFIG, "this distribution of Elasticsearch contains X-Pack by default");
                 }
 
                 if (PLUGINS_CONVERTED_TO_MODULES.contains(pluginId)) {
@@ -276,21 +276,6 @@ public class InstallPluginAction implements Closeable {
         }
     }
 
-    Build.Flavor buildFlavor() {
-        return Build.CURRENT.flavor();
-    }
-
-    private static void handleInstallXPack(final Build.Flavor flavor) throws UserException {
-        switch (flavor) {
-            case DEFAULT -> throw new UserException(ExitCodes.CONFIG, "this distribution of Elasticsearch contains X-Pack by default");
-            case OSS -> throw new UserException(
-                ExitCodes.CONFIG,
-                "X-Pack is not available with the oss distribution; to use X-Pack features use the default distribution"
-            );
-            case UNKNOWN -> throw new IllegalStateException("your distribution is broken");
-        }
-    }
-
     /**
      * Downloads the plugin and returns the file it was downloaded to.
      */
@@ -923,7 +908,6 @@ public class InstallPluginAction implements Closeable {
      */
     private PluginInfo installPlugin(PluginDescriptor descriptor, Path tmpRoot, List<Path> deleteOnFailure) throws Exception {
         final PluginInfo info = loadPluginInfo(tmpRoot);
-        checkCanInstallationProceed(terminal, Build.CURRENT.flavor(), info);
         PluginPolicyInfo pluginPolicy = PolicyUtil.getPluginPolicyInfo(tmpRoot, env.tmpFile());
         if (pluginPolicy != null) {
             Set<String> permissions = PluginSecurity.getPermissionDescriptions(pluginPolicy, env.tmpFile());
@@ -1092,25 +1076,4 @@ public class InstallPluginAction implements Closeable {
     public void close() throws IOException {
         IOUtils.rm(pathsToDeleteOnShutdown.toArray(new Path[0]));
     }
-
-    public static void checkCanInstallationProceed(Terminal terminal, Build.Flavor flavor, PluginInfo info) throws Exception {
-        if (info.isLicensed() == false) {
-            return;
-        }
-
-        if (flavor == Build.Flavor.DEFAULT) {
-            return;
-        }
-
-        List.of(
-            "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-            "@            ERROR: This is a licensed plugin             @",
-            "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-            "",
-            "This plugin is covered by the Elastic license, but this",
-            "installation of Elasticsearch is: [" + flavor + "]."
-        ).forEach(terminal::errorPrintln);
-
-        throw new UserException(ExitCodes.NOPERM, "Plugin license is incompatible with [" + flavor + "] installation");
-    }
 }

+ 0 - 88
distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/cli/InstallLicensedPluginTests.java

@@ -1,88 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-
-package org.elasticsearch.plugins.cli;
-
-import org.elasticsearch.Build;
-import org.elasticsearch.Version;
-import org.elasticsearch.cli.ExitCodes;
-import org.elasticsearch.cli.MockTerminal;
-import org.elasticsearch.cli.UserException;
-import org.elasticsearch.plugins.PluginInfo;
-import org.elasticsearch.plugins.PluginType;
-import org.elasticsearch.test.ESTestCase;
-
-import java.util.List;
-
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.equalTo;
-
-public class InstallLicensedPluginTests extends ESTestCase {
-
-    /**
-     * Check that an unlicensed plugin is accepted.
-     */
-    public void testUnlicensedPlugin() throws Exception {
-        MockTerminal terminal = new MockTerminal();
-        PluginInfo pluginInfo = buildInfo(false);
-        InstallPluginAction.checkCanInstallationProceed(terminal, Build.Flavor.OSS, pluginInfo);
-    }
-
-    /**
-     * Check that a licensed plugin cannot be installed on OSS.
-     */
-    public void testInstallPluginActionOnOss() throws Exception {
-        MockTerminal terminal = new MockTerminal();
-        PluginInfo pluginInfo = buildInfo(true);
-        final UserException userException = expectThrows(
-            UserException.class,
-            () -> InstallPluginAction.checkCanInstallationProceed(terminal, Build.Flavor.OSS, pluginInfo)
-        );
-
-        assertThat(userException.exitCode, equalTo(ExitCodes.NOPERM));
-        assertThat(terminal.getErrorOutput(), containsString("ERROR: This is a licensed plugin"));
-    }
-
-    /**
-     * Check that a licensed plugin cannot be installed when the distribution type is unknown.
-     */
-    public void testInstallPluginActionOnUnknownDistribution() throws Exception {
-        MockTerminal terminal = new MockTerminal();
-        PluginInfo pluginInfo = buildInfo(true);
-        expectThrows(
-            UserException.class,
-            () -> InstallPluginAction.checkCanInstallationProceed(terminal, Build.Flavor.UNKNOWN, pluginInfo)
-        );
-        assertThat(terminal.getErrorOutput(), containsString("ERROR: This is a licensed plugin"));
-    }
-
-    /**
-     * Check that a licensed plugin can be installed when the distribution type is default.
-     */
-    public void testInstallPluginActionOnDefault() throws Exception {
-        MockTerminal terminal = new MockTerminal();
-        PluginInfo pluginInfo = buildInfo(true);
-        InstallPluginAction.checkCanInstallationProceed(terminal, Build.Flavor.DEFAULT, pluginInfo);
-    }
-
-    private PluginInfo buildInfo(boolean isLicensed) {
-        return new PluginInfo(
-            "name",
-            "description",
-            "version",
-            Version.CURRENT,
-            "java version",
-            "classname",
-            List.of(),
-            false,
-            PluginType.ISOLATED,
-            "",
-            isLicensed
-        );
-    }
-}

+ 3 - 20
distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/cli/InstallPluginActionTests.java

@@ -818,27 +818,10 @@ public class InstallPluginActionTests extends ESTestCase {
     }
 
     public void testInstallXPack() throws IOException {
-        runInstallXPackTest(Build.Flavor.DEFAULT, UserException.class, "this distribution of Elasticsearch contains X-Pack by default");
-        runInstallXPackTest(
-            Build.Flavor.OSS,
-            UserException.class,
-            "X-Pack is not available with the oss distribution; to use X-Pack features use the default distribution"
-        );
-        runInstallXPackTest(Build.Flavor.UNKNOWN, IllegalStateException.class, "your distribution is broken");
-    }
-
-    private <T extends Exception> void runInstallXPackTest(final Build.Flavor flavor, final Class<T> clazz, final String expectedMessage)
-        throws IOException {
-
         final Environment environment = createEnv(temp).v2();
-        final InstallPluginAction flavorAction = new InstallPluginAction(terminal, environment, false) {
-            @Override
-            Build.Flavor buildFlavor() {
-                return flavor;
-            }
-        };
-        final T exception = expectThrows(clazz, () -> flavorAction.execute(List.of(new PluginDescriptor("x-pack"))));
-        assertThat(exception.getMessage(), containsString(expectedMessage));
+        final InstallPluginAction installAction = new InstallPluginAction(terminal, environment, false);
+        var e = expectThrows(UserException.class, () -> installAction.execute(List.of(new PluginDescriptor("x-pack"))));
+        assertThat(e.getMessage(), containsString("this distribution of Elasticsearch contains X-Pack by default"));
     }
 
     public void testInstallMisspelledOfficialPlugins() {

+ 0 - 1
docs/Versions.asciidoc

@@ -5,7 +5,6 @@ include::{docs-root}/shared/versions/stack/{source_branch}.asciidoc[]
 :lucene_version_path:   9_1_0
 :jdk:                   11.0.2
 :jdk_major:             11
-:build_flavor:          default
 :build_type:            tar
 
 :docker-repo:     docker.elastic.co/elasticsearch/elasticsearch

+ 0 - 1
docs/plugins/discovery-azure-classic.asciidoc

@@ -350,7 +350,6 @@ This command should give you a JSON result:
   "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
   "version" : {
     "number" : "{version_qualified}",
-    "build_flavor" : "{build_flavor}",
     "build_type" : "{build_type}",
     "build_hash" : "f27399d",
     "build_date" : "2016-03-30T09:51:41.449Z",

+ 2 - 2
docs/reference/cluster/nodes-info.asciidoc

@@ -228,7 +228,7 @@ The API returns the following response:
       "host": "node-0.elastic.co",
       "ip": "192.168.17",
       "version": "{version}",
-      "build_flavor": "{build_flavor}",
+      "build_flavor": "default",
       "build_type": "{build_type}",
       "build_hash": "587409e",
       "roles": [
@@ -299,7 +299,7 @@ The API returns the following response:
       "host": "node-0.elastic.co",
       "ip": "192.168.17",
       "version": "{version}",
-      "build_flavor": "{build_flavor}",
+      "build_flavor": "default",
       "build_type": "{build_type}",
       "build_hash": "587409e",
       "roles": [],

+ 1 - 2
docs/reference/cluster/stats.asciidoc

@@ -1235,8 +1235,7 @@ Contains statistics about {es} distributions installed on selected nodes.
 =====
 `flavor`:::
 (string)
-Type of {es} distribution, such as `default` or `OSS`, used by one or more
-selected nodes.
+Type of {es} distribution. This is always `default`.
 
 `type`:::
 (string)

+ 0 - 1
docs/reference/setup/install/check-running.asciidoc

@@ -34,7 +34,6 @@ GET /
   "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
   "version" : {
     "number" : "{version_qualified}",
-    "build_flavor" : "{build_flavor}",
     "build_type" : "{build_type}",
     "build_hash" : "f27399d",
     "build_date" : "2016-03-30T09:51:41.449Z",

+ 12 - 45
server/src/main/java/org/elasticsearch/Build.java

@@ -22,7 +22,7 @@ import java.util.jar.Manifest;
 /**
  * Information about a build of Elasticsearch.
  */
-public record Build(Flavor flavor, Type type, String hash, String date, boolean isSnapshot, String version) {
+public record Build(Type type, String hash, String date, boolean isSnapshot, String version) {
 
     /**
      * The current build of Elasticsearch. Filled with information scanned at
@@ -30,42 +30,6 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
      */
     public static final Build CURRENT;
 
-    public enum Flavor {
-
-        DEFAULT("default"),
-        OSS("oss"),
-        UNKNOWN("unknown");
-
-        final String displayName;
-
-        Flavor(final String displayName) {
-            this.displayName = displayName;
-        }
-
-        public String displayName() {
-            return displayName;
-        }
-
-        public static Flavor fromDisplayName(final String displayName, final boolean strict) {
-            switch (displayName) {
-                case "default":
-                    return Flavor.DEFAULT;
-                case "oss":
-                    return Flavor.OSS;
-                case "unknown":
-                    return Flavor.UNKNOWN;
-                default:
-                    if (strict) {
-                        final String message = "unexpected distribution flavor [" + displayName + "]; your distribution is broken";
-                        throw new IllegalStateException(message);
-                    } else {
-                        return Flavor.UNKNOWN;
-                    }
-            }
-        }
-
-    }
-
     public enum Type {
 
         DEB("deb"),
@@ -111,7 +75,6 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
     }
 
     static {
-        final Flavor flavor;
         final Type type;
         final String hash;
         final String date;
@@ -119,7 +82,6 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
         final String version;
 
         // these are parsed at startup, and we require that we are able to recognize the values passed in by the startup scripts
-        flavor = Flavor.fromDisplayName(System.getProperty("es.distribution.flavor", "unknown"), true);
         type = Type.fromDisplayName(System.getProperty("es.distribution.type", "unknown"), true);
 
         final String esPrefix = "elasticsearch-" + Version.CURRENT;
@@ -173,7 +135,7 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
             );
         }
 
-        CURRENT = new Build(flavor, type, hash, date, isSnapshot, version);
+        CURRENT = new Build(type, hash, date, isSnapshot, version);
     }
 
     /**
@@ -187,10 +149,12 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
     }
 
     public static Build readBuild(StreamInput in) throws IOException {
-        final Flavor flavor;
         final Type type;
         // be lenient when reading on the wire, the enumeration values from other versions might be different than what we know
-        flavor = Flavor.fromDisplayName(in.readString(), false);
+        if (in.getVersion().before(Version.V_8_3_0)) {
+            // this was the flavor, which is always the default distribution now
+            in.readString();
+        }
         // be lenient when reading on the wire, the enumeration values from other versions might be different than what we know
         type = Type.fromDisplayName(in.readString(), false);
         String hash = in.readString();
@@ -199,11 +163,14 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
 
         final String version;
         version = in.readString();
-        return new Build(flavor, type, hash, date, snapshot, version);
+        return new Build(type, hash, date, snapshot, version);
     }
 
     public static void writeBuild(Build build, StreamOutput out) throws IOException {
-        out.writeString(build.flavor().displayName());
+        if (out.getVersion().before(Version.V_8_3_0)) {
+            // this was the flavor, which is always the default distribution now
+            out.writeString("default");
+        }
         out.writeString(build.type().displayName());
         out.writeString(build.hash());
         out.writeString(build.date());
@@ -235,6 +202,6 @@ public record Build(Flavor flavor, Type type, String hash, String date, boolean
 
     @Override
     public String toString() {
-        return "[" + flavor.displayName() + "][" + type.displayName + "][" + hash + "][" + date + "][" + version + "]";
+        return "[" + type.displayName + "][" + hash + "][" + date + "][" + version + "]";
     }
 }

+ 1 - 2
server/src/main/java/org/elasticsearch/Version.java

@@ -421,9 +421,8 @@ public class Version implements Comparable<Version>, ToXContentFragment {
     public static void main(String[] args) {
         final String versionOutput = String.format(
             Locale.ROOT,
-            "Version: %s, Build: %s/%s/%s/%s, JVM: %s",
+            "Version: %s, Build: %s/%s/%s, JVM: %s",
             Build.CURRENT.qualifiedVersion(),
-            Build.CURRENT.flavor().displayName(),
             Build.CURRENT.type().displayName(),
             Build.CURRENT.hash(),
             Build.CURRENT.date(),

+ 2 - 1
server/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoResponse.java

@@ -64,7 +64,8 @@ public class NodesInfoResponse extends BaseNodesResponse<NodeInfo> implements To
             builder.field("ip", nodeInfo.getNode().getHostAddress());
 
             builder.field("version", nodeInfo.getVersion());
-            builder.field("build_flavor", nodeInfo.getBuild().flavor().displayName());
+            // flavor no longer exists, but we keep it here for backcompat
+            builder.field("build_flavor", "default");
             builder.field("build_type", nodeInfo.getBuild().type().displayName());
             builder.field("build_hash", nodeInfo.getBuild().hash());
             if (nodeInfo.getTotalIndexingBuffer() != null) {

+ 6 - 7
server/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java

@@ -20,7 +20,6 @@ import org.elasticsearch.common.transport.TransportAddress;
 import org.elasticsearch.common.unit.ByteSizeValue;
 import org.elasticsearch.common.util.Maps;
 import org.elasticsearch.core.TimeValue;
-import org.elasticsearch.core.Tuple;
 import org.elasticsearch.discovery.DiscoveryModule;
 import org.elasticsearch.index.stats.IndexingPressureStats;
 import org.elasticsearch.monitor.fs.FsInfo;
@@ -675,14 +674,13 @@ public class ClusterStatsNodes implements ToXContentFragment {
 
     static class PackagingTypes implements ToXContentFragment {
 
-        private final Map<Tuple<String, String>, AtomicInteger> packagingTypes;
+        private final Map<String, AtomicInteger> packagingTypes;
 
         PackagingTypes(final List<NodeInfo> nodeInfos) {
-            final var packagingTypes = new HashMap<Tuple<String, String>, AtomicInteger>();
+            final var packagingTypes = new HashMap<String, AtomicInteger>();
             for (final var nodeInfo : nodeInfos) {
-                final var flavor = nodeInfo.getBuild().flavor().displayName();
                 final var type = nodeInfo.getBuild().type().displayName();
-                packagingTypes.computeIfAbsent(Tuple.tuple(flavor, type), k -> new AtomicInteger()).incrementAndGet();
+                packagingTypes.computeIfAbsent(type, k -> new AtomicInteger()).incrementAndGet();
             }
             this.packagingTypes = Collections.unmodifiableMap(packagingTypes);
         }
@@ -694,8 +692,9 @@ public class ClusterStatsNodes implements ToXContentFragment {
                 for (final var entry : packagingTypes.entrySet()) {
                     builder.startObject();
                     {
-                        builder.field("flavor", entry.getKey().v1());
-                        builder.field("type", entry.getKey().v2());
+                        // flavor is no longer used, but we keep it here for backcompat
+                        builder.field("flavor", "default");
+                        builder.field("type", entry.getKey());
                         builder.field("count", entry.getValue().get());
                     }
                     builder.endObject();

+ 0 - 3
server/src/main/java/org/elasticsearch/action/main/MainResponse.java

@@ -87,7 +87,6 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
         builder.field("cluster_uuid", clusterUuid);
         builder.startObject("version")
             .field("number", build.qualifiedVersion())
-            .field("build_flavor", build.flavor().displayName())
             .field("build_type", build.type().displayName())
             .field("build_hash", build.hash())
             .field("build_date", build.date())
@@ -113,14 +112,12 @@ public class MainResponse extends ActionResponse implements ToXContentObject {
         PARSER.declareString((response, value) -> response.clusterUuid = value, new ParseField("cluster_uuid"));
         PARSER.declareString((response, value) -> {}, new ParseField("tagline"));
         PARSER.declareObject((response, value) -> {
-            final String buildFlavor = (String) value.get("build_flavor");
             final String buildType = (String) value.get("build_type");
             response.build = new Build(
                 /*
                  * Be lenient when reading on the wire, the enumeration values from other versions might be different than what
                  * we know.
                  */
-                buildFlavor == null ? Build.Flavor.UNKNOWN : Build.Flavor.fromDisplayName(buildFlavor, false),
                 buildType == null ? Build.Type.UNKNOWN : Build.Type.fromDisplayName(buildType, false),
                 (String) value.get("build_hash"),
                 (String) value.get("build_date"),

+ 1 - 2
server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java

@@ -130,9 +130,8 @@ class Elasticsearch extends EnvironmentAwareCommand {
         if (options.has(versionOption)) {
             final String versionOutput = String.format(
                 Locale.ROOT,
-                "Version: %s, Build: %s/%s/%s/%s, JVM: %s",
+                "Version: %s, Build: %s/%s/%s, JVM: %s",
                 Build.CURRENT.qualifiedVersion(),
-                Build.CURRENT.flavor().displayName(),
                 Build.CURRENT.type().displayName(),
                 Build.CURRENT.hash(),
                 Build.CURRENT.date(),

+ 1 - 2
server/src/main/java/org/elasticsearch/node/Node.java

@@ -317,10 +317,9 @@ public class Node implements Closeable {
 
             final JvmInfo jvmInfo = JvmInfo.jvmInfo();
             logger.info(
-                "version[{}], pid[{}], build[{}/{}/{}/{}], OS[{}/{}/{}], JVM[{}/{}/{}/{}]",
+                "version[{}], pid[{}], build[{}/{}/{}], OS[{}/{}/{}], JVM[{}/{}/{}/{}]",
                 Build.CURRENT.qualifiedVersion(),
                 jvmInfo.pid(),
-                Build.CURRENT.flavor().displayName(),
                 Build.CURRENT.type().displayName(),
                 Build.CURRENT.hash(),
                 Build.CURRENT.date(),

+ 0 - 2
server/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java

@@ -132,7 +132,6 @@ public class RestNodesAction extends AbstractCatAction {
         table.addCell("http_address", "default:false;alias:http;desc:bound http address");
 
         table.addCell("version", "default:false;alias:v;desc:es version");
-        table.addCell("flavor", "default:false;alias:f;desc:es distribution flavor");
         table.addCell("type", "default:false;alias:t;desc:es distribution type");
         table.addCell("build", "default:false;alias:b;desc:es build hash");
         table.addCell("jdk", "default:false;alias:j;desc:jdk version");
@@ -345,7 +344,6 @@ public class RestNodesAction extends AbstractCatAction {
             }
 
             table.addCell(node.getVersion().toString());
-            table.addCell(info == null ? null : info.getBuild().flavor().displayName());
             table.addCell(info == null ? null : info.getBuild().type().displayName());
             table.addCell(info == null ? null : info.getBuild().hash());
             table.addCell(jvmInfo == null ? null : jvmInfo.version());

+ 9 - 84
server/src/test/java/org/elasticsearch/BuildTests.java

@@ -42,7 +42,6 @@ public class BuildTests extends ESTestCase {
 
     public void testIsProduction() {
         Build build = new Build(
-            Build.CURRENT.flavor(),
             Build.CURRENT.type(),
             Build.CURRENT.hash(),
             Build.CURRENT.date(),
@@ -52,65 +51,31 @@ public class BuildTests extends ESTestCase {
         assertTrue(build.qualifiedVersion(), build.isProductionRelease());
 
         assertFalse(
-            new Build(
-                Build.CURRENT.flavor(),
-                Build.CURRENT.type(),
-                Build.CURRENT.hash(),
-                Build.CURRENT.date(),
-                Build.CURRENT.isSnapshot(),
-                "7.0.0-SNAPSHOT"
-            ).isProductionRelease()
+            new Build(Build.CURRENT.type(), Build.CURRENT.hash(), Build.CURRENT.date(), Build.CURRENT.isSnapshot(), "7.0.0-SNAPSHOT")
+                .isProductionRelease()
         );
 
         assertFalse(
-            new Build(
-                Build.CURRENT.flavor(),
-                Build.CURRENT.type(),
-                Build.CURRENT.hash(),
-                Build.CURRENT.date(),
-                Build.CURRENT.isSnapshot(),
-                "Unknown"
-            ).isProductionRelease()
+            new Build(Build.CURRENT.type(), Build.CURRENT.hash(), Build.CURRENT.date(), Build.CURRENT.isSnapshot(), "Unknown")
+                .isProductionRelease()
         );
     }
 
     public void testEqualsAndHashCode() {
         Build build = Build.CURRENT;
 
-        Build another = new Build(build.flavor(), build.type(), build.hash(), build.date(), build.isSnapshot(), build.qualifiedVersion());
+        Build another = new Build(build.type(), build.hash(), build.date(), build.isSnapshot(), build.qualifiedVersion());
         assertEquals(build, another);
         assertEquals(build.hashCode(), another.hashCode());
 
-        final Set<Build.Flavor> otherFlavors = Arrays.stream(Build.Flavor.values())
-            .filter(f -> f.equals(build.flavor()) == false)
-            .collect(Collectors.toSet());
-        final Build.Flavor otherFlavor = randomFrom(otherFlavors);
-        Build differentFlavor = new Build(
-            otherFlavor,
-            build.type(),
-            build.hash(),
-            build.date(),
-            build.isSnapshot(),
-            build.qualifiedVersion()
-        );
-        assertNotEquals(build, differentFlavor);
-
         final Set<Build.Type> otherTypes = Arrays.stream(Build.Type.values())
             .filter(f -> f.equals(build.type()) == false)
             .collect(Collectors.toSet());
         final Build.Type otherType = randomFrom(otherTypes);
-        Build differentType = new Build(
-            build.flavor(),
-            otherType,
-            build.hash(),
-            build.date(),
-            build.isSnapshot(),
-            build.qualifiedVersion()
-        );
+        Build differentType = new Build(otherType, build.hash(), build.date(), build.isSnapshot(), build.qualifiedVersion());
         assertNotEquals(build, differentType);
 
         Build differentHash = new Build(
-            build.flavor(),
             build.type(),
             randomAlphaOfLengthBetween(3, 10),
             build.date(),
@@ -119,18 +84,10 @@ public class BuildTests extends ESTestCase {
         );
         assertNotEquals(build, differentHash);
 
-        Build differentDate = new Build(
-            build.flavor(),
-            build.type(),
-            build.hash(),
-            "1970-01-01",
-            build.isSnapshot(),
-            build.qualifiedVersion()
-        );
+        Build differentDate = new Build(build.type(), build.hash(), "1970-01-01", build.isSnapshot(), build.qualifiedVersion());
         assertNotEquals(build, differentDate);
 
         Build differentSnapshot = new Build(
-            build.flavor(),
             build.type(),
             build.hash(),
             build.date(),
@@ -139,7 +96,7 @@ public class BuildTests extends ESTestCase {
         );
         assertNotEquals(build, differentSnapshot);
 
-        Build differentVersion = new Build(build.flavor(), build.type(), build.hash(), build.date(), build.isSnapshot(), "1.2.3");
+        Build differentVersion = new Build(build.type(), build.hash(), build.date(), build.isSnapshot(), "1.2.3");
         assertNotEquals(build, differentVersion);
     }
 
@@ -181,7 +138,6 @@ public class BuildTests extends ESTestCase {
         EqualsHashCodeTestUtils.checkEqualsAndHashCode(
             new WriteableBuild(
                 new Build(
-                    randomFrom(Build.Flavor.values()),
                     randomFrom(Build.Type.values()),
                     randomAlphaOfLength(6),
                     randomAlphaOfLength(6),
@@ -195,19 +151,11 @@ public class BuildTests extends ESTestCase {
                 switch (randomIntBetween(1, 6)) {
                     case 1:
                         return new WriteableBuild(
-                            new Build(
-                                randomValueOtherThan(b.build.flavor(), () -> randomFrom(Build.Flavor.values())),
-                                b.build.type(),
-                                b.build.hash(),
-                                b.build.date(),
-                                b.build.isSnapshot(),
-                                b.build.qualifiedVersion()
-                            )
+                            new Build(b.build.type(), b.build.hash(), b.build.date(), b.build.isSnapshot(), b.build.qualifiedVersion())
                         );
                     case 2:
                         return new WriteableBuild(
                             new Build(
-                                b.build.flavor(),
                                 randomValueOtherThan(b.build.type(), () -> randomFrom(Build.Type.values())),
                                 b.build.hash(),
                                 b.build.date(),
@@ -218,7 +166,6 @@ public class BuildTests extends ESTestCase {
                     case 3:
                         return new WriteableBuild(
                             new Build(
-                                b.build.flavor(),
                                 b.build.type(),
                                 randomStringExcept(b.build.hash()),
                                 b.build.date(),
@@ -229,7 +176,6 @@ public class BuildTests extends ESTestCase {
                     case 4:
                         return new WriteableBuild(
                             new Build(
-                                b.build.flavor(),
                                 b.build.type(),
                                 b.build.hash(),
                                 randomStringExcept(b.build.date()),
@@ -240,7 +186,6 @@ public class BuildTests extends ESTestCase {
                     case 5:
                         return new WriteableBuild(
                             new Build(
-                                b.build.flavor(),
                                 b.build.type(),
                                 b.build.hash(),
                                 b.build.date(),
@@ -251,7 +196,6 @@ public class BuildTests extends ESTestCase {
                     case 6:
                         return new WriteableBuild(
                             new Build(
-                                b.build.flavor(),
                                 b.build.type(),
                                 b.build.hash(),
                                 b.build.date(),
@@ -265,13 +209,6 @@ public class BuildTests extends ESTestCase {
         );
     }
 
-    public void testFlavorParsing() {
-        for (final Build.Flavor flavor : Build.Flavor.values()) {
-            // strict or not should not impact parsing at all here
-            assertThat(Build.Flavor.fromDisplayName(flavor.displayName(), randomBoolean()), sameInstance(flavor));
-        }
-    }
-
     public void testTypeParsing() {
         for (final Build.Type type : Build.Type.values()) {
             // strict or not should not impact parsing at all here
@@ -279,18 +216,6 @@ public class BuildTests extends ESTestCase {
         }
     }
 
-    public void testLenientFlavorParsing() {
-        final String displayName = randomAlphaOfLength(8);
-        assertThat(Build.Flavor.fromDisplayName(displayName, false), equalTo(Build.Flavor.UNKNOWN));
-    }
-
-    public void testStrictFlavorParsing() {
-        final String displayName = randomAlphaOfLength(8);
-        @SuppressWarnings("ResultOfMethodCallIgnored")
-        final IllegalStateException e = expectThrows(IllegalStateException.class, () -> Build.Flavor.fromDisplayName(displayName, true));
-        assertThat(e, hasToString(containsString("unexpected distribution flavor [" + displayName + "]; your distribution is broken")));
-    }
-
     public void testLenientTypeParsing() {
         final String displayName = randomAlphaOfLength(8);
         assertThat(Build.Type.fromDisplayName(displayName, false), equalTo(Build.Type.UNKNOWN));

+ 3 - 26
server/src/test/java/org/elasticsearch/action/main/MainResponseTests.java

@@ -33,14 +33,7 @@ public class MainResponseTests extends AbstractSerializingTestCase<MainResponse>
         String nodeName = randomAlphaOfLength(10);
         final String date = new Date(randomNonNegativeLong()).toString();
         Version version = VersionUtils.randomIndexCompatibleVersion(random());
-        Build build = new Build(
-            Build.Flavor.UNKNOWN,
-            Build.Type.UNKNOWN,
-            randomAlphaOfLength(8),
-            date,
-            randomBoolean(),
-            version.toString()
-        );
+        Build build = new Build(Build.Type.UNKNOWN, randomAlphaOfLength(8), date, randomBoolean(), version.toString());
         return new MainResponse(nodeName, version, clusterName, clusterUuid, build);
     }
 
@@ -57,14 +50,7 @@ public class MainResponseTests extends AbstractSerializingTestCase<MainResponse>
     public void testToXContent() throws IOException {
         String clusterUUID = randomAlphaOfLengthBetween(10, 20);
         final Build current = Build.CURRENT;
-        Build build = new Build(
-            current.flavor(),
-            current.type(),
-            current.hash(),
-            current.date(),
-            current.isSnapshot(),
-            current.qualifiedVersion()
-        );
+        Build build = new Build(current.type(), current.hash(), current.date(), current.isSnapshot(), current.qualifiedVersion());
         Version version = Version.CURRENT;
         MainResponse response = new MainResponse("nodeName", version, new ClusterName("clusterName"), clusterUUID, build);
         XContentBuilder builder = XContentFactory.jsonBuilder();
@@ -78,7 +64,6 @@ public class MainResponseTests extends AbstractSerializingTestCase<MainResponse>
                         "cluster_uuid": "%s",
                         "version": {
                             "number": "%s",
-                            "build_flavor": "%s",
                             "build_type": "%s",
                             "build_hash": "%s",
                             "build_date": "%s",
@@ -92,7 +77,6 @@ public class MainResponseTests extends AbstractSerializingTestCase<MainResponse>
                     """.formatted(
                     clusterUUID,
                     build.qualifiedVersion(),
-                    current.flavor().displayName(),
                     current.type().displayName(),
                     current.hash(),
                     current.date(),
@@ -118,14 +102,7 @@ public class MainResponseTests extends AbstractSerializingTestCase<MainResponse>
             case 1 -> nodeName = nodeName + randomAlphaOfLength(5);
             case 2 ->
                 // toggle the snapshot flag of the original Build parameter
-                build = new Build(
-                    Build.Flavor.UNKNOWN,
-                    Build.Type.UNKNOWN,
-                    build.hash(),
-                    build.date(),
-                    build.isSnapshot() == false,
-                    build.qualifiedVersion()
-                );
+                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));
         }

+ 1 - 2
server/src/test/java/org/elasticsearch/bootstrap/ElasticsearchCliTests.java

@@ -55,8 +55,7 @@ public class ElasticsearchCliTests extends ESElasticsearchCliTestCase {
             assertThat(output, containsString("Version: " + Build.CURRENT.qualifiedVersion()));
             final String expectedBuildOutput = String.format(
                 Locale.ROOT,
-                "Build: %s/%s/%s/%s",
-                Build.CURRENT.flavor().displayName(),
+                "Build: %s/%s/%s",
                 Build.CURRENT.type().displayName(),
                 Build.CURRENT.hash(),
                 Build.CURRENT.date()

+ 1 - 1
x-pack/plugin/monitoring/src/test/java/org/elasticsearch/xpack/monitoring/collector/cluster/ClusterStatsMonitoringDocTests.java

@@ -355,7 +355,7 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
         when(mockJvmInfo.getVmVendor()).thenReturn("_jvm_vm_vendor");
         when(mockJvmInfo.getUsingBundledJdk()).thenReturn(true);
 
-        final Build mockBuild = new Build(Build.Flavor.DEFAULT, Build.Type.DOCKER, "", "", false, "");
+        final Build mockBuild = new Build(Build.Type.DOCKER, "", "", false, "");
         when(mockNodeInfo.getBuild()).thenReturn(mockBuild);
 
         final NodeStats mockNodeStats = mock(NodeStats.class);

+ 1 - 8
x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/WebServerTestCase.java

@@ -48,14 +48,7 @@ public abstract class WebServerTestCase extends ESTestCase {
         ClusterName clusterName = new ClusterName(randomAlphaOfLength(10));
         String nodeName = randomAlphaOfLength(10);
         final String date = new Date(randomNonNegativeLong()).toString();
-        Build build = new Build(
-            Build.Flavor.UNKNOWN,
-            Build.Type.UNKNOWN,
-            randomAlphaOfLength(8),
-            date,
-            randomBoolean(),
-            version.toString()
-        );
+        Build build = new Build(Build.Type.UNKNOWN, randomAlphaOfLength(8), date, randomBoolean(), version.toString());
         return new MainResponse(nodeName, version, clusterName, clusterUuid, build);
     }
 

+ 0 - 1
x-pack/plugin/sql/src/main/bin/elasticsearch-sql-cli.bat

@@ -16,7 +16,6 @@ set CLI_JAR=%ES_HOME%/bin/*
 
 %JAVA% ^
   -cp "%CLI_JAR%" ^
-  -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" ^
   -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" ^
   org.elasticsearch.xpack.sql.cli.Cli ^
   %*