From 6c58f0c4e62a515dcbb19e0b7564c45988b24797 Mon Sep 17 00:00:00 2001 From: Tim Brooks Date: Thu, 29 Jun 2017 11:03:51 -0500 Subject: [PATCH] Handle ping correctly in NioTransport (#25462) Our current TCPTransport logic assumes that we do not pass pings to the TCPTransport level. This commit fixes an issue where NioTransport was passing pings to TCPTransport and leading to exceptions. --- .../transport/nio/channel/TcpReadContext.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/framework/src/main/java/org/elasticsearch/transport/nio/channel/TcpReadContext.java b/test/framework/src/main/java/org/elasticsearch/transport/nio/channel/TcpReadContext.java index c332adbd314..ee56f6f6f97 100644 --- a/test/framework/src/main/java/org/elasticsearch/transport/nio/channel/TcpReadContext.java +++ b/test/framework/src/main/java/org/elasticsearch/transport/nio/channel/TcpReadContext.java @@ -67,6 +67,8 @@ public class TcpReadContext implements ReadContext { BytesReference message; + // Frame decoder will throw an exception if the message is improperly formatted, the header is incorrect, + // or the message is corrupted while ((message = frameDecoder.decode(createCompositeBuffer(), rawBytesCount)) != null) { int messageLengthWithHeader = message.length(); NetworkBytesReference.vectorizedIncrementReadIndexes(references, messageLengthWithHeader); @@ -75,7 +77,11 @@ public class TcpReadContext implements ReadContext { try { BytesReference messageWithoutHeader = message.slice(6, message.length() - 6); - handler.handleMessage(messageWithoutHeader, channel, channel.getProfile(), messageWithoutHeader.length()); + + // A message length of 6 bytes it is just a ping. Ignore for now. + if (messageLengthWithHeader != 6) { + handler.handleMessage(messageWithoutHeader, channel, channel.getProfile(), messageWithoutHeader.length()); + } } catch (Exception e) { handler.handleException(channel, e); }