On Fri, Aug 24, 2012 at 9:56 AM, C. Michael Pilato <cmpil...@collab.net> wrote:
> If it makes you feel better, I've been down this road before, too.  :-)

*grin*

> 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?

I didn't go so far as to freezing the session, but it's not completely
bonkers.  =)  I thought about it for a half-a-second and thought that
pegging the youngest rev to the session might have some awkward
side-effects - mainly due to a single session that does a youngest,
sends a commit, and then wants the youngest rev.  That could be
badness...though I guess in theory the client side could invalidate
its cache when it does a commit...but...awkwardness lies behind that
door...

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

Yup.  That's why it's only moderately bonkers.

I think if we were to really do this, we should have a proper API and
not slipstream it into the open call.  (Perhaps get_latest_revnum
could grow a parameter specifying if its okay to utilize a cached
value??)

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

As Daniel pointed out, that capability would help some awkward
scenarios that would likely simplify some of our automated test
invocations.  -- justin

Reply via email to