Skip to content

Commit 80d67ae

Browse files
authored
Release pipelined request in netty server tests (#32368)
The Netty4HttpServerPipeliningTests adds a different request handler to the netty pipeline. This request does not properly release pipelined request. This means that when we enable leak detection, the test fails. This commit properly releases the request.
1 parent bb10c8a commit 80d67ae

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

modules/transport-netty4/src/test/java/org/elasticsearch/http/netty4/Netty4HttpServerPipeliningTests.java

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -240,37 +240,43 @@ class PossiblySlowRunnable implements Runnable {
240240

241241
@Override
242242
public void run() {
243-
final String uri;
244-
if (pipelinedRequest != null && pipelinedRequest.last() instanceof FullHttpRequest) {
245-
uri = ((FullHttpRequest) pipelinedRequest.last()).uri();
246-
} else {
247-
uri = fullHttpRequest.uri();
248-
}
243+
try {
244+
final String uri;
245+
if (pipelinedRequest != null && pipelinedRequest.last() instanceof FullHttpRequest) {
246+
uri = ((FullHttpRequest) pipelinedRequest.last()).uri();
247+
} else {
248+
uri = fullHttpRequest.uri();
249+
}
249250

250-
final ByteBuf buffer = Unpooled.copiedBuffer(uri, StandardCharsets.UTF_8);
251+
final ByteBuf buffer = Unpooled.copiedBuffer(uri, StandardCharsets.UTF_8);
251252

252-
final DefaultFullHttpResponse httpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buffer);
253-
httpResponse.headers().add(HttpHeaderNames.CONTENT_LENGTH, buffer.readableBytes());
253+
final FullHttpResponse httpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buffer);
254+
httpResponse.headers().add(HttpHeaderNames.CONTENT_LENGTH, buffer.readableBytes());
254255

255-
final boolean slow = uri.matches("/slow/\\d+");
256-
if (slow) {
257-
try {
258-
Thread.sleep(scaledRandomIntBetween(500, 1000));
259-
} catch (InterruptedException e) {
260-
throw new RuntimeException(e);
256+
final boolean slow = uri.matches("/slow/\\d+");
257+
if (slow) {
258+
try {
259+
Thread.sleep(scaledRandomIntBetween(500, 1000));
260+
} catch (InterruptedException e) {
261+
throw new RuntimeException(e);
262+
}
263+
} else {
264+
assert uri.matches("/\\d+");
261265
}
262-
} else {
263-
assert uri.matches("/\\d+");
264-
}
265266

266-
final ChannelPromise promise = ctx.newPromise();
267-
final Object msg;
268-
if (pipelinedRequest != null) {
269-
msg = pipelinedRequest.createHttpResponse(httpResponse, promise);
270-
} else {
271-
msg = httpResponse;
267+
final ChannelPromise promise = ctx.newPromise();
268+
final Object msg;
269+
if (pipelinedRequest != null) {
270+
msg = pipelinedRequest.createHttpResponse(httpResponse, promise);
271+
} else {
272+
msg = httpResponse;
273+
}
274+
ctx.writeAndFlush(msg, promise);
275+
} finally {
276+
if (pipelinedRequest != null) {
277+
pipelinedRequest.release();
278+
}
272279
}
273-
ctx.writeAndFlush(msg, promise);
274280
}
275281

276282
}

0 commit comments

Comments
 (0)