This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit a1cc01d06b3354715e0f456acd4e01160c04ab70 Author: liubao <bi...@qq.com> AuthorDate: Sun Oct 8 15:43:15 2023 +0800 [SCB-2008]adapt DynamicProperties --- .../edge/core/CommonHttpEdgeDispatcher.java | 10 +- .../servicecomb/edge/core/EdgeAddHeaderFilter.java | 12 +- .../edge/core/URLMappedEdgeDispatcher.java | 10 +- .../config/ConfigurationChangedEvent.java | 32 ++-- .../servicecomb/config/DynamicPropertiesImpl.java | 165 +++++++++++++++------ .../config/FoundationConfigConfiguration.java | 4 +- .../servicecomb/config/DynamicPropertiesTest.java | 62 +++++--- .../servicecomb/qps/QpsControllerManager.java | 11 +- .../authentication/provider/AccessController.java | 13 +- 9 files changed, 189 insertions(+), 130 deletions(-) diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java index fbeb0585d..5c3edc183 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java @@ -19,7 +19,6 @@ package org.apache.servicecomb.edge.core; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import org.apache.servicecomb.config.ConfigurationChangedEvent; import org.apache.servicecomb.config.MicroserviceProperties; @@ -128,13 +127,8 @@ public class CommonHttpEdgeDispatcher extends AbstractEdgeDispatcher { @Subscribe public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { - Map<String, Object> changed = new HashMap<>(); - changed.putAll(event.getDeleted()); - changed.putAll(event.getAdded()); - changed.putAll(event.getUpdated()); - - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(KEY_MAPPING_PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(KEY_MAPPING_PREFIX)) { loadConfigurations(); break; } diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java index 65a20bc7e..0788397e5 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java @@ -18,10 +18,7 @@ package org.apache.servicecomb.edge.core; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; @@ -69,13 +66,8 @@ public class EdgeAddHeaderFilter implements ConsumerFilter { @Subscribe public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { - Map<String, Object> changed = new HashMap<>(); - changed.putAll(event.getDeleted()); - changed.putAll(event.getAdded()); - changed.putAll(event.getUpdated()); - - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(PREFIX)) { init(); break; } diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java index 310381e8a..0f2920e8e 100644 --- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java +++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java @@ -19,7 +19,6 @@ package org.apache.servicecomb.edge.core; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import org.apache.servicecomb.common.rest.RestProducerInvocationFlow; import org.apache.servicecomb.config.ConfigurationChangedEvent; @@ -106,13 +105,8 @@ public class URLMappedEdgeDispatcher extends AbstractEdgeDispatcher { @Subscribe public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { - Map<String, Object> changed = new HashMap<>(); - changed.putAll(event.getDeleted()); - changed.putAll(event.getAdded()); - changed.putAll(event.getUpdated()); - - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(KEY_MAPPING_PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(KEY_MAPPING_PREFIX)) { loadConfigurations(); break; } diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigurationChangedEvent.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigurationChangedEvent.java index ba2590c17..9e58a5f97 100644 --- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigurationChangedEvent.java +++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/ConfigurationChangedEvent.java @@ -18,8 +18,10 @@ package org.apache.servicecomb.config; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Objects; +import java.util.Set; public class ConfigurationChangedEvent { private final Map<String, Object> added; @@ -28,53 +30,49 @@ public class ConfigurationChangedEvent { private final Map<String, Object> updated; - private final boolean changed; - - private Map<String, Object> complete; + private Set<String> changed; private ConfigurationChangedEvent(Map<String, Object> added, Map<String, Object> updated, - Map<String, Object> deleted, boolean changed) { + Map<String, Object> deleted) { this.added = added; this.deleted = deleted; this.updated = updated; - this.changed = changed; + this.changed = new HashSet<>(); + this.changed.addAll(added.keySet()); + this.changed.addAll(updated.keySet()); + this.changed.addAll(deleted.keySet()); } public static ConfigurationChangedEvent createIncremental(Map<String, Object> latest, Map<String, Object> last) { Map<String, Object> itemsCreated = new HashMap<>(); Map<String, Object> itemsDeleted = new HashMap<>(); Map<String, Object> itemsModified = new HashMap<>(); - boolean changed = false; for (Map.Entry<String, Object> entry : latest.entrySet()) { String itemKey = entry.getKey(); if (!last.containsKey(itemKey)) { itemsCreated.put(itemKey, entry.getValue()); - changed = true; } else if (!Objects.equals(last.get(itemKey), latest.get(itemKey))) { itemsModified.put(itemKey, entry.getValue()); - changed = true; } } for (String itemKey : last.keySet()) { if (!latest.containsKey(itemKey)) { itemsDeleted.put(itemKey, null); - changed = true; } } ConfigurationChangedEvent event = ConfigurationChangedEvent - .createIncremental(itemsCreated, itemsModified, itemsDeleted, changed); - event.complete = latest; + .createIncremental(itemsCreated, itemsModified, itemsDeleted); return event; } public static ConfigurationChangedEvent createIncremental(Map<String, Object> added, Map<String, Object> updated, - Map<String, Object> deleted, boolean changed) { - return new ConfigurationChangedEvent(added, updated, deleted, changed); + Map<String, Object> deleted) { + return new ConfigurationChangedEvent(added, updated, deleted); } public static ConfigurationChangedEvent createIncremental(Map<String, Object> updated) { - return new ConfigurationChangedEvent(new HashMap<>(), updated, new HashMap<>(), true); + return new ConfigurationChangedEvent(new HashMap<>(), updated, new HashMap<>()); } public final Map<String, Object> getAdded() { @@ -91,11 +89,7 @@ public class ConfigurationChangedEvent { return deleted; } - public final Map<String, Object> getComplete() { - return complete; - } - - public final boolean isChanged() { + public final Set<String> getChanged() { return changed; } } diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java index 3931061fc..6ce2ea2d1 100644 --- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java +++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java @@ -17,108 +17,185 @@ package org.apache.servicecomb.config; -import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import java.util.function.Consumer; import java.util.function.DoubleConsumer; import java.util.function.IntConsumer; import java.util.function.LongConsumer; -import org.apache.commons.configuration.AbstractConfiguration; +import org.apache.servicecomb.foundation.common.event.EventManager; +import org.springframework.core.env.Environment; -import com.netflix.config.ConcurrentCompositeConfiguration; -import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicBooleanProperty; -import com.netflix.config.DynamicDoubleProperty; -import com.netflix.config.DynamicFloatProperty; -import com.netflix.config.DynamicIntProperty; -import com.netflix.config.DynamicLongProperty; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; +import com.google.common.eventbus.Subscribe; public class DynamicPropertiesImpl implements DynamicProperties { - public DynamicPropertiesImpl() { + private final Map<String, Set<Consumer<String>>> stringCallbacks = new HashMap<>(); + + private final Map<String, Set<IntConsumer>> intCallbacks = new HashMap<>(); + + private final Map<String, Set<LongConsumer>> longCallbacks = new HashMap<>(); + + private final Map<String, Set<DoubleConsumer>> floatCallbacks = new HashMap<>(); + + private final Map<String, Set<DoubleConsumer>> doubleCallbacks = new HashMap<>(); + + private final Map<String, Set<Consumer<Boolean>>> booleanCallbacks = new HashMap<>(); + + private final Environment environment; + + public DynamicPropertiesImpl(Environment environment) { + this.environment = environment; + EventManager.register(this); } - public DynamicPropertiesImpl(AbstractConfiguration... configurations) { - ConcurrentCompositeConfiguration configuration = new ConcurrentCompositeConfiguration(); - Arrays.stream(configurations).forEach(configuration::addConfiguration); + @Subscribe + public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { + for (Entry<String, Object> entry : event.getAdded().entrySet()) { + updateValue(entry); + } - ConfigurationManager.install(configuration); + for (Entry<String, Object> entry : event.getUpdated().entrySet()) { + updateValue(entry); + } + + for (Entry<String, Object> entry : event.getDeleted().entrySet()) { + updateDefault(entry); + } + } + + private void updateDefault(Entry<String, Object> entry) { + if (stringCallbacks.containsKey(entry.getKey())) { + for (Consumer<String> callbacks : stringCallbacks.get(entry.getKey())) { + callbacks.accept(null); + } + } + if (intCallbacks.containsKey(entry.getKey())) { + for (IntConsumer callbacks : intCallbacks.get(entry.getKey())) { + callbacks.accept(0); + } + } + if (longCallbacks.containsKey(entry.getKey())) { + for (LongConsumer callbacks : longCallbacks.get(entry.getKey())) { + callbacks.accept(0L); + } + } + if (floatCallbacks.containsKey(entry.getKey())) { + for (DoubleConsumer callbacks : floatCallbacks.get(entry.getKey())) { + callbacks.accept(0F); + } + } + if (doubleCallbacks.containsKey(entry.getKey())) { + for (DoubleConsumer callbacks : doubleCallbacks.get(entry.getKey())) { + callbacks.accept(0D); + } + } + if (booleanCallbacks.containsKey(entry.getKey())) { + for (Consumer<Boolean> callbacks : booleanCallbacks.get(entry.getKey())) { + callbacks.accept(false); + } + } + } + + private void updateValue(Entry<String, Object> entry) { + if (stringCallbacks.containsKey(entry.getKey())) { + for (Consumer<String> callbacks : stringCallbacks.get(entry.getKey())) { + callbacks.accept((String) entry.getValue()); + } + } + if (intCallbacks.containsKey(entry.getKey())) { + for (IntConsumer callbacks : intCallbacks.get(entry.getKey())) { + callbacks.accept((int) entry.getValue()); + } + } + if (longCallbacks.containsKey(entry.getKey())) { + for (LongConsumer callbacks : longCallbacks.get(entry.getKey())) { + callbacks.accept((long) entry.getValue()); + } + } + if (floatCallbacks.containsKey(entry.getKey())) { + for (DoubleConsumer callbacks : floatCallbacks.get(entry.getKey())) { + callbacks.accept((float) entry.getValue()); + } + } + if (doubleCallbacks.containsKey(entry.getKey())) { + for (DoubleConsumer callbacks : doubleCallbacks.get(entry.getKey())) { + callbacks.accept((double) entry.getValue()); + } + } + if (booleanCallbacks.containsKey(entry.getKey())) { + for (Consumer<Boolean> callbacks : booleanCallbacks.get(entry.getKey())) { + callbacks.accept((boolean) entry.getValue()); + } + } } @Override public String getStringProperty(String propertyName, Consumer<String> consumer, String defaultValue) { - DynamicStringProperty prop = propertyFactoryInstance().getStringProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + stringCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, defaultValue); } @Override public String getStringProperty(String propertyName, String defaultValue) { - return propertyFactoryInstance().getStringProperty(propertyName, defaultValue).get(); + return environment.getProperty(propertyName, defaultValue); } @Override public int getIntProperty(String propertyName, IntConsumer consumer, int defaultValue) { - DynamicIntProperty prop = propertyFactoryInstance().getIntProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + intCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, int.class, defaultValue); } @Override public int getIntProperty(String propertyName, int defaultValue) { - return propertyFactoryInstance().getIntProperty(propertyName, defaultValue).get(); + return environment.getProperty(propertyName, int.class, defaultValue); } @Override public long getLongProperty(String propertyName, LongConsumer consumer, long defaultValue) { - DynamicLongProperty prop = propertyFactoryInstance().getLongProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + longCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, long.class, defaultValue); } @Override public long getLongProperty(String propertyName, long defaultValue) { - return propertyFactoryInstance().getLongProperty(propertyName, defaultValue).get(); + return environment.getProperty(propertyName, long.class, defaultValue); } @Override public float getFloatProperty(String propertyName, DoubleConsumer consumer, float defaultValue) { - DynamicFloatProperty prop = propertyFactoryInstance().getFloatProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + floatCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, float.class, defaultValue); } @Override public float getFloatProperty(String propertyName, float defaultValue) { - return propertyFactoryInstance().getFloatProperty(propertyName, defaultValue).get(); + return environment.getProperty(propertyName, float.class, defaultValue); } @Override public double getDoubleProperty(String propertyName, DoubleConsumer consumer, double defaultValue) { - DynamicDoubleProperty prop = propertyFactoryInstance().getDoubleProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + doubleCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, double.class, defaultValue); } @Override public double getDoubleProperty(String propertyName, double defaultValue) { - return propertyFactoryInstance().getDoubleProperty(propertyName, defaultValue).get(); + return environment.getProperty(propertyName, double.class, defaultValue); } @Override public boolean getBooleanProperty(String propertyName, Consumer<Boolean> consumer, boolean defaultValue) { - DynamicBooleanProperty prop = propertyFactoryInstance().getBooleanProperty(propertyName, defaultValue); - prop.addCallback(() -> consumer.accept(prop.get())); - return prop.get(); + booleanCallbacks.computeIfAbsent(propertyName, key -> new HashSet<>()).add(consumer); + return environment.getProperty(propertyName, boolean.class, defaultValue); } @Override public boolean getBooleanProperty(String propertyName, boolean defaultValue) { - return propertyFactoryInstance().getBooleanProperty(propertyName, defaultValue).get(); - } - - private DynamicPropertyFactory propertyFactoryInstance() { - return DynamicPropertyFactory.getInstance(); + return environment.getProperty(propertyName, boolean.class, defaultValue); } } diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java index 91f49c8a1..18906749f 100644 --- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java +++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java @@ -50,8 +50,8 @@ public class FoundationConfigConfiguration { } @Bean - public DynamicPropertiesImpl dynamicProperties() { - return new DynamicPropertiesImpl(); + public DynamicPropertiesImpl dynamicProperties(Environment environment) { + return new DynamicPropertiesImpl(environment); } @Bean diff --git a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/DynamicPropertiesTest.java b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/DynamicPropertiesTest.java index 9090a64ae..4b2de1c79 100644 --- a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/DynamicPropertiesTest.java +++ b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/DynamicPropertiesTest.java @@ -23,13 +23,16 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.hamcrest.number.IsCloseTo.closeTo; +import java.util.HashMap; import java.util.Objects; +import org.apache.servicecomb.foundation.common.event.EventManager; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; -import com.netflix.config.ConcurrentMapConfiguration; import com.netflix.config.ConfigurationManager; import com.netflix.config.DynamicPropertyFactory; import com.seanyinx.github.unit.scaffolding.Poller; @@ -38,7 +41,6 @@ import com.seanyinx.github.unit.scaffolding.Randomness; import mockit.Deencapsulation; public class DynamicPropertiesTest { - private static final String stringPropertyName = uniquify("stringPropertyName"); private static final String intPropertyName = uniquify("intPropertyName"); @@ -57,7 +59,7 @@ public class DynamicPropertiesTest { private static final long longOldValue = Randomness.nextLong(); - private static final double floatOldValue = Randomness.nextDouble(); + private static final float floatOldValue = Double.valueOf(Randomness.nextDouble()).floatValue(); private static final double doubleOldValue = Randomness.nextDouble(); @@ -65,9 +67,9 @@ public class DynamicPropertiesTest { private static final double ERROR = 0.0000001; - private static DynamicProperties dynamicProperties; + private static Environment environment; - private static ConcurrentMapConfiguration configuration; + private static DynamicProperties dynamicProperties; private final Poller poller = new Poller(2000, 100); @@ -86,10 +88,9 @@ public class DynamicPropertiesTest { @BeforeClass public static void setUpClass() throws Exception { - tearDown(); - configuration = new ConcurrentMapConfiguration(); + environment = Mockito.mock(Environment.class); writeInitialConfig(); - dynamicProperties = new DynamicPropertiesImpl(configuration); + dynamicProperties = new DynamicPropertiesImpl(environment); } @AfterClass @@ -100,12 +101,13 @@ public class DynamicPropertiesTest { } private static void writeInitialConfig() throws Exception { - configuration.setProperty(stringPropertyName, stringOldValue); - configuration.setProperty(intPropertyName, String.valueOf(intOldValue)); - configuration.setProperty(longPropertyName, String.valueOf(longOldValue)); - configuration.setProperty(floatPropertyName, String.valueOf(floatOldValue)); - configuration.setProperty(doublePropertyName, String.valueOf(doubleOldValue)); - configuration.setProperty(booleanPropertyName, String.valueOf(booleanOldValue)); + Mockito.when(environment.getProperty(stringPropertyName, (String) null)).thenReturn(stringOldValue); + Mockito.when(environment.getProperty(intPropertyName, int.class, 0)).thenReturn(intOldValue); + Mockito.when(environment.getProperty(longPropertyName, long.class, 0L)).thenReturn(longOldValue); + Mockito.when(environment.getProperty(floatPropertyName, float.class, 0F)).thenReturn(floatOldValue); + Mockito.when(environment.getProperty(doublePropertyName, double.class, 0D)).thenReturn(doubleOldValue); + Mockito.when(environment.getProperty(booleanPropertyName, boolean.class, false)) + .thenReturn(booleanOldValue); } @Test @@ -118,7 +120,10 @@ public class DynamicPropertiesTest { String newValue = uniquify("newValue"); - configuration.setProperty(stringPropertyName, newValue); + Mockito.when(environment.getProperty(stringPropertyName, stringOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(stringPropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> Objects.equals(stringPropertyValue, newValue)); } @@ -133,7 +138,10 @@ public class DynamicPropertiesTest { int newValue = Randomness.nextInt(); - configuration.setProperty(intPropertyName, String.valueOf(newValue)); + Mockito.when(environment.getProperty(intPropertyName, int.class, intOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(intPropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> intPropertyValue == newValue); } @@ -148,7 +156,10 @@ public class DynamicPropertiesTest { long newValue = Randomness.nextLong(); - configuration.setProperty(longPropertyName, String.valueOf(newValue)); + Mockito.when(environment.getProperty(longPropertyName, long.class, longOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(longPropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> longPropertyValue == newValue); } @@ -161,9 +172,12 @@ public class DynamicPropertiesTest { property = dynamicProperties.getFloatProperty(floatPropertyName, value -> floatPropertyValue = value, 0); assertThat(property, closeTo(floatOldValue, ERROR)); - double newValue = Randomness.nextDouble(); + float newValue = Double.valueOf(Randomness.nextDouble()).floatValue(); - configuration.setProperty(floatPropertyName, String.valueOf(newValue)); + Mockito.when(environment.getProperty(floatPropertyName, float.class, floatOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(floatPropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> Math.abs(floatPropertyValue - newValue) < ERROR); } @@ -178,7 +192,10 @@ public class DynamicPropertiesTest { double newValue = Randomness.nextDouble(); - configuration.setProperty(doublePropertyName, String.valueOf(newValue)); + Mockito.when(environment.getProperty(doublePropertyName, double.class, doubleOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(doublePropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> Math.abs(doublePropertyValue - newValue) < ERROR); } @@ -196,7 +213,10 @@ public class DynamicPropertiesTest { boolean newValue = !booleanOldValue; - configuration.setProperty(booleanPropertyName, String.valueOf(newValue)); + Mockito.when(environment.getProperty(booleanPropertyName, boolean.class, booleanOldValue)).thenReturn(newValue); + HashMap<String, Object> updated = new HashMap<>(); + updated.put(booleanPropertyName, newValue); + EventManager.post(ConfigurationChangedEvent.createIncremental(updated)); poller.assertEventually(() -> booleanPropertyValue == newValue); } diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java index 8e33088e3..0ef5b2716 100644 --- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java +++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java @@ -17,10 +17,8 @@ package org.apache.servicecomb.qps; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; import org.apache.servicecomb.config.ConfigurationChangedEvent; @@ -85,13 +83,8 @@ public class QpsControllerManager { @Subscribe public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { - Map<String, Object> changed = new HashMap<>(); - changed.putAll(event.getDeleted()); - changed.putAll(event.getAdded()); - changed.putAll(event.getUpdated()); - - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(Config.CONFIG_PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(Config.CONFIG_PREFIX)) { configQpsControllerMap.clear(); qualifiedNameControllerMap.clear(); initGlobalQpsController(); diff --git a/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/provider/AccessController.java b/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/provider/AccessController.java index 07edae566..b923b2939 100644 --- a/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/provider/AccessController.java +++ b/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/provider/AccessController.java @@ -138,19 +138,14 @@ public class AccessController { @Subscribe public void onConfigurationChangedEvent(ConfigurationChangedEvent event) { - Map<String, Object> changed = new HashMap<>(); - changed.putAll(event.getDeleted()); - changed.putAll(event.getAdded()); - changed.putAll(event.getUpdated()); - - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(KEY_WHITE_LIST_PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(KEY_WHITE_LIST_PREFIX)) { loadConfigurations(KEY_WHITE_LIST_PREFIX); break; } } - for (Entry<String, Object> entry : changed.entrySet()) { - if (entry.getKey().startsWith(KEY_BLACK_LIST_PREFIX)) { + for (String changed : event.getChanged()) { + if (changed.startsWith(KEY_BLACK_LIST_PREFIX)) { loadConfigurations(KEY_BLACK_LIST_PREFIX); break; }