This is an automated email from the ASF dual-hosted git repository.
maoling 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 65dba9d ZOOKEEPER-4311: Close AtomicFileOutputStream properly
65dba9d is described below
commit 65dba9d9ab35cdef751473345af52089abc0da6e
Author: Dmitrii Kovalkov <[email protected]>
AuthorDate: Mon Jun 21 19:14:37 2021 +0800
ZOOKEEPER-4311: Close AtomicFileOutputStream properly
Author: Dmitrii Kovalkov <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>, Andor Molnar
<[email protected]>, maoling <[email protected]>
Closes #1706 from DimasKovas/close_atomic_file_output_stream and squashes
the following commits:
1623c84da [Dmitrii Kovalkov] remove trailing whitespace
75e525617 [Dmitrii Kovalkov] cosmetics
449ba8a61 [Dmitrii Kovalkov] Fix
---
.../apache/zookeeper/common/AtomicFileWritingIdiom.java | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/common/AtomicFileWritingIdiom.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/common/AtomicFileWritingIdiom.java
index 6e20b78..903f8e4 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/common/AtomicFileWritingIdiom.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/common/AtomicFileWritingIdiom.java
@@ -59,7 +59,7 @@ public class AtomicFileWritingIdiom {
OutputStreamStatement osStmt,
WriterStatement wStmt) throws IOException {
AtomicFileOutputStream out = null;
- boolean error = true;
+ boolean triedToClose = false;
try {
out = new AtomicFileOutputStream(targetFile);
if (wStmt == null) {
@@ -71,20 +71,18 @@ public class AtomicFileWritingIdiom {
wStmt.write(bw);
bw.flush();
}
- out.flush();
+ triedToClose = true;
+ // close() will do the best to clean up file/resources in case of
errors
+ // worst case the tmp file may still exist
+ out.close();
// everything went ok
- error = false;
} finally {
// nothing interesting to do if out == null
if (out != null) {
- if (error) {
+ if (!triedToClose) {
// worst case here the tmp file/resources(fd) are not
cleaned up
// and the caller will be notified (IOException)
out.abort();
- } else {
- // if the close operation (rename) fails we'll get
notified.
- // worst case the tmp file may still exist
- IOUtils.closeStream(out);
}
}
}