Daniel Shahaf wrote:
> > > #if (SVN_VER_MAJOR > 1 || SVN_VER_MINOR >= 16)
> > (in which I assume you meant MINOR >= 15)...
> 
> I assumed it would be a warning in 1.15 and an error in 1.16.

Oh, OK.  I was thinking nearer term (back-porting to 1.14.x as a warning, then 
error in 1.15), but I haven't any particular reason except to get on with it.

I have just confirmed that the back-portable way of adding a warning in the 
client layer does indeed need to open additional RA-sessions at the wire 
protocol level, at least for RA-svn. The patch I have prepared opens 4 extra 
RA-sessions, which I could reduce to 3 or 2 or maybe 1 extra for typical cases 
with a couple hours more work; and each additional RA-session takes maybe 2 
network round-trips at a guess (I could find out of course). That's per "svn 
merge" invocation, varying a bit depending on what form of merge.

I know folks would be very reluctant to accept any added overhead.

If we are not looking at back-porting it to 1.14.x, then we could instead add 
the warnings in a way that doesn't add any additional RA-session opens, but 
requires bumping APIs, so a bunch of boiler-plate work.  There are several 
potential approaches to choose from, such as (roughly ordered from easiest to 
best):

  - use the checks in libsvn_client; add a new warnings callback
  - use the checks in libsvn_client; add a new 'notification' type for the 
warnings
  - add checks in the app layer; pass the open sessions through to new (bumped) 
merge APIs
  - add checks in the app layer; add general RA session caching

(I wish we had addressed the technical debt that I perceive in the lack of RA 
session caching.  I know some of us have looked into it before -- e.g. the 
'reuse-ra-session' branch -- but it seems we didn't ever complete a solution.)

-- 
- Julian

Reply via email to