Skip to content

Commit d85b4d7

Browse files
committed
updates to Settings::merge from code review
1 parent 3cf1def commit d85b4d7

File tree

2 files changed

+63
-56
lines changed

2 files changed

+63
-56
lines changed

server/src/main/java/org/elasticsearch/common/settings/Settings.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -882,16 +882,22 @@ public Set<String> keySet() {
882882
* from the returned object.
883883
*/
884884
public Settings merge(Settings newSettings) {
885-
if (newSettings == null || Settings.EMPTY.equals(newSettings)) {
885+
Objects.requireNonNull(newSettings);
886+
if (Settings.EMPTY.equals(newSettings)) {
886887
return this;
887888
}
888-
Settings.Builder settingsBuilder = Settings.builder().put(this).put(newSettings);
889-
for (String settingName : new HashSet<>(settingsBuilder.keys())) {
890-
if (settingsBuilder.get(settingName) == null) {
891-
settingsBuilder.remove(settingName);
889+
Settings.Builder builder = Settings.builder().put(this).put(newSettings);
890+
for (String key : newSettings.keySet()) {
891+
String rawValue = newSettings.get(key);
892+
if (builder.get(key) == null) {
893+
if (rawValue == null) {
894+
builder.remove(key);
895+
} else {
896+
builder.put(key, rawValue);
897+
}
892898
}
893899
}
894-
return settingsBuilder.build();
900+
return builder.build();
895901
}
896902

897903
/**

server/src/test/java/org/elasticsearch/common/settings/SettingsTests.java

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -722,58 +722,59 @@ public void testGlobValues() throws IOException {
722722
assertThat(values, contains("1"));
723723
}
724724

725-
public void testMerge() {
726-
{
727-
assertThat(Settings.EMPTY.merge(null), equalTo(Settings.EMPTY));
728-
assertThat(Settings.EMPTY.merge(Settings.EMPTY), equalTo(Settings.EMPTY));
729-
}
730-
{
731-
Settings.Builder builder = Settings.builder();
732-
for (int i = 1; i < randomInt(100); i++) {
733-
builder.put(randomAlphanumericOfLength(20), randomAlphanumericOfLength(50));
734-
}
735-
Settings settings = builder.build();
736-
assertThat(settings.merge(null), equalTo(settings));
737-
assertThat(settings.merge(Settings.EMPTY), equalTo(settings));
738-
}
739-
{
740-
Settings.Builder builder = Settings.builder();
741-
for (int i = 1; i < randomInt(100); i++) {
742-
builder.put(randomAlphanumericOfLength(20), randomAlphanumericOfLength(50));
743-
}
744-
Settings newSettings = builder.build();
745-
assertThat(Settings.EMPTY.merge(newSettings), equalTo(newSettings));
746-
}
747-
{
748-
Settings settings = Settings.builder()
749-
.put("index.setting1", "templateValue")
750-
.put("index.setting3", "templateValue")
751-
.put("index.setting4", "templateValue")
752-
.build();
753-
Settings newSettings = Settings.builder()
754-
.put("index.setting1", "dataStreamValue")
755-
.put("index.setting2", "dataStreamValue")
756-
.put("index.setting3", (String) null) // This one gets removed from the effective settings
757-
.build();
758-
Settings mergedSettings = Settings.builder()
759-
.put("index.setting1", "dataStreamValue")
760-
.put("index.setting2", "dataStreamValue")
761-
.put("index.setting4", "templateValue")
762-
.build();
763-
assertThat(settings.merge(newSettings), equalTo(mergedSettings));
725+
public void testMergeNullOrEmptySettingsIntoEmptySettings() {
726+
expectThrows(NullPointerException.class, () -> Settings.EMPTY.merge(null));
727+
assertThat(Settings.EMPTY.merge(Settings.EMPTY), equalTo(Settings.EMPTY));
728+
}
729+
730+
public void testMergeEmptySettings() {
731+
Settings.Builder builder = Settings.builder();
732+
for (int i = 1; i < randomInt(100); i++) {
733+
builder.put(randomAlphanumericOfLength(20), randomAlphanumericOfLength(50));
764734
}
765-
{
766-
Settings newSettings = Settings.builder()
767-
.put("index.setting1", "dataStreamValue")
768-
.put("index.setting2", "dataStreamValue")
769-
.put("index.setting3", (String) null) // This one gets removed from the effective settings
770-
.build();
771-
Settings mergedSettings = Settings.builder()
772-
.put("index.setting1", "dataStreamValue")
773-
.put("index.setting2", "dataStreamValue")
774-
.build();
775-
assertThat(Settings.EMPTY.merge(newSettings), equalTo(mergedSettings));
735+
Settings settings = builder.build();
736+
assertThat(settings.merge(Settings.EMPTY), equalTo(settings));
737+
}
738+
739+
public void testMergeNonEmptySettingsIntoEmptySettings() {
740+
Settings.Builder builder = Settings.builder();
741+
for (int i = 1; i < randomInt(100); i++) {
742+
builder.put(randomAlphanumericOfLength(20), randomAlphanumericOfLength(50));
776743
}
744+
Settings newSettings = builder.build();
745+
assertThat(Settings.EMPTY.merge(newSettings), equalTo(newSettings));
746+
}
747+
748+
public void testMergeNonEmptySettingsIntoNonEmptySettings() {
749+
Settings settings = Settings.builder()
750+
.put("index.setting1", "templateValue")
751+
.put("index.setting3", "templateValue")
752+
.put("index.setting4", "templateValue")
753+
.build();
754+
Settings newSettings = Settings.builder()
755+
.put("index.setting1", "dataStreamValue")
756+
.put("index.setting2", "dataStreamValue")
757+
.put("index.setting3", (String) null) // This one gets removed from the effective settings
758+
.build();
759+
Settings mergedSettings = Settings.builder()
760+
.put("index.setting1", "dataStreamValue")
761+
.put("index.setting2", "dataStreamValue")
762+
.put("index.setting4", "templateValue")
763+
.build();
764+
assertThat(settings.merge(newSettings), equalTo(mergedSettings));
765+
}
766+
767+
public void testMergeNonEmptySettingsWithNullIntoEmptySettings() {
768+
Settings newSettings = Settings.builder()
769+
.put("index.setting1", "dataStreamValue")
770+
.put("index.setting2", "dataStreamValue")
771+
.put("index.setting3", (String) null) // This one gets removed from the effective settings
772+
.build();
773+
Settings mergedSettings = Settings.builder()
774+
.put("index.setting1", "dataStreamValue")
775+
.put("index.setting2", "dataStreamValue")
776+
.build();
777+
assertThat(Settings.EMPTY.merge(newSettings), equalTo(mergedSettings));
777778
}
778779

779780
}

0 commit comments

Comments
 (0)