Remove deprecated passCheck() in Rule and polish interface
Signed-off-by: Eric Zhao <sczyh16@gmail.com>
This commit is contained in:
parent
a5fe23ad63
commit
a18ef7cbfa
|
|
@ -39,6 +39,7 @@ public abstract class AbstractRule implements Rule {
|
||||||
*/
|
*/
|
||||||
private String limitApp;
|
private String limitApp;
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getResource() {
|
public String getResource() {
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.slots.block;
|
package com.alibaba.csp.sentinel.slots.block;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base interface of all rules.
|
* Base interface of all rules.
|
||||||
*
|
*
|
||||||
|
|
@ -26,14 +23,10 @@ import com.alibaba.csp.sentinel.node.DefaultNode;
|
||||||
public interface Rule {
|
public interface Rule {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether current statistical indicators meet this rule, which means not exceeding any threshold.
|
* Get target resource of this rule.
|
||||||
*
|
*
|
||||||
* @param context current {@link Context}
|
* @return target resource of this rule
|
||||||
* @param node current {@link com.alibaba.csp.sentinel.node.Node}
|
|
||||||
* @param count tokens needed.
|
|
||||||
* @param args arguments of the original invocation.
|
|
||||||
* @return If current statistical indicators not exceeding any threshold return true, otherwise return false.
|
|
||||||
*/
|
*/
|
||||||
boolean passCheck(Context context, DefaultNode node, int count, Object... args);
|
String getResource();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.slots.block.authority;
|
package com.alibaba.csp.sentinel.slots.block.authority;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
||||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||||
|
|
||||||
|
|
@ -59,11 +57,6 @@ public class AuthorityRule extends AbstractRule {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean passCheck(Context context, DefaultNode node, int count, Object... args) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "AuthorityRule{" +
|
return "AuthorityRule{" +
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.slots.block.degrade;
|
package com.alibaba.csp.sentinel.slots.block.degrade;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
||||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||||
|
|
||||||
|
|
@ -172,10 +170,4 @@ public class DegradeRule extends AbstractRule {
|
||||||
", statIntervalMs=" + statIntervalMs +
|
", statIntervalMs=" + statIntervalMs +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public boolean passCheck(Context context, DefaultNode node, int count, Object... args) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.slots.block.flow;
|
package com.alibaba.csp.sentinel.slots.block.flow;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
||||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||||
|
|
||||||
|
|
@ -186,11 +184,6 @@ public class FlowRule extends AbstractRule {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean passCheck(Context context, DefaultNode node, int acquireCount, Object... args) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) { return true; }
|
if (this == o) { return true; }
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.slots.system;
|
package com.alibaba.csp.sentinel.slots.system;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -133,11 +131,6 @@ public class SystemRule extends AbstractRule {
|
||||||
this.highestCpuUsage = highestCpuUsage;
|
this.highestCpuUsage = highestCpuUsage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean passCheck(Context context, DefaultNode node, int count, Object... args) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) {
|
if (this == o) {
|
||||||
|
|
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.alibaba.csp.sentinel.slots.block.flow;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.ClusterNode;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author jialiang.linjl
|
|
||||||
*/
|
|
||||||
@Ignore("Deprecated test for legacy FlowRule")
|
|
||||||
public class FlowRuleTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testFlowRule_grade() {
|
|
||||||
|
|
||||||
FlowRule flowRule = new FlowRule();
|
|
||||||
flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
|
|
||||||
flowRule.setCount(1);
|
|
||||||
flowRule.setLimitApp("default");
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_DIRECT);
|
|
||||||
|
|
||||||
DefaultController defaultController = new DefaultController(1, flowRule.getGrade());
|
|
||||||
flowRule.setRater(defaultController);
|
|
||||||
|
|
||||||
Context context = mock(Context.class);
|
|
||||||
DefaultNode node = mock(DefaultNode.class);
|
|
||||||
ClusterNode cn = mock(ClusterNode.class);
|
|
||||||
|
|
||||||
when(context.getOrigin()).thenReturn("");
|
|
||||||
when(node.getClusterNode()).thenReturn(cn);
|
|
||||||
when(cn.passQps()).thenReturn(1d);
|
|
||||||
|
|
||||||
assertFalse(flowRule.passCheck(context, node, 1));
|
|
||||||
|
|
||||||
flowRule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
|
|
||||||
defaultController = new DefaultController(1, flowRule.getGrade());
|
|
||||||
flowRule.setRater(defaultController);
|
|
||||||
when(cn.curThreadNum()).thenReturn(1);
|
|
||||||
assertTrue(!flowRule.passCheck(context, node, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testFlowRule_strategy() {
|
|
||||||
|
|
||||||
FlowRule flowRule = new FlowRule();
|
|
||||||
flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
|
|
||||||
flowRule.setCount(1);
|
|
||||||
flowRule.setLimitApp("default");
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_CHAIN);
|
|
||||||
DefaultController defaultController = new DefaultController(1, flowRule.getGrade());
|
|
||||||
flowRule.setRater(defaultController);
|
|
||||||
flowRule.setRefResource("entry1");
|
|
||||||
|
|
||||||
Context context = mock(Context.class);
|
|
||||||
DefaultNode dn = mock(DefaultNode.class);
|
|
||||||
|
|
||||||
when(context.getName()).thenReturn("entry1");
|
|
||||||
when(dn.passQps()).thenReturn(1d);
|
|
||||||
assertFalse(flowRule.passCheck(context, dn, 1));
|
|
||||||
|
|
||||||
when(context.getName()).thenReturn("entry2");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1));
|
|
||||||
|
|
||||||
// Strategy == relate
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_CHAIN);
|
|
||||||
ClusterNode cn = mock(ClusterNode.class);
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOrigin() {
|
|
||||||
FlowRule flowRule = new FlowRule();
|
|
||||||
flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
|
|
||||||
flowRule.setCount(1);
|
|
||||||
flowRule.setLimitApp("default");
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_DIRECT);
|
|
||||||
DefaultController defaultController = new DefaultController(1, flowRule.getGrade());
|
|
||||||
flowRule.setRater(defaultController);
|
|
||||||
flowRule.setRefResource("entry1");
|
|
||||||
|
|
||||||
Context context = mock(Context.class);
|
|
||||||
DefaultNode dn = mock(DefaultNode.class);
|
|
||||||
when(context.getOrigin()).thenReturn("origin1");
|
|
||||||
when(dn.passQps()).thenReturn(1d);
|
|
||||||
when(context.getOriginNode()).thenReturn(dn);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* first scenario, limit app as default
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
ClusterNode cn = mock(ClusterNode.class);
|
|
||||||
when(dn.getClusterNode()).thenReturn(cn);
|
|
||||||
when(cn.passQps()).thenReturn(1d);
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
when(cn.passQps()).thenReturn(0d);
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_CHAIN);
|
|
||||||
flowRule.setResource("entry1");
|
|
||||||
when(context.getName()).thenReturn("entry1");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
when(context.getName()).thenReturn("entry2");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
// relate node
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_RELATE);
|
|
||||||
flowRule.setResource("worong");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* second scenario test a context with the same origin1
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
flowRule.setLimitApp("origin1");
|
|
||||||
when(context.getName()).thenReturn("entry1");
|
|
||||||
// direct node
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_DIRECT);
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
|
|
||||||
// chain node
|
|
||||||
flowRule.setResource("entry1");
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_CHAIN);
|
|
||||||
when(context.getName()).thenReturn("entry1");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
when(context.getName()).thenReturn("entry2");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
// relate node
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_RELATE);
|
|
||||||
flowRule.setResource("not exits");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
when(context.getOrigin()).thenReturn("origin2");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* limit app= other
|
|
||||||
*/
|
|
||||||
flowRule.setLimitApp("other");
|
|
||||||
flowRule.setResource("hello world");
|
|
||||||
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_DIRECT);
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
|
|
||||||
flowRule.setStrategy(RuleConstant.STRATEGY_CHAIN);
|
|
||||||
flowRule.setResource("entry1");
|
|
||||||
when(context.getName()).thenReturn("entry1");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]) == false);
|
|
||||||
|
|
||||||
when(context.getName()).thenReturn("entry2");
|
|
||||||
assertTrue(flowRule.passCheck(context, dn, 1, new Object[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -21,8 +21,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import com.alibaba.csp.sentinel.context.Context;
|
|
||||||
import com.alibaba.csp.sentinel.node.DefaultNode;
|
|
||||||
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
|
||||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||||
|
|
||||||
|
|
@ -190,12 +188,6 @@ public class ParamFlowRule extends AbstractRule {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public boolean passCheck(Context context, DefaultNode node, int count, Object... args) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) { return true; }
|
if (this == o) { return true; }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue