From 151aeed1abf5a533ed0b5e83fed7f71b3a684f7b Mon Sep 17 00:00:00 2001 From: Jeremy Schoemaker Date: Tue, 25 Aug 2026 15:54:56 -0500 Subject: [PATCH 1/2] fix(zookeeper): ensure snapLog closed even if txnLog close throws Fix verified RED->GREEN. FileTxnSnapLog.close leaks snapLog if txnLog close throws at FileTxnSnapLog.java:623 --- .../server/persistence/FileTxnSnapLog.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java index 2816826046e..e84e8c0c8e2 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java @@ -621,16 +621,32 @@ public void rollLog() throws IOException { * @throws IOException */ public void close() throws IOException { + IOException firstEx = null; TxnLog txnLogToClose = txnLog; + txnLog = null; if (txnLogToClose != null) { - txnLogToClose.close(); + try { + txnLogToClose.close(); + } catch (IOException e) { + firstEx = e; + } } - txnLog = null; SnapShot snapSlogToClose = snapLog; + snapLog = null; if (snapSlogToClose != null) { - snapSlogToClose.close(); + try { + snapSlogToClose.close(); + } catch (IOException e) { + if (firstEx != null) { + firstEx.addSuppressed(e); + } else { + firstEx = e; + } + } + } + if (firstEx != null) { + throw firstEx; } - snapLog = null; } @SuppressWarnings("serial") From a1a8a3cbdf9daeddcf322a609188d82fcb47b753 Mon Sep 17 00:00:00 2001 From: Jeremy Schoemaker Date: Tue, 25 Aug 2026 17:14:48 -0500 Subject: [PATCH 2/2] ci: retrigger Jenkins after flaky ZookeeperServerClusterTest