This is an automated email from the ASF dual-hosted git repository.
andor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 2f0d22bce ZOOKEEPER-5012: guard zkDb close in QuorumPeer shutdown
2f0d22bce is described below
commit 2f0d22bcebf33fba9a45b15454e89f116197f918
Author: seeksky <[email protected]>
AuthorDate: Thu Feb 19 23:47:33 2026 +0800
ZOOKEEPER-5012: guard zkDb close in QuorumPeer shutdown
Reviewers: PDavid, anmolnar
Author: seekskyworld
Closes #2345 from seekskyworld/fix/5012-quorumpeer-shutdown-npe
---
.../java/org/apache/zookeeper/server/quorum/QuorumPeer.java | 10 ++++++----
.../org/apache/zookeeper/server/quorum/QuorumPeerTest.java | 7 +++++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
index cf6f2f26c..296ea0537 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
@@ -1705,10 +1705,12 @@ public void shutdown() {
this.interrupt();
getElectionAlg().shutdown();
}
- try {
- zkDb.close();
- } catch (IOException ie) {
- LOG.warn("Error closing logs ", ie);
+ if (zkDb != null) {
+ try {
+ zkDb.close();
+ } catch (IOException ie) {
+ LOG.warn("Error closing logs ", ie);
+ }
}
}
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerTest.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerTest.java
index 3a7e88955..8c95a29fa 100644
---
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerTest.java
+++
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerTest.java
@@ -18,6 +18,7 @@
package org.apache.zookeeper.server.quorum;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -80,6 +81,12 @@ public void
testQuorumPeerListendOnSpecifiedClientIP(@TempDir File dataDir) thro
peer2.shutdown();
}
+ @Test
+ public void testShutdownWithoutZkDbDoesNotThrow() throws Exception {
+ QuorumPeer peer = new QuorumPeer();
+ assertDoesNotThrow(peer::shutdown);
+ }
+
@Test
public void testProcessReconfigWillRecreateSocketAddresses() throws
IOException {
QuorumPeerConfig.setReconfigEnabled(true);