From 679625e2991e569e363bce4faeaa60515f9c3bcb Mon Sep 17 00:00:00 2001 From: zhuyou1234 Date: Wed, 6 Apr 2022 14:43:41 +0800 Subject: [PATCH] Improve AuthorityRuleManager: replace the rule map instead of clear-then-insert when updating rules (#2655) --- .../block/authority/AuthorityRuleManager.java | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) 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() {