From 18f7169dccc2cb0e0fad502eee13dd5cbdea7929 Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 17 Jul 2025 09:59:11 +0100 Subject: [PATCH 1/2] Log failure in `internalSend` An exception here should be impossible, but we don't assert that, nor do we emit a log message to prove it didn't happen in a production environment. This commit adds the missing log and assert. --- .../org/elasticsearch/transport/OutboundHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java index cab15fffa3fd0..04984f1619404 100644 --- a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java +++ b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java @@ -433,6 +433,16 @@ private void maybeLogSlowMessage(boolean success) { } }); } catch (RuntimeException ex) { + logger.error( + Strings.format( + "unexpected exception calling sendMessage for transport message [%s] of size [%d] on [%s]", + messageDescription.get(), + messageDescription, + channel + ), + ex + ); + assert false : ex; channel.setCloseException(ex); Releasables.closeExpectNoException(() -> listener.onFailure(ex), () -> CloseableChannel.closeChannel(channel)); throw ex; From ddcd68ce29cb33c0aaf9845041d6fcdcf9e9adbe Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 17 Jul 2025 10:35:53 +0100 Subject: [PATCH 2/2] Permit exception if called directly from test thread --- .../java/org/elasticsearch/transport/OutboundHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java index 04984f1619404..b0408ac3c60cc 100644 --- a/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java +++ b/server/src/main/java/org/elasticsearch/transport/OutboundHandler.java @@ -437,12 +437,12 @@ private void maybeLogSlowMessage(boolean success) { Strings.format( "unexpected exception calling sendMessage for transport message [%s] of size [%d] on [%s]", messageDescription.get(), - messageDescription, + messageSize, channel ), ex ); - assert false : ex; + assert Thread.currentThread().getName().startsWith("TEST-") : ex; channel.setCloseException(ex); Releasables.closeExpectNoException(() -> listener.onFailure(ex), () -> CloseableChannel.closeChannel(channel)); throw ex;