[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1071795 - /subversion/trunk/notes/wc-ng/pristine-store

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Wed, 23 Feb 2011 18:49:57 +0200

Daniel Shahaf wrote on Wed, Feb 23, 2011 at 16:02:49 +0200:
> julianfoad_at_apache.org wrote on Thu, Feb 17, 2011 at 21:20:33 -0000:
> > Author: julianfoad
> > Date: Thu Feb 17 21:20:33 2011
> > New Revision: 1071795
> >
> > URL: http://svn.apache.org/viewvc?rev=1071795&view=rev
> > Log:
> > * notes/wc-ng/pristine-store
> > Update with initial feedback from danielsh.
> >
> > Modified:
> > subversion/trunk/notes/wc-ng/pristine-store
> >
> > Modified: subversion/trunk/notes/wc-ng/pristine-store
> > URL: http://svn.apache.org/viewvc/subversion/trunk/notes/wc-ng/pristine-store?rev=1071795&r1=1071794&r2=1071795&view=diff
> > ==============================================================================
> > --- subversion/trunk/notes/wc-ng/pristine-store (original)
> > +++ subversion/trunk/notes/wc-ng/pristine-store Thu Feb 17 21:20:33 2011
> > @@ -1,22 +1,36 @@
> > A. THE PRISTINE STORE
> > =====================
> >
> > === A-1. Introduction ===
> >
>
> +1 on your changes here, and (having read through) virtually everywhere
> else in this commit.
>
> I made a minor clarification in r1073749, and I have one question:
>
> > (d) To read a pristine text, the reader must:
> > - 1. Ensure no pristine-remove txn is in progress while querying and
> > - opening it.
> > + 1. Query the SDB and open the file within the same SDB txn (to ensure
> > + that no pristine-remove txn (A-3(b)) is in progress at the same
> > + time).
> > 2. Ensure the pristine text remains in the store continuously from
> > opening it for the duration of the read. (Perhaps by ensuring
> > refcount remains >= 1 and/or by cooperating with the clean-up
> > code. Under spec B, the clean-up code is controlled by rule
> > B-3(c), so holding any WC lock would prevent a pristine from being
> > - deleted.)
> > + deleted. An alternative is to use the operating system's ability
> > + to keep the file available for reading as long as the file handle
> > + is open, even if the file's directory entry is removed.)
> > +
> > +(e) To clean up "orphan" pristine files:
> > + 1.
> > +
> > +###?
>
> I guess it would be:
>
> (e) To clean up an "orphan" pristine file:
> 0. Acquire a 'RESERVED' lock.
> 1. Add a table row with refcount=0.
> 2. Follow the procedure A-3(b) for removing a pristine.
>

You may have noticed that I glossed over the "How to determine which
pristines are orphaned" detail.

Coming back to that detail, it seems that iterating all on-disk
pristines is going to be expensive --- that's O(# files in wc)
pristines, and I haven't mentioned the DB queries.

Would it make sense to route the unlink() calls via the work queue, in
order to avoid having to do that expensive scan for orphans?

> And then we can also add an invariant A-2(c);
>
> A-2(c) Pristines will only be added to or removed from the store by an
> entity that holds an SDB lock.
>
> Thoughts?
>
> (I think it's useful to document the high level "What locks are needed
> for what operations" --- I was looking for such an invariant but didn't
> find any in (A).)
Received on 2011-02-23 17:55:19 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.