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; }