[
https://issues.apache.org/jira/browse/ZOOKEEPER-1427?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13404128#comment-13404128
]
Patrick Hunt commented on ZOOKEEPER-1427:
-----------------------------------------
Hi Todd, I don't think the original suggestion will work (use RAF) - the length
of the file may change, in which case you would end up with the possibility of
"1000" and then "999" resulting in "9990" (in the error case, ie process
failure during update).
I think we need to use rename for this, that sound right to you? Create the new
file as "foo.tmp" and then rename to "foo" once the file is fully created.
> Writing to local files is done non-atomically
> ---------------------------------------------
>
> Key: ZOOKEEPER-1427
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1427
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
> Affects Versions: 3.4.3
> Reporter: Todd Lipcon
> Assignee: Patrick Hunt
> Priority: Critical
> Fix For: 3.4.4, 3.5.0
>
>
> Currently, the writeLongToFile() function opens the file for truncate, writes
> the new data, syncs, and then closes. If the process crashes after opening
> the file but before writing the new data, the file may be left empty, causing
> ZK to "forget" an earlier promise. Instead, it should use RandomAccessFile to
> avoid truncating.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira