fix: Tracer does not trace exception to DefaultNode (#1068)
This commit is contained in:
parent
04a1d065dd
commit
5e9cfb0deb
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue