Daniel Shahaf wrote:
> Julian Foad wrote on Wed, Sep 14, 2011 at 16:07:19 +0100:
> > Enable libsvn_client APIs to re-use a previous RA session instead of always
> > opening a new connection.
> > 
> > Basically:
> > 
> >   - Declare an opaque "RA session cache" object in the public API. It holds
> >     one open RA session per repository, for any number of repositories.
>  
> Why per repository?

Because the caller of a libsvn_client API generally provides a
"path_or_url" without knowing which repository it refers to.  If the
client is calling e.g. "update a/", "update b/", "update c/", it doesn't
know in advance whether those paths refer to different repositories.
Suppose only "a" and "c" are in the same repo; the client can't pass
just a single cached session if we want to re-use the "a" session for
"c".

>   What about a client that runs 'svn update' on several
> wc's of the same URL concurrently?

I haven't attempted to support concurrent calls.  The cache is for
sequential use only (one user of the cache at a time).  If a client is
doing parallel updates and want to use this kind of cache it must have a
separate cache per thread.  I think.

> >   - Implement a private API for libsvn_client functions to use instead of
> >     simply opening a new session. It re-uses a session from the cache, if
> >     present, or opens a new connection if necessary.
> 
> As far as I can see, the "get a session from the cache" code assumes
> that the cache is used by a single thread.  (Consider what happens if
> one thread retrieves or uses a cached session while another retrieves
> the same session from the cache.)  Will the cache be thread-safe?

See above.

- Julian


Reply via email to