[tahoe-dev] [tahoe-lafs] #776: users are confused by "tahoe rm"

tahoe-lafs trac at allmydata.org
Mon Jul 27 20:10:07 PDT 2009


#776: users are confused by "tahoe rm"
-------------------------------+--------------------------------------------
 Reporter:  zooko              |           Owner:           
     Type:  defect             |          Status:  new      
 Priority:  major              |       Milestone:  undecided
Component:  code-frontend-cli  |         Version:  1.4.1    
 Keywords:                     |   Launchpad_bug:           
-------------------------------+--------------------------------------------
 I found the following conversation log between a new user (!PovAddict) and
 an experienced user (soul9).  They are confused about what "tahoe rm"
 means.  Possible changes that could improve this include renaming it to
 "tahoe unlink", improving the error messages (see below), and improving
 the docs.

 {{{
 <PovAddict> I just installed a tahoe client and attached it to the
 "volunteer grid"
 [19:01]
 ...
 <PovAddict> also, too many Python exceptions to take tahoe seriously...
 [19:17]
 <soul9> PovAddict: what python exceptions.
 [19:19]
 <soul9> ?
 <soul9> python2.6?
 <PovAddict> 2.5.2
 <soul9> hm
 <soul9> i didn't have python exceptions, except deprecationwarnings in
 python
         2.6
 <PovAddict> http://pastebin.com/df3bfddf
 [19:20]

       nicolas at ubuntu /tmp/tahoe-c$ ~/src/allmydata-tahoe-1.4.1/bin/tahoe
 ls
       Traceback (most recent call last):
         File "/home/nicolas/src/allmydata-tahoe-1.4.1/support/bin/tahoe",
 line 8, in <module>
           load_entry_point('allmydata-tahoe==1.4.1', 'console_scripts',
 'tahoe')()
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 91, in run
           rc = runner(sys.argv[1:])
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 78, in runner
           rc = cli.dispatch[command](so)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/cli.py", line 380, in list
           rc = tahoe_ls.list(options)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/tahoe_ls.py", line 18, in list
           rootcap, path = get_alias(aliases, where, DEFAULT_ALIAS)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/common.py", line 148, in get_alias
           return aliases[default], path
       KeyError: 'tahoe'
       nicolas at ubuntu /tmp/tahoe-c$ ~/src/allmydata-tahoe-1.4.1/bin/tahoe
 ls
 URI:CHK:2nxmn6eew3y5e5y7ejzwfr2jiq:6mi2hcbpuvkfcttuezi4x3fxwrnmwidql2rtwwtczpccxgz3ez2q:3:10:310946
       Traceback (most recent call last):
         File "/home/nicolas/src/allmydata-tahoe-1.4.1/support/bin/tahoe",
 line 8, in <module>
           load_entry_point('allmydata-tahoe==1.4.1', 'console_scripts',
 'tahoe')()
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 91, in run
           rc = runner(sys.argv[1:])
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 78, in runner
           rc = cli.dispatch[command](so)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/cli.py", line 380, in list
           rc = tahoe_ls.list(options)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/tahoe_ls.py", line 67, in list
           childtype = child[0]
       KeyError: 0
       nicolas at ubuntu /tmp/tahoe-c$ ~/src/allmydata-tahoe-1.4.1/bin/tahoe
 rm
 URI:CHK:2nxmn6eew3y5e5y7ejzwfr2jiq:6mi2hcbpuvkfcttuezi4x3fxwrnmwidql2rtwwtczpccxgz3ez2q:3:10:310946
       Traceback (most recent call last):
         File "/home/nicolas/src/allmydata-tahoe-1.4.1/support/bin/tahoe",
 line 8, in <module>
           load_entry_point('allmydata-tahoe==1.4.1', 'console_scripts',
 'tahoe')()
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 91, in run
           rc = runner(sys.argv[1:])
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/runner.py", line 78, in runner
           rc = cli.dispatch[command](so)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/cli.py", line 409, in rm
           rc = tahoe_rm.rm(options)
         File "/home/nicolas/src/allmydata-
 tahoe-1.4.1/src/allmydata/scripts/tahoe_rm.py", line 25, in rm
           assert path
       AssertionError

 <PovAddict> I uploaded a file to the VolunteerGrid from the web interface
 <PovAddict> I can download it back from there, or using "tahoe get"
 <soul9> yes, well
 <PovAddict> and that's it; is 'rm' supposed to work?
 <soul9> i think that has to do with a not defined default rootcap
 [19:21]
 <soul9> yes, it is, of course
 <PovAddict> no matter what the problem really is, the command line tool
 should
             give a proper error message, instead of dumping a
 stacktrace...
 <soul9> er
 [19:22]
 <PovAddict> "KeyError: 0" might only mean something to people who know the
             code and know the causes of this situation
 <PovAddict> definitely means nothing to me
 <soul9> it's not dumping it's core at all
 <PovAddict> it printed a stacktrace on the console
 [19:23]
 <soul9> it's trying to tell you you didn't give it where to ls
 <soul9> no, that's warnings
 <soul9> if you don't want that do tahoe cmd ... blabla 2> /dev/null
 <PovAddict> "KeyError: 0" and "AssertionError" are not warnings, they are
             exceptions
 [19:24]
 <soul9> they end in error because there is nothing to ls
 <soul9> tahoe has no "root"
 <soul9> so you can't do an ls without giving it a default rootcap
 <PovAddict> my point is: why does it say "KeyError: 0" instead of "rootcap
             required"?
 <soul9> which is the tahoe "alias"
 <PovAddict> is it an argument I'm supposed to pass after 'ls'?
 [19:25]
 <soul9> well, that's a good point, and you should definitely open a bug if
         there isn't one allready
 <PovAddict> "tahoe ls something"?
 <soul9> tahoe ls ROOT:cap:thisisasecuretahoeurlwhateverhexblah
 <soul9> yeah, it's an tahoe rootcap
 <PovAddict> "tahoe ls --help" doesn't say there are required arguments
 [19:26]
 <soul9> so e.g. you do tahoe mkdir foo
 <soul9> gives you a rootcap back
 <soul9> then you can save the rootcap as an alias
 <soul9> so you don't need to remember the horridly long hash
 <soul9> you can give it a name
 <soul9> because if you add an tahoe alias
 <soul9> then that will be used as default
 <PovAddict> okay, actually, --help doesn't even mention any argument
 [19:27]
 <PovAddict> just the options
 <soul9> which is why it's looking for the tahoe key
 <PovAddict> and "tahoe <command> [command options] mkdir [options]" makes
 no
             sense :) mkdir *is* the <command>
 <PovAddict> anyway; what about the rm error?
 * soul9 → bugs
 <soul9> try it with a rootcap
 [19:28]
 <soul9> it'll work
 <soul9> tahoe is well coded for the purpose it serves
 <soul9> wich is uploading big files using the web ui
 <soul9> because the cmdline client also just uses the webui in the backend
 [19:29]
 <soul9> hell, the fuse client just uses the webui aswell
 <PovAddict> I don't know how I'm supposed to get that 'rootcap'
 <PovAddict> I uploaded a file from the web ui, now I want to delete it
 *** jsgf (n=jeremy at adsl-69-107-65-92.dsl.pltn13.pacbell.net) has quit:
 Read
     error: 110 (Connection timed out)
 <PovAddict> I have the URI I got after uploading
 [19:30]
 <soul9> that's the cap
 <PovAddict> and I can use it to download the file
 <soul9> that big hash
 <PovAddict> yup
 <soul9> so you do tahoe rm HASH
 <soul9> tahoe ls HASH
 <PovAddict> and it throws an AssertionError, as shown on my paste
 [19:31]
 <soul9> tahoe cp foo HASH:dor/you/want
 <soul9> hm
 [19:32]
 <soul9> dunno
 <soul9> worksforme™
 <PovAddict> also note line 16 of paste was wrapped; I *did* pass a hash to
 ls
 <PovAddict> and it just throws a different error
 [19:33]
 <soul9> then you have a problem in your setup, or the directory is empty
 <soul9> iirc
 <PovAddict> I didn't create a directory
 [19:34]
 <PovAddict> I uploaded it from here: http://nooxie.zooko.com:9798/ using
 the
             "Upload a file" form, I didn't create a directory first
 [19:35]
 <PovAddict> unfortunately none of the shares ended up on my own node,
 which is
             kind of what I wanted to try
 [19:36]
 <PovAddict> so, now, I want to delete the file from the grid; and I only
 have
             the one hash it gave me
 <soul9> yeah, tahoe ls file doesn't work
 [19:38]
 <soul9> you can't ls a file
 <soul9> use the hash to delete it
 <soul9> it's as simple as tahoe rm HASH
 <PovAddict> I did and it throws AssertionError
 <PovAddict> the hash is in the pastebin; can you try rm yourself?
 <soul9> is the file still there tho?
 [19:39]
 <soul9> i'm not connected to the volounteer grid
 <soul9> i have my own ;)
 <PovAddict> 'check' says the file is healthy
 <PovAddict> Summary: Healthy
 <soul9> weird, it should work
 <PovAddict>  storage index: xetcmqax6bi5eozzggamxh7gg4
 [19:40]
 <PovAddict>  good-shares: 10 (encoding is 3-of-10)
 <soul9> mmmm
 [19:41]
 <soul9> º what is the introducer furl to the volounteer grid?
 [19:42]
 <PovAddict>
 pb://6cypm5tfsv6ag43g3j5z74qx5nfxa2qq@207.7.145.200:64228,nooxie.zooko.com:64228/introducer
 <soul9> mm
 [19:45]
 <soul9> that's a bug!
 [19:46]
 <soul9> can't rm it
 <soul9> :D
 <PovAddict> too bad the contest is about hacking tahoe and not just
 breaking
             it :)
 [19:47]
 <soul9> :D
 <soul9> include that hash in the bugreport
 [19:49]
 <soul9> what version of tahoe are you using
 <soul9> ?
 <PovAddict> 1.4.1
 <PovAddict> I'm currently running it under a debugger, stepping through
             get_alias
 [19:50]
 <PovAddict> ok so, if the path starts with "URI: but doesn't contain
 ":./",
             then get_alias returns "" for path
 [19:51]
 <PovAddict> and then 'assert path' explodes
 <soul9> really, this is weird man
 [19:52]
 <soul9> i have put stuff and deleted through the cmdline and the webui and
         mixes
 <soul9> never encountered this
 <PovAddict> I think I got it
 [19:53]
 <PovAddict> but I'll upload another file and try again
 <PovAddict> 'rm' seems not to be prepared to delete files out of
 directories...
 [20:03]
 <PovAddict> hmm looks like you can't delete files actually!
 [20:06]
 <PovAddict> "Note that this does not actually delete the file or directory
             that the name points to from the tahoe grid -- it only removes
 the
             named reference from this directory."
 [20:07]
 <PovAddict> the object will just become "unreachable" (but the data still
             there?) if no reachable directories have the file, and
 everybody
             loses the readcap
 [20:08]
 <PovAddict> so when do shares actually disappear?
 [20:10]
 <soul9> i think the crawxler is the garbage collector
 [20:14]
 }}}

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


More information about the tahoe-dev mailing list