diff --git a/cfg4j-consul/src/main/java/org/cfg4j/source/consul/ConsulConfigurationSource.java b/cfg4j-consul/src/main/java/org/cfg4j/source/consul/ConsulConfigurationSource.java index fe8500d..b7c58bd 100644 --- a/cfg4j-consul/src/main/java/org/cfg4j/source/consul/ConsulConfigurationSource.java +++ b/cfg4j-consul/src/main/java/org/cfg4j/source/consul/ConsulConfigurationSource.java @@ -101,7 +101,7 @@ public void init() { @Override public void reload() { - consulValues = new HashMap<>(); + Map newConsulValues = new HashMap<>(); List valueList; try { @@ -120,9 +120,10 @@ public void reload() { LOG.trace("Consul provided configuration key: " + value.getKey() + " with value: " + val); - consulValues.put(value.getKey(), val); + newConsulValues.put(value.getKey(), val); } + consulValues = newConsulValues; } @Override diff --git a/cfg4j-consul/src/test/java/org/cfg4j/source/consul/ConsulConfigurationSourceIntegrationTest.java b/cfg4j-consul/src/test/java/org/cfg4j/source/consul/ConsulConfigurationSourceIntegrationTest.java index 8660d1d..d3eab5c 100644 --- a/cfg4j-consul/src/test/java/org/cfg4j/source/consul/ConsulConfigurationSourceIntegrationTest.java +++ b/cfg4j-consul/src/test/java/org/cfg4j/source/consul/ConsulConfigurationSourceIntegrationTest.java @@ -34,6 +34,8 @@ import org.mockito.runners.MockitoJUnitRunner; import java.io.IOException; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.TimeUnit; @@ -145,6 +147,19 @@ public void reloadShouldThrowOnConnectionFailure() throws Exception { source.reload(); } + @Test + public void shouldReturnOldValuesDuringReload() throws Exception { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + source.reload(); + } + }, 0); + + Environment environment = new ImmutableEnvironment("us-west-1"); + assertThat(source.getConfiguration(environment)).contains(MapEntry.entry("featureA.toggle", "disabled")); + } + private void runMockServer() throws IOException { server = new MockWebServer(); server.setDispatcher(dispatcher);