This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch branch-3.9
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/branch-3.9 by this push:
     new 88f44b0c1 ZOOKEEPER-5059: Kerberos SASL leaks Login refresh threads 
across QuorumPeer.shutdown()
88f44b0c1 is described below

commit 88f44b0c12a70d104b95966c3d3f0eb426c05024
Author: Andor Molnár <[email protected]>
AuthorDate: Mon Jul 6 16:01:45 2026 -0500

    ZOOKEEPER-5059: Kerberos SASL leaks Login refresh threads across 
QuorumPeer.shutdown()
    
    Author: anmolnar
    Closes #2410 from anmolnar/ZOOKEEPER-5059
    
    (cherry picked from commit 0cb298e8f6d332ef718c6f59a4708e7a6de28766)
    Signed-off-by: Andor Molnar <[email protected]>
---
 .../main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java   | 6 ++++++
 .../apache/zookeeper/server/quorum/auth/NullQuorumAuthLearner.java | 5 +++++
 .../apache/zookeeper/server/quorum/auth/NullQuorumAuthServer.java  | 5 +++++
 .../org/apache/zookeeper/server/quorum/auth/QuorumAuthLearner.java | 4 ++++
 .../org/apache/zookeeper/server/quorum/auth/QuorumAuthServer.java  | 4 ++++
 .../apache/zookeeper/server/quorum/auth/SaslQuorumAuthLearner.java | 7 +++++++
 .../apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer.java  | 7 +++++++
 7 files changed, 38 insertions(+)

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 bd444eae1..a4ea5df33 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
@@ -1650,6 +1650,12 @@ public void shutdown() {
         } catch (IOException ie) {
             LOG.warn("Error closing logs ", ie);
         }
+        if (authServer != null) {
+            authServer.shutdown();
+        }
+        if (authLearner != null) {
+            authLearner.shutdown();
+        }
     }
 
     /**
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthLearner.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthLearner.java
index 1b120b7f9..c5e8a0bbe 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthLearner.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthLearner.java
@@ -31,4 +31,9 @@ public void authenticate(Socket sock, String hostname) {
         return; // simply return don't require auth
     }
 
+    @Override
+    public void shutdown() {
+        // no-op
+    }
+
 }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthServer.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthServer.java
index 96be1da4f..effc6d35d 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthServer.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/NullQuorumAuthServer.java
@@ -32,4 +32,9 @@ public void authenticate(final Socket sock, final 
DataInputStream din) {
         // simply return don't require auth
     }
 
+    @Override
+    public void shutdown() {
+        // no-op
+    }
+
 }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthLearner.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthLearner.java
index 02ac3263f..eb8169204 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthLearner.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthLearner.java
@@ -38,4 +38,8 @@ public interface QuorumAuthLearner {
      */
     void authenticate(Socket sock, String hostname) throws IOException;
 
+    /**
+     * Shutdown the learner and release resources.
+     */
+    void shutdown();
 }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthServer.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthServer.java
index 8f771d43b..75760fad8 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthServer.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/QuorumAuthServer.java
@@ -38,4 +38,8 @@ public interface QuorumAuthServer {
      */
     void authenticate(Socket sock, DataInputStream din) throws IOException;
 
+    /**
+     * Shut down the server and release resources.
+     */
+    void shutdown();
 }
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthLearner.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthLearner.java
index 3151a5756..db032da57 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthLearner.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthLearner.java
@@ -144,6 +144,13 @@ public void authenticate(Socket sock, String hostName) 
throws IOException {
         }
     }
 
+    @Override
+    public void shutdown() {
+        if (learnerLogin != null) {
+            learnerLogin.shutdown();
+        }
+    }
+
     private void checkAuthStatus(Socket sock, QuorumAuth.Status qpStatus) 
throws SaslException {
         if (qpStatus == QuorumAuth.Status.SUCCESS) {
             LOG.info(
diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer.java
 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer.java
index ca651115d..940451eff 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/auth/SaslQuorumAuthServer.java
@@ -156,6 +156,13 @@ public void authenticate(Socket sock, DataInputStream din) 
throws SaslException
         }
     }
 
+    @Override
+    public void shutdown() {
+        if (serverLogin != null) {
+            serverLogin.shutdown();
+        }
+    }
+
     private byte[] receive(DataInputStream din) throws IOException {
         QuorumAuthPacket authPacket = new QuorumAuthPacket();
         BinaryInputArchive bia = BinaryInputArchive.getArchive(din);

Reply via email to