This is an automated email from the ASF dual-hosted git repository.
arshad pushed a commit to branch branch-3.7
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/branch-3.7 by this push:
new 7c37cd9 ZOOKEEPER-4247: NPE while processing message from restarted
quorum member
7c37cd9 is described below
commit 7c37cd9c89c92811da96e378c1b6ff81796b172d
Author: Mate Szalay-Beko <[email protected]>
AuthorDate: Wed Apr 14 22:22:09 2021 +0530
ZOOKEEPER-4247: NPE while processing message from restarted quorum member
When a ZooKeeper server realizes that an other quorum peer was shut down
(e.g. during a rolling upgrade or
rolling restart), the ServerCnxn.zkServer variable is set to null by
QuorumPear.close(). This is why in the code
we usually check the zkServer variable before using it. But this check was
missing in one place thus causing
NPE in NettyServerCnx.receiveMessage:
```
2021-02-08T12:42:08.229+0000 [myid:] - ERROR
[nioEventLoopGroup-4-1:NettyServerCnxnFactory$CnxnChannelHandler329]-
Unexpected exception in receive
java.lang.NullPointerException: null ~[zookeeper-3.6.2.jar:3.6.2]
at
org.apache.zookeeper.server.NettyServerCnxn.receiveMessage(NettyServerCnxn.java:518)
at
org.apache.zookeeper.server.NettyServerCnxn.processMessage(NettyServerCnxn.java:368)
at org.apache.zookeeper.server.NettyServerCnxnFactory
$CnxnChannelHandler.channelRead(NettyServerCnxnFactory.java:326)
...
```
In this commit we add the necessary check and (after throwing an
IOException) we will basically ignore the
processing of the received message when the remote ZooKeeper server is
already down.
Author: Mate Szalay-Beko <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, Mohammad Arshad
<[email protected]>
Closes #1681 from symat/ZOOKEEPER-4247 and squashes the following commits:
7b140177d [Mate Szalay-Beko] ZOOKEEPER-4247: address PR comments
b99ee986b [Mate Szalay-Beko] ZOOKEEPER-4247: address PR comments
3c8478a40 [Mate Szalay-Beko] ZOOKEEPER-4247: fix NPE happens while
processing messages during quorum member restart
(cherry picked from commit ea75e1f63572fc72fb8520ba8c793523047acb49)
Signed-off-by: Mohammad Arshad <[email protected]>
---
.../src/main/java/org/apache/zookeeper/server/NettyServerCnxn.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxn.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxn.java
index 110807a..269fcd9 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxn.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/NettyServerCnxn.java
@@ -520,8 +520,12 @@ public class NettyServerCnxn extends ServerCnxn {
if (len < 0 || len > BinaryInputArchive.maxBuffer) {
throw new IOException("Len error " + len);
}
+ ZooKeeperServer zks = this.zkServer;
+ if (zks == null || !zks.isRunning()) {
+ throw new IOException("ZK down");
+ }
// checkRequestSize will throw IOException if request
is rejected
- zkServer.checkRequestSizeWhenReceivingMessage(len);
+ zks.checkRequestSizeWhenReceivingMessage(len);
bb = ByteBuffer.allocate(len);
}
}