[MERGE] Handle lock contention on NFS
Robert Collins
robertc at robertcollins.net
Tue Apr 4 00:25:03 BST 2006
On Mon, 2006-04-03 at 16:56 +1000, Martin Pool wrote:
> On 3 Apr 2006, Robert Collins <robertc at robertcollins.net> wrote:
> > On Wed, 2006-03-29 at 10:05 -0500, Aaron Bentley wrote:
> >
> >
> > > > If you are interested in making it a decorator but not completely sure
> > > > of what I mean, I'll be happy to do a variation on that part of the
> > > > patch that does this.
> > >
> > > Yes, that would be interesting. Also, it would be nice to make it a
> > > subclass of LocalTransport if that's possible.
> >
> > Here is a decorator version of FakeNFS. This will by default backend
> > onto a LocalRelpathServer, so it has actual disk backing.
>
> +1 with some comments
Thanks.
> > However, it does not appear as a 'LocalTransport' to our code that
> > checks for instances of LocalTransport.
> >
> > I realise this patch looks a lot bigger, but its 90% just moving the
> > infrastructure the ReadOnlyTransport decorator used into a common base
> > class to allow trivial decorators to be written.
> >
> > I think that for the LocalHost checks it might be nice to add the
> > following to Transport:
> >
> > def get_local_path(self):
> > """Returns a local path representation of this transports url.
> >
> > If this URL cannot be represented as a local path, NotLocalURL
> > will be raised.
> >
> > The default implementation raises NotLocalURL as we expect that
> > to be the common case.
> > """
> > raise NotLocalUrl(self.base)
> >
> > Then the FakeNFSTransportDecorator can just do:
> > return self._decorated.get_local_path()
> >
> > And it also solves the confusion we've had about whether local path urls
> > are utf8 encoded or url encoded etc etc by giving them a specific
> > protocol for getting a local path representation.
> >
> > What do you think?
>
> That sounds good.
>
> Perhaps it should take a path parameter, and return the local path for
> that file, or the root if no path is given.
>
> I might change the doc to something like:
>
> If this transport accesses local files, return the local path to a
> file.
>
> If the files are not in the local filesystem (e.g. on another server,
> in memory, etc) then this raises NotLocalUrl.
>
> This always returns a unicode string.
>
> If you agree unicode would be best.
I do agree with that.
> > +class TransportDecorator(Transport):
> > + """A no-change decorator for Transports.
> > +
> > + This does not use __getattr__ hacks as we need to ensure that
> > + new methods are overridden correctly.
> > +
> > + This decorator class is not directly usable: subclasses must
> > + override the _get_url_prefix() class method to return the url prefix they
> > + have chosen.
> > + """
>
> The docstring needs to explain more about what the class is *for*, e.g.
>
> Subclasses of this are new transports that are based on an
> underlying transport and can override or intercept some
> behavior. For example ReadonlyTransportDecorator prevents
> all write attempts, and FakeNFSTransportDecorator simulates
> some NFS quirks.
>
> It's arguably not ideal to refer to a subclass to explain the purpose of
> a superclass, but I think an example goes a long way in explaining
> abstractions.
Sure, thanks for the clearer text :).
Rob
--
GPG key available at: <http://www.robertcollins.net/keys.txt>.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20060404/561ca06d/attachment.pgp
More information about the bazaar
mailing list