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);