From 415c7c02b117ea10710db7c6fc2a2e6c9259f3f8 Mon Sep 17 00:00:00 2001 From: Tim Brooks Date: Wed, 23 May 2018 08:49:32 -0600 Subject: [PATCH] Fix memory leak in http pipelining This is related to #30801. When we calling the http pipelining aggregator on an inbound request, we retain the netty request. However, this is unnecessary as the pipelining aggregator does not store the request. This worked in the past as we manually release the request and netty internally automatically releases the request. At this point we do not implement the ref counter interface after the pipelining step which means that netty is no longer automatically handling this second retain. This commit removes that retain. --- .../elasticsearch/http/netty4/Netty4HttpPipeliningHandler.java | 2 +- .../org/elasticsearch/http/nio/NioHttpPipeliningHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpPipeliningHandler.java b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpPipeliningHandler.java index e930ffe7424a9..52dfbff6d3e03 100644 --- a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpPipeliningHandler.java +++ b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpPipeliningHandler.java @@ -56,7 +56,7 @@ public Netty4HttpPipeliningHandler(Logger logger, final int maxEventsHeld) { @Override public void channelRead(final ChannelHandlerContext ctx, final Object msg) { if (msg instanceof LastHttpContent) { - HttpPipelinedRequest pipelinedRequest = aggregator.read(((LastHttpContent) msg).retain()); + HttpPipelinedRequest pipelinedRequest = aggregator.read(((LastHttpContent) msg)); ctx.fireChannelRead(pipelinedRequest); } else { ctx.fireChannelRead(msg); diff --git a/plugins/transport-nio/src/main/java/org/elasticsearch/http/nio/NioHttpPipeliningHandler.java b/plugins/transport-nio/src/main/java/org/elasticsearch/http/nio/NioHttpPipeliningHandler.java index 57a14e7819d4e..2b702042ba7a8 100644 --- a/plugins/transport-nio/src/main/java/org/elasticsearch/http/nio/NioHttpPipeliningHandler.java +++ b/plugins/transport-nio/src/main/java/org/elasticsearch/http/nio/NioHttpPipeliningHandler.java @@ -56,7 +56,7 @@ public NioHttpPipeliningHandler(Logger logger, final int maxEventsHeld) { @Override public void channelRead(final ChannelHandlerContext ctx, final Object msg) { if (msg instanceof LastHttpContent) { - HttpPipelinedRequest pipelinedRequest = aggregator.read(((LastHttpContent) msg).retain()); + HttpPipelinedRequest pipelinedRequest = aggregator.read(((LastHttpContent) msg)); ctx.fireChannelRead(pipelinedRequest); } else { ctx.fireChannelRead(msg);