@@ -114,12 +114,7 @@ public class Tracer { | |||||
m.addException(entry.getResourceWrapper().getName(), count, t); | 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; | 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.SphU; | ||||
import com.alibaba.csp.sentinel.context.Context; | import com.alibaba.csp.sentinel.context.Context; | ||||
import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; | import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; | ||||
import com.alibaba.csp.sentinel.slots.block.BlockException; | |||||
import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot; | import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot; | ||||
/** | /** | ||||
@@ -146,6 +147,28 @@ public class DefaultNode extends StatisticNode { | |||||
visitTree(0, this); | 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) { | private void visitTree(int level, DefaultNode node) { | ||||
for (int i = 0; i < level; ++i) { | for (int i = 0; i < level; ++i) { | ||||
System.out.print("-"); | System.out.print("-"); | ||||
@@ -15,6 +15,8 @@ | |||||
*/ | */ | ||||
package com.alibaba.csp.sentinel.node; | 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 com.alibaba.csp.sentinel.slots.block.flow.FlowException; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
@@ -131,24 +133,25 @@ public class ClusterNodeTest { | |||||
@Test | @Test | ||||
public void testTraceException() { | public void testTraceException() { | ||||
ClusterNode clusterNode = new ClusterNode("test"); | ClusterNode clusterNode = new ClusterNode("test"); | ||||
DefaultNode defaultNode = new DefaultNode(new StringResourceWrapper("test", EntryType.IN), clusterNode); | |||||
Exception exception = new RuntimeException("test"); | Exception exception = new RuntimeException("test"); | ||||
// test count<=0, no exceptionQps added | // 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 | // 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 | // test count=1, BlockException, no exceptionQps added | ||||
FlowException flowException = new FlowException("flow"); | 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()); | |||||
} | } | ||||
} | } |