> -----Original Message-----
> From: Ivan Zhakov [mailto:i...@visualsvn.com]
> Sent: vrijdag 31 augustus 2012 14:30
> To: C. Michael Pilato
> Cc: Justin Erenkrantz; Subversion Development
> Subject: Re: [PATCH] Make ra_serf be more aggressive about closing
> directories in update
> 
> On Fri, Aug 24, 2012 at 5:56 PM, C. Michael Pilato <cmpil...@collab.net>
> wrote:
> > On 08/10/2012 06:20 AM, Justin Erenkrantz wrote:
> >> FWIW, last week, I went down the path of trying to optimize the 'ls'
> >> client path - which issues two OPTIONS requests...which is kinda
> >> silly. but to remove it, requires that the RA open call also return
> >> the youngest revision.  I rev'd all of the RA layers, but then got
> >> stuck in a maze of twisty calls inside libsvn_client to try and use
> >> that revnum to skip the later call which invokes OPTIONS again...I
> >> should probably post that incomplete patch before moving on to
> >> something else.  =)
> >
> > If it makes you feel better, I've been down this road before, too.  :-)
> >
> > One thing that occurs to me as possible solution is to add a flag to
> > svn_ra_openX() which instructs the RA layer to immediately negotiate the
> > current youngest rev and then freeze that snapshot of the repository for
> the
> > duration of the RA session's lifetime.  The client layer alone knows whether
> > the high-level operation it is performing would be effected by additional
> > commits to the repository.  So for read-only operations, the clients would
> > pass this flag to the RA open stuffs, and the RA layer would cache the
> > youngest-rev.  Future calls to svn_ra_get_latest_revnum() on that session
> > would always return the cached value.  Other RA calls that allow you to use
> > SVN_INVALID_REVNUM to mean "HEAD" would also use the cached
> youngest-rev.
> >
> > Is that crazy?
> >
> > My one concern is that it might negatively effect code clarity.  If I see
> > svn_ra_get_latest_revnum(ra_session, &youngest, pool) in the client
> code, I
> > can't immediately tell if that function call will get the *realtime*
> > youngest revision or the frozen snapshot revision.  I'd need to find the
> > ra-open call to see if that special flag was provided.
> >
> >
> > -- C-Mike
> >
> > PS:  Going really nuts, we *could* allow the RA session to "peg" not merely
> > the current HEAD, but any arbitrary revision as the youngest revision the
> RA
> > session will be allowed to recognize.  But I can't quickly come up with a
> > good reason for doing that.
> >
> For me it looks like abstraction leakage. Better solution would be
> create new object like svn_client_ra_session_t() and store
> cached/negotiate latest revision here, while extend
> svn_ra_session_open to return youngest revision if requested.

We could just rev the function that retrieves the last revision to allow 
telling it that returning a cached value is ok. (Or add a different function 
for the potentially cached value)

Creating the sub-ra_sessions is probably too much for this optimization, but it 
could be useful for other things too.

        Bert

Reply via email to