[Twisted-Python] twisted.vfs issues

James Y Knight foom at fuhm.net
Wed Sep 28 21:01:26 EDT 2005


On Sep 28, 2005, at 8:04 PM, Jp Calderone wrote:

> rename() in VFS should work across filesystems,
>

Hm, that is going to be an interesting one to implement. I'm thinking  
in particular about what happens when you have a structure like:
/ -> adhoc.AdhocDirectory:
   tmp -> osfs.OSDirectory("/home/jknight/tmp", ...)
   home -> inmem.FakeDirectory(...)

and I ask to move a file from /tmp/foo to /home/bar.

IMO it is reasonable to say that the VFS 'rename' operation is  
allowed to cleanly fail, and not do the rename, forcing a higher  
level to do a copy/delete if it wants. This pushes the complication  
out of each VFS implementation to one implementation that will work  
across all, and furthermore can share its code with the copy  
implementation. This maps nicely to rename(2), as well, as a bonus.

> guarantee atomicity (if this is feasible - I think it is.  If not,  
> it should explicitly deny atomicity),

It isn't feasible, when renaming across filesystems. There will  
certainly have to be a time at which both 'from' and 'to' exist.  
Additionally, it may be impossible to create a file 'to+".tmp"' (or  
similar) in the target directory to atomically rename to 'to' when  
you've finished copying, because of permissions. Another reason to  
restrict "rename" to be the simple rename, rather than the  
copy&delete-rename.

James





More information about the Twisted-Python mailing list