From b05502f8c20a3f6d6a38ca174ff283961e5e6a24 Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Wed, 23 Oct 2019 19:35:14 +0800 Subject: [PATCH] Fix hookOnCancel handing logic in SentinelReactorSubscriber (#1089) Signed-off-by: Eric Zhao --- .../reactor/SentinelReactorSubscriber.java | 2 +- .../MonoSentinelOperatorIntegrationTest.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorSubscriber.java b/sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorSubscriber.java index 3a3be774..fa5d9353 100644 --- a/sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorSubscriber.java +++ b/sentinel-adapter/sentinel-reactor-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/reactor/SentinelReactorSubscriber.java @@ -155,7 +155,7 @@ public class SentinelReactorSubscriber extends InheritableBaseSubscriber { @Override protected void hookOnCancel() { - + tryCompleteEntry(); } private boolean tryCompleteEntry() { diff --git a/sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperatorIntegrationTest.java b/sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperatorIntegrationTest.java index e682723a..ba867839 100644 --- a/sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperatorIntegrationTest.java +++ b/sentinel-adapter/sentinel-reactor-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/reactor/MonoSentinelOperatorIntegrationTest.java @@ -162,6 +162,28 @@ public class MonoSentinelOperatorIntegrationTest { assertEquals(1, cn.totalException()); } + @Test + public void testMultipleReactorTransformerLatterFlowControl() { + String resourceName1 = createResourceName("testMultipleReactorTransformerLatterFlowControl1"); + String resourceName2 = createResourceName("testMultipleReactorTransformerLatterFlowControl2"); + FlowRuleManager.loadRules(Collections.singletonList( + new FlowRule(resourceName2).setCount(0) + )); + StepVerifier.create(Mono.just(2) + .transform(new SentinelReactorTransformer<>(resourceName1)) + .transform(new SentinelReactorTransformer<>(resourceName2))) + .expectError(BlockException.class) + .verify(); + + ClusterNode cn1 = ClusterBuilderSlot.getClusterNode(resourceName1); + assertNotNull(cn1); + ClusterNode cn2 = ClusterBuilderSlot.getClusterNode(resourceName2); + assertNotNull(cn2); + assertEquals(1, cn2.blockRequest()); + assertEquals(1, cn1.totalSuccess()); + FlowRuleManager.loadRules(new ArrayList<>()); + } + private String createResourceName(String resourceName) { return "reactor_test_mono_" + resourceName; }