You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Daniel Shahaf <d....@daniel.shahaf.name> on 2011/02/23 15:02:49 UTC

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

julianfoad@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.

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).)

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

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Daniel Shahaf wrote on Wed, Feb 23, 2011 at 16:02:49 +0200:
> julianfoad@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).)