@@ -114,12 +114,7 @@ public class Tracer { | |||
m.addException(entry.getResourceWrapper().getName(), count, t); | |||
} | |||
// clusterNode can be null when Constants.ON is false. | |||
ClusterNode clusterNode = curNode.getClusterNode(); | |||
if (clusterNode == null) { | |||
return; | |||
} | |||
clusterNode.trace(t, count); | |||
curNode.trace(t, count); | |||
} | |||
/** | |||
@@ -123,18 +123,4 @@ public class ClusterNode extends StatisticNode { | |||
return originCountMap; | |||
} | |||
/** | |||
* Add exception count only when given {@code throwable} is not a {@link BlockException}. | |||
* | |||
* @param throwable target exception | |||
* @param count count to add | |||
*/ | |||
public void trace(Throwable throwable, int count) { | |||
if (count <= 0) { | |||
return; | |||
} | |||
if (!BlockException.isBlockException(throwable)) { | |||
this.increaseExceptionQps(count); | |||
} | |||
} | |||
} |
@@ -23,6 +23,7 @@ import com.alibaba.csp.sentinel.SphO; | |||
import com.alibaba.csp.sentinel.SphU; | |||
import com.alibaba.csp.sentinel.context.Context; | |||
import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; | |||
import com.alibaba.csp.sentinel.slots.block.BlockException; | |||
import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot; | |||
/** | |||
@@ -146,6 +147,28 @@ public class DefaultNode extends StatisticNode { | |||
visitTree(0, this); | |||
} | |||
/** | |||
* Add exception count only when given {@code throwable} is not a {@link BlockException}. | |||
* | |||
* @param throwable target exception | |||
* @param count count to add | |||
*/ | |||
public void trace(Throwable throwable, int count) { | |||
if (count <= 0) { | |||
return; | |||
} | |||
if (BlockException.isBlockException(throwable)) { | |||
return; | |||
} | |||
super.increaseExceptionQps(count); | |||
// clusterNode can be null when Constants.ON is false. | |||
if (clusterNode != null) { | |||
clusterNode.increaseExceptionQps(count); | |||
} | |||
} | |||
private void visitTree(int level, DefaultNode node) { | |||
for (int i = 0; i < level; ++i) { | |||
System.out.print("-"); | |||
@@ -15,6 +15,8 @@ | |||
*/ | |||
package com.alibaba.csp.sentinel.node; | |||
import com.alibaba.csp.sentinel.EntryType; | |||
import com.alibaba.csp.sentinel.slotchain.StringResourceWrapper; | |||
import com.alibaba.csp.sentinel.slots.block.flow.FlowException; | |||
import org.junit.Test; | |||
@@ -131,24 +133,25 @@ public class ClusterNodeTest { | |||
@Test | |||
public void testTraceException() { | |||
ClusterNode clusterNode = new ClusterNode("test"); | |||
DefaultNode defaultNode = new DefaultNode(new StringResourceWrapper("test", EntryType.IN), clusterNode); | |||
Exception exception = new RuntimeException("test"); | |||
// test count<=0, no exceptionQps added | |||
clusterNode.trace(exception, 0); | |||
clusterNode.trace(exception, -1); | |||
assertEquals(0, clusterNode.exceptionQps(), 0.01); | |||
assertEquals(0, clusterNode.totalException()); | |||
defaultNode.trace(exception, 0); | |||
defaultNode.trace(exception, -1); | |||
assertEquals(0, defaultNode.exceptionQps(), 0.01); | |||
assertEquals(0, defaultNode.totalException()); | |||
// test count=1, not BlockException, 1 exceptionQps added | |||
clusterNode.trace(exception, 1); | |||
assertEquals(1, clusterNode.exceptionQps(), 0.01); | |||
assertEquals(1, clusterNode.totalException()); | |||
defaultNode.trace(exception, 1); | |||
assertEquals(1, defaultNode.exceptionQps(), 0.01); | |||
assertEquals(1, defaultNode.totalException()); | |||
// test count=1, BlockException, no exceptionQps added | |||
FlowException flowException = new FlowException("flow"); | |||
clusterNode.trace(flowException, 1); | |||
assertEquals(1, clusterNode.exceptionQps(), 0.01); | |||
assertEquals(1, clusterNode.totalException()); | |||
defaultNode.trace(flowException, 1); | |||
assertEquals(1, defaultNode.exceptionQps(), 0.01); | |||
assertEquals(1, defaultNode.totalException()); | |||
} | |||
} |