From 2439f87a48554baed2de64afad8d3bdd7a7de37b Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 23 Oct 2018 21:41:27 -0400 Subject: [PATCH] Add onDiscard hook to Jetty client request The flatMap operation in writeAndFlushWith could buffer internally. Issue: SPR-17424 --- .../http/client/reactive/JettyClientHttpRequest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java index 4fa842ef01f..ced4dbb4ff1 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java @@ -33,6 +33,7 @@ import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.core.io.buffer.PooledDataBuffer; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; @@ -94,7 +95,10 @@ class JettyClientHttpRequest extends AbstractClientHttpRequest { @Override public Mono writeAndFlushWith(Publisher> body) { - Flux chunks = Flux.from(body).flatMap(Function.identity()).map(this::toContentChunk); + Flux chunks = Flux.from(body) + .flatMap(Function.identity()) + .doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release) + .map(this::toContentChunk); ReactiveRequest.Content content = ReactiveRequest.Content.fromPublisher(chunks, getContentType()); this.reactiveRequest = ReactiveRequest.newBuilder(this.jettyRequest).content(content).build(); return doCommit(this::completes);