2727import org .elasticsearch .common .component .AbstractComponent ;
2828import org .elasticsearch .common .regex .Regex ;
2929
30- import java .util .AbstractMap ;
3130import java .util .ArrayList ;
3231import java .util .Collections ;
3332import java .util .HashMap ;
@@ -54,7 +53,7 @@ public abstract class AbstractScopedSettings extends AbstractComponent {
5453 private final List <SettingUpdater <?>> settingUpdaters = new CopyOnWriteArrayList <>();
5554 private final Map <String , Setting <?>> complexMatchers ;
5655 private final Map <String , Setting <?>> keySettings ;
57- private final Map <Setting <?>, Function < Map . Entry < String , String >, Map . Entry < String , String > >> settingUpgraders ;
56+ private final Map <Setting <?>, SettingUpgrader <? >> settingUpgraders ;
5857 private final Setting .Property scope ;
5958 private static final Pattern KEY_PATTERN = Pattern .compile ("^(?:[-\\ w]+[.])*[-\\ w]+$" );
6059 private static final Pattern GROUP_KEY_PATTERN = Pattern .compile ("^(?:[-\\ w]+[.])+$" );
@@ -70,12 +69,8 @@ protected AbstractScopedSettings(
7069
7170 this .settingUpgraders =
7271 Collections .unmodifiableMap (
73- settingUpgraders
74- .stream ()
75- .collect (
76- Collectors .toMap (
77- SettingUpgrader ::getSetting ,
78- u -> e -> new AbstractMap .SimpleEntry <>(u .getKey (e .getKey ()), u .getValue (e .getValue ())))));
72+ settingUpgraders .stream ().collect (Collectors .toMap (SettingUpgrader ::getSetting , Function .identity ())));
73+
7974
8075 this .scope = scope ;
8176 Map <String , Setting <?>> complexMatchers = new HashMap <>();
@@ -786,15 +781,24 @@ public Settings upgradeSettings(final Settings settings) {
786781 boolean changed = false ; // track if any settings were upgraded
787782 for (final String key : settings .keySet ()) {
788783 final Setting <?> setting = getRaw (key );
789- final Function < Map . Entry < String , String >, Map . Entry < String , String > > upgrader = settingUpgraders .get (setting );
784+ final SettingUpgrader <? > upgrader = settingUpgraders .get (setting );
790785 if (upgrader == null ) {
791786 // the setting does not have an upgrader, copy the setting
792787 builder .copy (key , settings );
793788 } else {
794789 // the setting has an upgrader, so mark that we have changed a setting and apply the upgrade logic
795790 changed = true ;
796- final Map .Entry <String , String > upgrade = upgrader .apply (new Entry (key , settings ));
797- builder .put (upgrade .getKey (), upgrade .getValue ());
791+ if (setting .isListSetting ()) {
792+ final List <String > value = settings .getAsList (key );
793+ final String upgradedKey = upgrader .getKey (key );
794+ final List <String > upgradedValue = upgrader .getListValue (value );
795+ builder .putList (upgradedKey , upgradedValue );
796+ } else {
797+ final String value = settings .get (key );
798+ final String upgradedKey = upgrader .getKey (key );
799+ final String upgradedValue = upgrader .getValue (value );
800+ builder .put (upgradedKey , upgradedValue );
801+ }
798802 }
799803 }
800804 // we only return a new instance if there was an upgrade
0 commit comments