[
https://issues.apache.org/jira/browse/ZOOKEEPER-1427?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13408136#comment-13408136
]
Flavio Junqueira commented on ZOOKEEPER-1427:
---------------------------------------------
Just to add a few more comments of top of Pat's. We assume that a server logs
to disk before it acks, so if an entry is written partially, then we can safely
discard it. We use crcs to check the integrity of entries.
The same doesn't hold for the epochs. If the files storing them get corrupted,
then we might violate a promise of the server that's critical to guarantee the
correctness of the replication protocol.
> 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
>
> Attachments: ZOOKEEPER-1427.patch, ZOOKEEPER-1427.patch,
> ZOOKEEPER-1427.patch, ZOOKEEPER-1427_br34.patch, ZOOKEEPER-1427_br34.patch,
> ZOOKEEPER-1427_br34.patch
>
>
> 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