Skip to content

Commit c7bb930

Browse files
committed
remove content-length-header
1 parent 3abd181 commit c7bb930

File tree

6 files changed

+14
-40
lines changed

6 files changed

+14
-40
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import io.netty.handler.codec.http.HttpHeaderNames;
1414
import io.netty.handler.codec.http.HttpHeaders;
1515
import io.netty.handler.codec.http.HttpMethod;
16-
import io.netty.handler.codec.http.HttpUtil;
1716
import io.netty.handler.codec.http.QueryStringDecoder;
1817
import io.netty.handler.codec.http.cookie.Cookie;
1918
import io.netty.handler.codec.http.cookie.ServerCookieDecoder;
@@ -93,9 +92,7 @@ public HttpBody body() {
9392

9493
@Override
9594
public void setBody(HttpBody body) {
96-
var fullBody = body.asFull();
97-
var contentLength = fullBody.bytes().length();
98-
HttpUtil.setContentLength(nettyRequest, contentLength);
95+
this.content = body.asFull();
9996
}
10097

10198
@Override

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

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,4 @@ default String header(String name) {
6565
return null;
6666
}
6767

68-
/**
69-
* Returns value of content length header. If content is chunked-encoded and length is not present
70-
* then returns -1, unknown length. Requests that has no content are free to drop content length header
71-
* and can be assumed as zero length.
72-
*/
73-
default long contentLengthHeader() {
74-
var lenstr = header("Content-Length");
75-
if (lenstr == null) {
76-
var encoding = header("Transfer-Encoding");
77-
if (encoding != null && encoding.equals("chunked")) {
78-
return -1;
79-
} else {
80-
return 0;
81-
}
82-
} else {
83-
return Long.parseLong(lenstr);
84-
}
85-
}
8668
}

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,9 @@ public static void aggregate(RestRequest restRequest, Consumer<RestRequest> resu
3232
switch (httpRequest.body()) {
3333
case HttpBody.Full full -> resultConsumer.accept(restRequest);
3434
case HttpBody.Stream stream -> {
35-
if (httpRequest.contentLengthHeader() == 0) {
36-
stream.close();
37-
replaceBody(restRequest, ReleasableBytesReference.empty());
38-
resultConsumer.accept(restRequest);
39-
} else {
40-
final var aggregationHandler = new AggregationChunkHandler(restRequest, resultConsumer);
41-
stream.setHandler(aggregationHandler);
42-
stream.next();
43-
}
35+
final var aggregationHandler = new AggregationChunkHandler(restRequest, resultConsumer);
36+
stream.setHandler(aggregationHandler);
37+
stream.next();
4438
}
4539
}
4640
}
@@ -73,14 +67,15 @@ public void onNext(ReleasableBytesReference chunk, boolean isLast) {
7367
} else {
7468
if (chunks == null) {
7569
replaceBody(restRequest, chunk);
76-
resultConsumer.accept(restRequest);
7770
} else {
7871
chunks.add(chunk);
7972
var comp = CompositeBytesReference.of(chunks.toArray(new ReleasableBytesReference[0]));
8073
var relComp = new ReleasableBytesReference(comp, Releasables.wrap(chunks));
8174
replaceBody(restRequest, relComp);
82-
resultConsumer.accept(restRequest);
8375
}
76+
chunks = null;
77+
closing = true;
78+
resultConsumer.accept(restRequest);
8479
}
8580
}
8681

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,7 @@ private void dispatchRequest(
445445
return;
446446
}
447447
}
448-
// TODO: estimate streamed content size for circuit breaker,
449-
// something like http_max_chunk_size * avg_compression_ratio(for compressed content)
450-
final int contentLength = request.isFullContent() ? request.contentLength() : 0;
448+
final int contentLength = request.contentLength();
451449
try {
452450
if (handler.canTripCircuitBreaker()) {
453451
inFlightRequestsBreaker(circuitBreakerService).addEstimateBytesAndMaybeBreak(contentLength, "<http_request>");

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ public final String path() {
291291
}
292292

293293
public boolean hasContent() {
294-
return contentLength() != 0;
294+
return isStreamedContent() || contentLength() > 0;
295295
}
296296

297297
/**
@@ -301,7 +301,7 @@ public boolean hasContent() {
301301
public int contentLength() {
302302
return switch (httpRequest.body()) {
303303
case HttpBody.Full content -> content.bytes().length();
304-
case HttpBody.Stream stream -> Math.toIntExact(httpRequest.contentLengthHeader());
304+
case HttpBody.Stream stream -> 0;
305305
};
306306
}
307307

server/src/test/java/org/elasticsearch/rest/RestContentAggregatorTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ public void testZeroLengthStream() {
4848
var stream = new FakeHttpBodyStream();
4949
var request = newRestRequest(0);
5050
request.getHttpRequest().setBody(stream);
51-
aggregate(request, (aggregated) -> assertEquals(ReleasableBytesReference.empty(), aggregated.content()));
52-
assertTrue(stream.isClosed());
51+
var aggregatedRef = new AtomicReference<RestRequest>();
52+
aggregate(request, aggregatedRef::set);
53+
stream.sendNext(ReleasableBytesReference.empty(), true);
54+
assertEquals(0, aggregatedRef.get().contentLength());
5355
}
5456

5557
public void testAggregateRandomSize() {

0 commit comments

Comments
 (0)