[tahoe-dev] Mutable versus immutable uris.

Nathan nejucomo at gmail.com
Thu Oct 18 17:13:14 UTC 2007


Thanks Brian!

I'll use the prefix-parsing approach.  I'm motivated to write the thin
fuse client without importing anything from tahoe, as a metric of the
webapi complexity.  This is also why I chose an external extension,
instead of an in-node feature.

Regards,
Nathan



On 10/18/07, Brian Warner <warner at allmydata.com> wrote:
> > I've begun a fuse proof-of-concept extension which uses the webapi.
>
> Excellent! You might consider an in-node extension, but a FUSE-webapi bridge
> offers more flexibility in deployment (and allows the bridge to use a remote
> node), so I'm eager to see your results!
>
> > Is it true that file URIs refer to unique, immutable content, whereas
> > directory URIs refer to mutable content?  Is there a way to determine
> > whether or not the referent of a URI is mutable?  This would obviously
> > simplify any caching strategy.
>
> At the moment, all file URIs are immutable, whether they be CHK (the usual
> erasure-coded+distributed scheme) or LIT (the-less-than-150bytes
> so-just-put-it-in-the-URI scheme), and all directory URIs refer to dirnodes
> which are potentially mutable (but not necessarily by you, if you only have a
> readonly DIR-RO URI to it).
>
> In the future we plan to add mutable files, and immutable directories (the
> "virtual CD" think, where the directory information is stored in a CHK
> structure). These are at least a month off, though.
>
> Note that there is a difference between writable (by you) and mutable. CHK
> files are immutable: once created, there is nobody in the entire world who
> can modify it. Dirnodes are (currently) always mutable, but a given URI may
> or may not provide writability to its holder. Immutability implies
> un-writeability, but not the other way around.
>
> The best way to determine if a URI refers to a modifyable resource is
> in-process (i.e. by importing the 'allmydata' python package), by first
> converting the string URI into a URI instance, then asking the instance
> is_readonly() and is_mutable(). The conversion is performed by adapting the
> string to the IURI interface:
>
>  from allmydata.interfaces import IURI
>  u = IURI("URI:CHK:iah546ukk6eqntehth1s3ndeoh:it9o1k5db7mjwjbj3tdd7qjyghf3qjkq7ntjd6ad5e3ufii3uwwo:3:10:35769")
>  if u.is_readonly():
>    print "I cannot write to this resource."
>  else:
>    print "I can write to this resource."
>  if u.is_mutable():
>    print "Somebody might be able to write to this resource."
>  else:
>    print "Nobody can write to this resource, because it is immutable."
>
>
> To accomplish the same thing from outside the node, your best bet is to parse
> the prefix of the URI (everything up to the second colon) and drop it into
> one of four categories:
>
>  URI:CHK:..    : immutable
>  URI:LIT:..    : immutable
>  URI:DIR:..    : mutable, writable
>  URI:DIR-RO:.. : mutable, not writable
>
> We might be changing the format of these URIs at some point (I know there's
> some desire to remove the URI: prefix, for example), and we'll definitly be
> adding some types, but this is a good approach for now.
>
> good luck!
>  -Brian
>



More information about the tahoe-dev mailing list