From bec76531cf7836574cd67693a4b7d399d0579ebb Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Mon, 27 Oct 2025 10:52:23 +0100 Subject: [PATCH 1/3] Fix test clusters to respect user-provided ordering of settings. This is necessary when configuring dependent settings, such as loggers. --- .../test/cluster/local/AbstractLocalClusterFactory.java | 3 ++- .../test/cluster/local/AbstractLocalSpecBuilder.java | 9 +++++---- .../test/cluster/local/LocalClusterSpec.java | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java index 1d52d305c18e3..dd0085256a095 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java @@ -50,6 +50,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -408,7 +409,7 @@ private void writeConfiguration() { try { // Write settings to elasticsearch.yml - Map finalSettings = new HashMap<>(); + Map finalSettings = new LinkedHashMap<>(); finalSettings.put("cluster.name", spec.getCluster().getName()); if (name != null) { finalSettings.put("node.name", name); diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java index ea5c76bd551c8..aa67ac8950e33 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java @@ -21,7 +21,8 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -32,7 +33,7 @@ public abstract class AbstractLocalSpecBuilder> implements LocalSpecBuilder { private final AbstractLocalSpecBuilder parent; private final List settingsProviders = new ArrayList<>(); - private final Map settings = new HashMap<>(); + private final Map settings = new LinkedHashMap<>(); private final List environmentProviders = new ArrayList<>(); private final Map environment = new HashMap<>(); private final Map modules = new HashMap<>(); @@ -321,7 +322,7 @@ private List inherit(Supplier> parent, List child) { } private Set inherit(Supplier> parent, Set child) { - Set combinedSet = new HashSet<>(); + Set combinedSet = new LinkedHashSet<>(); if (this.parent != null) { combinedSet.addAll(parent.get()); } @@ -330,7 +331,7 @@ private Set inherit(Supplier> parent, Set child) { } private Map inherit(Supplier> parent, Map child) { - Map combinedMap = new HashMap<>(); + Map combinedMap = new LinkedHashMap<>(); if (this.parent != null) { combinedMap.putAll(parent.get()); } diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java index cccf2a95234c9..128a63e05526a 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java @@ -21,6 +21,7 @@ import java.nio.file.Path; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -236,7 +237,7 @@ public boolean hasRole(String role) { * @return the configured setting value or provided default */ public String getSetting(String setting, String defaultValue) { - Map allSettings = new HashMap<>(); + Map allSettings = new LinkedHashMap<>(); allSettings.putAll(resolveSettings()); allSettings.putAll(resolveKeystore()); @@ -255,7 +256,7 @@ public String getSetting(String setting, String defaultValue) { * @return resolved settings for node */ public Map resolveSettings() { - Map resolvedSettings = new HashMap<>(); + Map resolvedSettings = new LinkedHashMap<>(); settingsProviders.forEach(p -> resolvedSettings.putAll(p.get(getFilteredSpec(p, null)))); resolvedSettings.putAll(settings); return resolvedSettings; From ada487361780d69e405a5cd0979241d05f5ce607 Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Tue, 28 Oct 2025 14:18:33 +0100 Subject: [PATCH 2/3] Revert "Fix test clusters to respect user-provided ordering of settings." This reverts commit bec76531cf7836574cd67693a4b7d399d0579ebb. --- .../test/cluster/local/AbstractLocalClusterFactory.java | 3 +-- .../test/cluster/local/AbstractLocalSpecBuilder.java | 9 ++++----- .../test/cluster/local/LocalClusterSpec.java | 5 ++--- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java index dd0085256a095..1d52d305c18e3 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalClusterFactory.java @@ -50,7 +50,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -409,7 +408,7 @@ private void writeConfiguration() { try { // Write settings to elasticsearch.yml - Map finalSettings = new LinkedHashMap<>(); + Map finalSettings = new HashMap<>(); finalSettings.put("cluster.name", spec.getCluster().getName()); if (name != null) { finalSettings.put("node.name", name); diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java index aa67ac8950e33..ea5c76bd551c8 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/AbstractLocalSpecBuilder.java @@ -21,8 +21,7 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -33,7 +32,7 @@ public abstract class AbstractLocalSpecBuilder> implements LocalSpecBuilder { private final AbstractLocalSpecBuilder parent; private final List settingsProviders = new ArrayList<>(); - private final Map settings = new LinkedHashMap<>(); + private final Map settings = new HashMap<>(); private final List environmentProviders = new ArrayList<>(); private final Map environment = new HashMap<>(); private final Map modules = new HashMap<>(); @@ -322,7 +321,7 @@ private List inherit(Supplier> parent, List child) { } private Set inherit(Supplier> parent, Set child) { - Set combinedSet = new LinkedHashSet<>(); + Set combinedSet = new HashSet<>(); if (this.parent != null) { combinedSet.addAll(parent.get()); } @@ -331,7 +330,7 @@ private Set inherit(Supplier> parent, Set child) { } private Map inherit(Supplier> parent, Map child) { - Map combinedMap = new LinkedHashMap<>(); + Map combinedMap = new HashMap<>(); if (this.parent != null) { combinedMap.putAll(parent.get()); } diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java index 128a63e05526a..cccf2a95234c9 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/local/LocalClusterSpec.java @@ -21,7 +21,6 @@ import java.nio.file.Path; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -237,7 +236,7 @@ public boolean hasRole(String role) { * @return the configured setting value or provided default */ public String getSetting(String setting, String defaultValue) { - Map allSettings = new LinkedHashMap<>(); + Map allSettings = new HashMap<>(); allSettings.putAll(resolveSettings()); allSettings.putAll(resolveKeystore()); @@ -256,7 +255,7 @@ public String getSetting(String setting, String defaultValue) { * @return resolved settings for node */ public Map resolveSettings() { - Map resolvedSettings = new LinkedHashMap<>(); + Map resolvedSettings = new HashMap<>(); settingsProviders.forEach(p -> resolvedSettings.putAll(p.get(getFilteredSpec(p, null)))); resolvedSettings.putAll(settings); return resolvedSettings; From 528c1f3d62c49a0a679dcc4591a11152c40dfe1c Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Tue, 28 Oct 2025 14:19:17 +0100 Subject: [PATCH 3/3] Restore sorting when applying loggers --- .../java/org/elasticsearch/common/logging/LogConfigurator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/common/logging/LogConfigurator.java b/server/src/main/java/org/elasticsearch/common/logging/LogConfigurator.java index 134f7746ba627..62b3940f16a37 100644 --- a/server/src/main/java/org/elasticsearch/common/logging/LogConfigurator.java +++ b/server/src/main/java/org/elasticsearch/common/logging/LogConfigurator.java @@ -36,6 +36,7 @@ import org.apache.logging.log4j.util.Unbox; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.common.logging.internal.LoggerFactoryImpl; +import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.env.Environment; @@ -55,6 +56,7 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.EnumSet; import java.util.HashSet; import java.util.List; @@ -352,6 +354,7 @@ private static void configureLoggerLevels(final Settings settings) { Loggers.LOG_LEVEL_SETTING.getAllConcreteSettings(settings) // do not set a log level for a logger named level (from the default log setting) .filter(s -> s.getKey().equals(Loggers.LOG_DEFAULT_LEVEL_SETTING.getKey()) == false) + .sorted(Comparator.comparing(Setting::getKey)) .forEach(s -> { final Level level = s.get(settings); Loggers.setLevel(LogManager.getLogger(s.getKey().substring("logger.".length())), level);