Skip to content

Commit

Permalink
Fix default value lookup in config to return the original string
Browse files Browse the repository at this point in the history
  • Loading branch information
klaren committed Feb 21, 2018
1 parent 3467ed2 commit 8b8df78
Showing 1 changed file with 28 additions and 3 deletions.
Expand Up @@ -44,6 +44,7 @@
import org.neo4j.configuration.ConfigOptions;
import org.neo4j.configuration.ConfigValue;
import org.neo4j.configuration.LoadableConfig;
import org.neo4j.graphdb.config.BaseSetting;
import org.neo4j.graphdb.config.Configuration;
import org.neo4j.graphdb.config.InvalidSettingException;
import org.neo4j.graphdb.config.Setting;
Expand Down Expand Up @@ -85,6 +86,7 @@ public class Config implements DiagnosticsProvider, Configuration
private final ConfigurationMigrator migrator;
private final List<ConfigurationValidator> validators = new ArrayList<>();
private final Map<String,String> overriddenDefaults = new CopyOnWriteHashMap<>();
private final Map<String,BaseSetting<?>> settingsMap; // Only contains fixed settings and not groups

// Messages to this log get replayed into a real logger once logging has been instantiated.
private Log log = new BufferingLog();
Expand Down Expand Up @@ -381,6 +383,13 @@ private Config( File configFile,
.flatMap( List::stream )
.collect( Collectors.toList() );

settingsMap = new HashMap<>();
configOptions.stream()
.map( ConfigOptions::settingGroup )
.filter( BaseSetting.class::isInstance )
.map( BaseSetting.class::cast )
.forEach( setting -> settingsMap.put( setting.name(), setting ) );

validators.addAll( additionalValidators );
migrator = new AnnotationBasedConfigurationMigrator( settingsClasses );
this.overriddenDefaults.putAll( overriddenDefaults );
Expand Down Expand Up @@ -587,6 +596,8 @@ public void updateDynamicSetting( String setting, String update )

synchronized ( params )
{
boolean oldDefault = false;
boolean newDefault = false;
String oldValue;
String newValue;
if ( update == null || update.isEmpty() )
Expand All @@ -596,6 +607,7 @@ public void updateDynamicSetting( String setting, String update )
boolean hasDefault = overriddenDefault != null;
oldValue = hasDefault ? params.put( setting, overriddenDefault ) : params.remove( setting );
newValue = getDefaultValueOf( setting );
newDefault = true;
}
else
{
Expand All @@ -610,10 +622,15 @@ public void updateDynamicSetting( String setting, String update )
}

oldValue = getDefaultValueOf( setting );
params.put( setting, update );
if ( params.put( setting, update ) == null )
{
oldDefault = true;
}
newValue = update;
}
log.info( "Setting changed: '%s' changed from '%s' to '%s'", setting, oldValue, newValue );
log.info( "Setting changed: '%s' changed from '%s' to '%s'",
setting, oldDefault ? "default (" + oldValue + ")" : oldValue,
newDefault ? "default (" + newValue + ")" : newValue );
updateListeners.getOrDefault( setting, emptyList() ).forEach( l -> l.accept( oldValue, newValue ) );
}
}
Expand All @@ -636,7 +653,15 @@ private void verifyValidDynamicSetting( String setting )

private String getDefaultValueOf( String setting )
{
return getValue( setting ).map( Object::toString ).orElse( "<no default>" );
if ( overriddenDefaults.containsKey( setting ) )
{
return overriddenDefaults.get( setting );
}
if ( settingsMap.containsKey( setting ) )
{
return settingsMap.get( setting ).getDefaultValue();
}
return "<no default>";
}

private Optional<ConfigValue> findConfigValue( String setting )
Expand Down

0 comments on commit 8b8df78

Please sign in to comment.