From 57fa28642f7f6f770fb76b02ae04d243c5bbbcfa Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Wed, 18 Jul 2018 14:35:43 -0700 Subject: [PATCH] HBASE-20895 NPE in RpcServer#readAndProcess --- .../java/org/apache/hadoop/hbase/ipc/RpcServer.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java index c4c7360c2e..3103c9b93f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java @@ -1269,7 +1269,7 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver { // If the connection header has been read or not. private boolean connectionHeaderRead = false; protected SocketChannel channel; - private ByteBuffer data; + private volatile ByteBuffer data; private ByteBuffer dataLengthBuffer; private ByteBuffer preambleBuffer; protected final ConcurrentLinkedDeque responseQueue = new ConcurrentLinkedDeque(); @@ -1740,11 +1740,14 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver { count = channelRead(channel, data); - if (count >= 0 && data.remaining() == 0) { // count==0 if dataLength == 0 - process(); + if (data != null) { + if (count >= 0 && data.remaining() == 0) { // count==0 if dataLength == 0 + process(); + } + return count; + } else { + return -1; } - - return count; } /** -- 2.18.0