diff --git a/server/src/main/java/org/elasticsearch/action/search/SearchQueryThenFetchAsyncAction.java b/server/src/main/java/org/elasticsearch/action/search/SearchQueryThenFetchAsyncAction.java index 25f436113baf3..4022772406372 100644 --- a/server/src/main/java/org/elasticsearch/action/search/SearchQueryThenFetchAsyncAction.java +++ b/server/src/main/java/org/elasticsearch/action/search/SearchQueryThenFetchAsyncAction.java @@ -869,6 +869,8 @@ void onShardDone() { var channelListener = new ChannelActionListener<>(channel); RecyclerBytesStreamOutput out = dependencies.transportService.newNetworkBytesStream(); out.setTransportVersion(channel.getVersion()); + + boolean success = false; try (queryPhaseResultConsumer) { Exception reductionFailure = queryPhaseResultConsumer.failure.get(); if (reductionFailure == null) { @@ -876,11 +878,17 @@ void onShardDone() { } else { writeReductionFailureResponse(out, reductionFailure); } + success = true; } catch (IOException e) { releaseAllResultsContexts(); channelListener.onFailure(e); return; + } finally { + if (success == false) { + out.close(); + } } + ActionListener.respondAndRelease( channelListener, new BytesTransportResponse(out.moveToBytesReference(), out.getTransportVersion())