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