Skip to content

Commit cc408fb

Browse files
committed
replace HTTP request content in place
1 parent 17de81e commit cc408fb

File tree

4 files changed

+13
-23
lines changed

4 files changed

+13
-23
lines changed

modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpRequest.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class Netty4HttpRequest implements HttpRequest {
4040

4141
private final int sequence;
4242
private final io.netty.handler.codec.http.HttpRequest nettyRequest;
43-
private final HttpBody content;
43+
private HttpBody content;
4444
private final Map<String, List<String>> headers;
4545
private final AtomicBoolean released;
4646
private final Exception inboundException;
@@ -92,18 +92,12 @@ public HttpBody body() {
9292
}
9393

9494
@Override
95-
public HttpRequest setBody(HttpBody body) {
96-
var nettyRequestCopy = new DefaultHttpRequest(
97-
nettyRequest.protocolVersion(),
98-
nettyRequest.method(),
99-
nettyRequest.uri(),
100-
nettyRequest.headers()
101-
);
95+
public void setBody(HttpBody body) {
10296
if (body.isFull()) {
10397
var contentLength = body.asFull().bytes().length();
104-
HttpUtil.setContentLength(nettyRequestCopy, contentLength);
98+
HttpUtil.setContentLength(nettyRequest, contentLength);
10599
}
106-
return new Netty4HttpRequest(sequence, nettyRequestCopy, body);
100+
this.content = body;
107101
}
108102

109103
@Override

server/src/main/java/org/elasticsearch/http/HttpRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ enum HttpVersion {
3030

3131
HttpBody body();
3232

33-
default HttpRequest setBody(HttpBody body) {
33+
default void setBody(HttpBody body) {
3434
throw new UnsupportedOperationException("not implemented");
3535
}
3636

server/src/main/java/org/elasticsearch/rest/RestRequest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,6 @@ protected RestRequest(
118118
this(parserConfig, params, rawPath, headers, httpRequest, httpChannel, requestIdGenerator.incrementAndGet());
119119
}
120120

121-
static RestRequest withHttpRequest(RestRequest restRequest, HttpRequest httpRequest) {
122-
var requestCopy = new RestRequest(restRequest);
123-
requestCopy.httpRequest = httpRequest;
124-
return requestCopy;
125-
}
126-
127121
@SuppressWarnings("this-escape")
128122
private RestRequest(
129123
XContentParserConfiguration parserConfig,

server/src/main/java/org/elasticsearch/rest/RestRequestAggregator.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@ public RestRequestAggregator(CircuitBreakerService circuitBreakerService) {
2626
this.circuitBreakerService = circuitBreakerService;
2727
}
2828

29-
private static RestRequest replaceBody(RestRequest restRequest, ReleasableBytesReference aggregate) {
30-
var aggregatedHttpRequest = restRequest.getHttpRequest().setBody(new HttpBody.ByteRefHttpBody(aggregate));
31-
return RestRequest.withHttpRequest(restRequest, aggregatedHttpRequest);
29+
private static void replaceBody(RestRequest restRequest, ReleasableBytesReference aggregate) {
30+
restRequest.getHttpRequest().setBody(new HttpBody.ByteRefHttpBody(aggregate));
3231
}
3332

3433
public void aggregate(RestRequest restRequest, RestChannel restChannel, Consumer<RestRequest> result) {
3534
if (restRequest.isFullContent()) {
3635
result.accept(restRequest);
3736
} else if (restRequest.contentLength() == 0) {
3837
restRequest.getHttpRequest().body().asStream().close();
39-
result.accept(replaceBody(restRequest, ReleasableBytesReference.empty()));
38+
replaceBody(restRequest, ReleasableBytesReference.empty());
39+
result.accept(restRequest);
4040
} else {
4141
final var stream = restRequest.getHttpRequest().body().asStream();
4242
final var aggregationHandler = new AggregationChunkHandler(restRequest, result);
@@ -72,11 +72,13 @@ public void onNext(ReleasableBytesReference chunk, boolean isLast) {
7272
stream.next();
7373
} else {
7474
if (chunks == null) {
75-
result.accept(replaceBody(restRequest, chunk));
75+
replaceBody(restRequest, chunk);
76+
result.accept(restRequest);
7677
} else {
7778
var comp = CompositeBytesReference.of(chunks.toArray(new ReleasableBytesReference[0]));
7879
var relComp = new ReleasableBytesReference(comp, Releasables.wrap(chunks));
79-
result.accept(replaceBody(restRequest, relComp));
80+
replaceBody(restRequest, relComp);
81+
result.accept(restRequest);
8082
}
8183
}
8284
}

0 commit comments

Comments
 (0)