[tahoe-dev] [tahoe-lafs] #943: "tahoe mv" deleted my files?

tahoe-lafs trac at allmydata.org
Tue Feb 9 02:36:23 UTC 2010

#943: "tahoe mv" deleted my files?
 Reporter:  zooko                            |           Owner:           
     Type:  defect                           |          Status:  new      
 Priority:  major                            |       Milestone:  undecided
Component:  code-frontend-cli                |         Version:  1.6.0    
 Keywords:  tahoe-mv usability preservation  |   Launchpad_bug:           

Comment(by davidsarah):

 I suspect that you moved the directory {{{Diablo_Swing_Orchestra-
 The_Butcher's_Ballroom}}} into itself. That is what the bash script
 literally says to do -- the script would have first moved all of the .mp3
 files (which happen to be listed before {{{Diablo_Swing_Orchestra-
 The_Butcher's_Ballroom}}}) into that directory, and then do:
 time ~/playground/tahoe-lafs/bin/tahoe mv --dir-
 "tahoe:Diablo_Swing_Orchestra-The_Butcher's_Ballroom" tahoe
 which causes said directory to disappear up its own... erm, I mean, become
 a child of itself.

 I don't understand why the subsequent {{{mv}}}s printed {{{OK}}}. They
 didn't work, as I wouldn't expect since {{{Diablo_Swing_Orchestra-
 The_Butcher's_Ballroom}}} wouldn't be a child of
 at that point. It seems like a bug that they printed {{{OK}}}, independent
 of whether the preceding "move a directory into itself" command should
 have been allowed.

 If you still have a direct cap to the {{{Diablo_Swing_Orchestra-
 The_Butcher's_Ballroom}}} directory, then it should still exist, with the
 .mp3 files in it.

 A directory being a child of itself isn't a problem per se, in a Tahoe
 filesystem. OTOH, Unix {{{mv}}} will not allow moving a directory into
 itself. On cygwin:
 $ mv foo foo/
 mv: cannot move `foo' to a subdirectory of itself, `foo/foo'

 However [source:src/allmydata/scripts/tahoe_mv.py tahoe mv] works by doing
 a PUT operation to create the destination link, and then if that
 succeeded, doing a DELETE on the source link. It would be possible to
 check that the source object is not the same as the parent of the
 destination link, but that only catches some cases that are prevented by
 Univ {{{mv}}}: you would still be able to move a directory into an
 indirect descendant, and it isn't clear how to prevent that.

Ticket URL: <http://allmydata.org/trac/tahoe/ticket/943#comment:1>
tahoe-lafs <http://allmydata.org>
secure decentralized file storage grid

More information about the tahoe-dev mailing list