Ivy provides a tool, lc, that detects conflicting application updates to files; these may arise from concurrent writes to the same file by applications that are in different partitions or which do not perform appropriate locking. lc scans an Ivy file system's log for records with concurrent version vectors that affect the same file or directory entry. lc determines the point in the logs at which the partition must have occurred, and determines which participants were in which partition. lc then uses Ivy views to construct multiple historic views of the file system: one as of the time of partition, and one for each partition just before the partition healed. For example,
% ./lc -v /ivy/BXz4+udjsQm4tX63UR9w71SNP0c before: +WzW8s7fTEt6pehaB7isSfhkc68 partition1: l3qLDU5icVMRrbLvhxuJ1WkNvWs partition2: JyCKgcsAjZ4uttbbtIX9or+qEXE % cat /ivy/+WzW8s7fTEt6pehaB7isSfhkc68/file1 original content of file1 % cat /ivy/l3qLDU5icVMRrbLvhxuJ1WkNvWs/file1 original content of file1, changed append on first partition % cat /ivy/JyCKgcsAjZ4uttbbtIX9or+qEXE/file1 original content of file1 append on second partition
In simple cases, a user could simply examine the versions of the file and merge them by hand in a text editor. Application-specific resolvers such as those used by Coda [14,16] could be used for more complex cases.