diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleManager.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleManager.java index 22b698dd..aea81664 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleManager.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleManager.java @@ -39,7 +39,7 @@ import com.alibaba.csp.sentinel.property.SentinelProperty; */ public final class AuthorityRuleManager { - private static Map> authorityRules = new ConcurrentHashMap<>(); + private static volatile Map> authorityRules = new ConcurrentHashMap<>(); private static final RulePropertyListener LISTENER = new RulePropertyListener(); private static SentinelProperty> currentProperty = new DynamicSentinelProperty<>(); @@ -92,13 +92,16 @@ public final class AuthorityRuleManager { private static class RulePropertyListener implements PropertyListener> { @Override - public void configUpdate(List conf) { - Map> rules = loadAuthorityConf(conf); + public synchronized void configLoad(List value) { + authorityRules = loadAuthorityConf(value); - authorityRules.clear(); - if (rules != null) { - authorityRules.putAll(rules); - } + RecordLog.info("[AuthorityRuleManager] Authority rules loaded: {}", authorityRules); + } + + @Override + public synchronized void configUpdate(List conf) { + authorityRules = loadAuthorityConf(conf); + RecordLog.info("[AuthorityRuleManager] Authority rules received: {}", authorityRules); } @@ -135,16 +138,6 @@ public final class AuthorityRuleManager { return newRuleMap; } - @Override - public void configLoad(List value) { - Map> rules = loadAuthorityConf(value); - - authorityRules.clear(); - if (rules != null) { - authorityRules.putAll(rules); - } - RecordLog.info("[AuthorityRuleManager] Load authority rules: {}", authorityRules); - } } static Map> getAuthorityRules() {