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 <symat@apache.org>

Reviewers: Enrico Olivelli <eolivelli@apache.org>, Mohammad Arshad <arshad@apache.org>

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
1 file changed
tree: e9a6aa278365ccbf478319a060526deaeb747b9a
  1. .github/
  2. bin/
  3. conf/
  4. dev/
  5. tools/
  6. zookeeper-assembly/
  7. zookeeper-client/
  8. zookeeper-compatibility-tests/
  9. zookeeper-contrib/
  10. zookeeper-docs/
  11. zookeeper-it/
  12. zookeeper-jute/
  13. zookeeper-metrics-providers/
  14. zookeeper-recipes/
  15. zookeeper-server/
  16. .asf.yaml
  17. .gitattributes
  18. .gitignore
  19. .travis.yml
  20. checkstyle-simple.xml
  21. checkstyle-strict.xml
  22. checkstyleSuppressions.xml
  23. excludeFindBugsFilter.xml
  24. Jenkinsfile
  25. Jenkinsfile-owasp
  26. Jenkinsfile-PreCommit
  27. LICENSE.txt
  28. NOTICE.txt
  29. owaspSuppressions.xml
  30. pom.xml
  31. README.md
  32. README_packaging.md
  33. zk-merge-pr.py
README.md

Apache ZooKeeper GitHub Actions CI Travis CI Maven Central License

alt text

For the latest information about Apache ZooKeeper, please visit our website at:

https://zookeeper.apache.org

and our wiki, at:

https://cwiki.apache.org/confluence/display/ZOOKEEPER

Packaging/release artifacts

Either downloaded from https://zookeeper.apache.org/releases.html or found in zookeeper-assembly/target directory after building the project with maven.

apache-zookeeper-[version].tar.gz

    Contains all the source files which can be built by running:
    mvn clean install

    To generate an aggregated apidocs for zookeeper-server and zookeeper-jute:
    mvn javadoc:aggregate
    (generated files will be at target/site/apidocs)

apache-zookeeper-[version]-bin.tar.gz

    Contains all the jar files required to run ZooKeeper
    Full documentation can also be found in the docs folder

As of version 3.5.5, the parent, zookeeper and zookeeper-jute artifacts are deployed to the central repository after the release is voted on and approved by the Apache ZooKeeper PMC:

https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper

Java 8

If you are going to compile with Java 1.8, you should use a recent release at u211 or above.

Contributing

We always welcome new contributors to the project! See How to Contribute for details on how to submit patch through pull request and our contribution workflow.