From 94aea568f6f498e47c1cd2f323cf042dcfbb7eb7 Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Wed, 15 Aug 2018 15:33:29 +0800 Subject: [PATCH] Miscellaneous update Signed-off-by: Eric Zhao --- .../java/com/alibaba/csp/sentinel/CtSph.java | 9 +++--- .../sentinel/slots/block/flow/FlowRule.java | 12 ++++++- .../slots/block/flow/FlowRuleManager.java | 31 +++++++------------ .../slots/nodeselector/NodeSelectorSlot.java | 2 +- sentinel-demo/sentinel-demo-basic/pom.xml | 4 --- .../csp/sentinel/demo/flow/FlowQpsDemo.java | 5 +-- 6 files changed, 31 insertions(+), 32 deletions(-) diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtSph.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtSph.java index 2f958ee8..43f3379a 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtSph.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/CtSph.java @@ -88,8 +88,8 @@ public class CtSph implements Sph { ProcessorSlot chain = lookProcessChain(resourceWrapper); /* - * Means processor size exceeds {@link Constants.MAX_ENTRY_SIZE}, no - * rule checking will do. + * Means processor cache size exceeds {@link Constants.MAX_SLOT_CHAIN_SIZE}, so no + * rule checking will be done. */ if (chain == null) { return new CtEntry(resourceWrapper, null, context); @@ -102,7 +102,7 @@ public class CtSph implements Sph { e.exit(count, args); throw e1; } catch (Throwable e1) { - RecordLog.info("sentinel unexpected exception", e1); + RecordLog.info("Sentinel unexpected exception", e1); } return e; } @@ -134,8 +134,7 @@ public class CtSph implements Sph { } chain = Env.slotsChainbuilder.build(); - HashMap newMap - = new HashMap( + Map newMap = new HashMap( chainMap.size() + 1); newMap.putAll(chainMap); newMap.put(resourceWrapper, chain); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java index 3d13fb3b..183082f0 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRule.java @@ -53,13 +53,23 @@ public class FlowRule extends AbstractRule { */ private int grade = RuleConstant.FLOW_GRADE_QPS; + /** + * Flow control threshold count. + */ private double count; /** - * 0为直接限流;1为关联限流;2为链路限流 + * Flow control strategy based on invocation chain. + * + * {@link RuleConstant#STRATEGY_DIRECT} for direct flow control (by origin); + * {@link RuleConstant#STRATEGY_RELATE} for relevant flow control (with relevant resource); + * {@link RuleConstant#STRATEGY_CHAIN} for chain flow control (by entrance resource). */ private int strategy = RuleConstant.STRATEGY_DIRECT; + /** + * Reference resource in flow control with relevant resource. + */ private String refResource; /** diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java index 631b7b89..ed84d72e 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java @@ -86,9 +86,6 @@ public class FlowRuleManager { */ public static List getRules() { List rules = new ArrayList(); - if (flowRules == null) { - return rules; - } for (Map.Entry> entry : flowRules.entrySet()) { rules.addAll(entry.getValue()); } @@ -145,13 +142,11 @@ public class FlowRuleManager { public static void checkFlow(ResourceWrapper resource, Context context, DefaultNode node, int count) throws BlockException { - if (flowRules != null) { - List rules = flowRules.get(resource.getName()); - if (rules != null) { - for (FlowRule rule : rules) { - if (!rule.passCheck(context, node, count)) { - throw new FlowException(rule.getLimitApp()); - } + List rules = flowRules.get(resource.getName()); + if (rules != null) { + for (FlowRule rule : rules) { + if (!rule.passCheck(context, node, count)) { + throw new FlowException(rule.getLimitApp()); } } } @@ -166,14 +161,12 @@ public class FlowRuleManager { return false; } - if (flowRules != null) { - List rules = flowRules.get(resourceName); + List rules = flowRules.get(resourceName); - if (rules != null) { - for (FlowRule rule : rules) { - if (origin.equals(rule.getLimitApp())) { - return false; - } + if (rules != null) { + for (FlowRule rule : rules) { + if (origin.equals(rule.getLimitApp())) { + return false; } } } @@ -190,7 +183,7 @@ public class FlowRuleManager { flowRules.clear(); flowRules.putAll(rules); } - RecordLog.info("receive flow config: " + flowRules); + RecordLog.info("[FlowRuleManager] Flow rules received: " + flowRules); } @Override @@ -200,7 +193,7 @@ public class FlowRuleManager { flowRules.clear(); flowRules.putAll(rules); } - RecordLog.info("load flow config: " + flowRules); + RecordLog.info("[FlowRuleManager] Flow rules loaded: " + flowRules); } } diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java index 144780e6..cccb1cca 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java @@ -128,7 +128,7 @@ public class NodeSelectorSlot extends AbstractLinkedProcessorSlot { /** * {@link DefaultNode}s of the same resource in different context. */ - private Map map = new HashMap(10); + private volatile Map map = new HashMap(10); @Override public void entry(Context context, ResourceWrapper resourceWrapper, Object obj, int count, Object... args) diff --git a/sentinel-demo/sentinel-demo-basic/pom.xml b/sentinel-demo/sentinel-demo-basic/pom.xml index ee46ca0d..ee6b5c62 100755 --- a/sentinel-demo/sentinel-demo-basic/pom.xml +++ b/sentinel-demo/sentinel-demo-basic/pom.xml @@ -10,8 +10,4 @@ sentinel-demo-basic - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowQpsDemo.java b/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowQpsDemo.java index 7f5114ac..33903b7d 100755 --- a/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowQpsDemo.java +++ b/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowQpsDemo.java @@ -42,18 +42,19 @@ public class FlowQpsDemo { private static volatile boolean stop = false; - private static final int threadCount = 1; + private static final int threadCount = 32; private static int seconds = 60 + 40; public static void main(String[] args) throws Exception { + initFlowQpsRule(); + tick(); // first make the system run on a very low condition simulateTraffic(); System.out.println("===== begin to do flow control"); System.out.println("only 20 requests per second can pass"); - initFlowQpsRule(); }