From 47a3a5c97011a4e147db9a4cab3e85c8486fcec7 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 8 Jul 2020 19:52:50 +0300 Subject: [PATCH] Switch to Reactor 2020.0.0 snapshots See gh-25373 --- build.gradle | 4 ++-- .../client/reactive/ReactorClientHttpResponse.java | 13 ++----------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 8032f1ec413..55f920ceea2 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ configure(allprojects) { project -> imports { mavenBom "com.fasterxml.jackson:jackson-bom:2.11.0" mavenBom "io.netty:netty-bom:4.1.50.Final" - mavenBom "io.projectreactor:reactor-bom:2020.0.0-M1" + mavenBom "io.projectreactor:reactor-bom:2020.0.0-SNAPSHOT" mavenBom "io.r2dbc:r2dbc-bom:Arabba-SR5" mavenBom "io.rsocket:rsocket-bom:1.0.1" mavenBom "org.eclipse.jetty:jetty-bom:9.4.30.v20200611" @@ -285,7 +285,7 @@ configure(allprojects) { project -> repositories { mavenCentral() maven { url "https://repo.spring.io/libs-spring-framework-build" } - maven { url "https://repo.spring.io/milestone" } // Reactor + maven { url "https://repo.spring.io/snapshot" } // Reactor } } configurations.all { diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java index 968b1b770ee..a0830708ea0 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java @@ -58,7 +58,7 @@ class ReactorClientHttpResponse implements ClientHttpResponse { private final NettyDataBufferFactory bufferFactory; - // 0 - not subscribed, 1 - subscribed, 2 - cancelled, 3 - cancelled via connector (before subscribe) + // 0 - not subscribed, 1 - subscribed, 2 - cancelled via connector (before subscribe) private final AtomicInteger state = new AtomicInteger(0); private final String logPrefix; @@ -100,20 +100,11 @@ class ReactorClientHttpResponse implements ClientHttpResponse { if (this.state.compareAndSet(0, 1)) { return; } - // https://github.com/reactor/reactor-netty/issues/503 - // FluxReceive rejects multiple subscribers, but not after a cancel(). - // Subsequent subscribers after cancel() will not be rejected, but will hang instead. - // So we need to reject once in cancelled state. if (this.state.get() == 2) { - throw new IllegalStateException( - "The client response body can only be consumed once."); - } - else if (this.state.get() == 3) { throw new IllegalStateException( "The client response body has been released already due to cancellation."); } }) - .doOnCancel(() -> this.state.compareAndSet(1, 2)) .map(byteBuf -> { byteBuf.retain(); return this.bufferFactory.wrap(byteBuf); @@ -159,7 +150,7 @@ class ReactorClientHttpResponse implements ClientHttpResponse { * reading was delayed for some reason. */ void releaseAfterCancel(HttpMethod method) { - if (mayHaveBody(method) && this.state.compareAndSet(0, 3)) { + if (mayHaveBody(method) && this.state.compareAndSet(0, 2)) { if (logger.isDebugEnabled()) { logger.debug(this.logPrefix + "Releasing body, not yet subscribed."); }