Skip to content

Commit cd9543a

Browse files
committed
Avoid a double-response to stats
1 parent bbfa047 commit cd9543a

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

server/src/main/java/org/elasticsearch/action/support/ChannelActionListener.java

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
package org.elasticsearch.action.support;
1010

11+
import org.apache.logging.log4j.LogManager;
12+
import org.apache.logging.log4j.Logger;
1113
import org.elasticsearch.action.ActionListener;
1214
import org.elasticsearch.transport.TransportChannel;
1315
import org.elasticsearch.transport.TransportRequest;
@@ -16,6 +18,8 @@
1618
public final class ChannelActionListener<
1719
Response extends TransportResponse, Request extends TransportRequest> implements ActionListener<Response> {
1820

21+
private static final Logger logger = LogManager.getLogger(ChannelActionListener.class);
22+
1923
private final TransportChannel channel;
2024
private final Request request;
2125
private final String actionName;
@@ -31,6 +35,7 @@ public void onResponse(Response response) {
3135
try {
3236
channel.sendResponse(response);
3337
} catch (Exception e) {
38+
logger.warn("channel.sendResponse threw exception responding to [" + actionName + "]", e);
3439
onFailure(e);
3540
}
3641
}

server/src/main/java/org/elasticsearch/transport/TcpTransportChannel.java

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
package org.elasticsearch.transport;
1010

11+
import org.apache.logging.log4j.message.ParameterizedMessage;
12+
import org.elasticsearch.ElasticsearchException;
1113
import org.elasticsearch.Version;
1214
import org.elasticsearch.common.lease.Releasable;
1315

@@ -67,7 +69,11 @@ private void release(boolean isExceptionResponse) {
6769
if (released.compareAndSet(false, true)) {
6870
assert (releaseBy = new Exception()) != null; // easier to debug if it's already closed
6971
breakerRelease.close();
72+
73+
logger.info(new ParameterizedMessage("--> releasing bytes for [{}][{}]", requestId, action), new ElasticsearchException("stack trace"));
74+
7075
} else if (isExceptionResponse == false) {
76+
logger.error(new ParameterizedMessage("--> double-relase of bytes for [{}][{}]", requestId, action), new ElasticsearchException("stack trace"));
7177
// only fail if we are not sending an error - we might send the error triggered by the previous
7278
// sendResponse call
7379
throw new IllegalStateException("reserved bytes are already released", releaseBy);

x-pack/plugin/ccr/src/internalClusterTest/java/org/elasticsearch/xpack/ccr/CcrRepositoryIT.java

+1
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ public void testCcrRepositoryFailsToFetchSnapshotShardSizes() throws Exception {
604604
) {
605605
simulatedFailures.incrementAndGet();
606606
channel.sendResponse(new ElasticsearchException("simulated"));
607+
return;
607608
}
608609
}
609610
handler.messageReceived(request, channel, task);

0 commit comments

Comments
 (0)