[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Some performance data

From: Philip Martin <philip.martin_at_wandisco.com>
Date: Tue, 18 Jan 2011 09:32:40 +0000

Hyrum K Wright <hyrum_at_hyrumwright.org> writes:

> I've been looking at which bugs can be closed by the pending
> completion of wc-ng. In particular, I've been looking at issue #1284:
> http://subversion.tigris.org/issues/show_bug.cgi?id=1284
>
> The issue is essentially a complaint about the performance of 'svn mv
> somedir targetdir' when the number of files in somedir is very large,
> in the thousands. It's a performance bug with no real good feeling
> for done, but given the performance improvements of wc-ng, I'm marking
> it as so.

I believe there is a relatively small change that could make it better
still. Look at libsvn_client/copy.c:do_wc_to_wc_moves_with_locks2

  SVN_ERR(svn_wc_copy3(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
                       dst_abspath, FALSE /* metadata_only */,
                       b->ctx->cancel_func, b->ctx->cancel_baton,
                       b->ctx->notify_func2, b->ctx->notify_baton2,
                       scratch_pool));

  SVN_ERR(svn_wc_delete4(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
                         FALSE, FALSE,
                         b->ctx->cancel_func, b->ctx->cancel_baton,
                         b->ctx->notify_func2, b->ctx->notify_baton2,
                         scratch_pool));

Have svn_wc_copy3 set metadata_only to TRUE, this will be faster. Then
do svn_io_rename to move the working tree, it's a single rename so it
should be fast. The svn_wc_delete4 call should still operate if the
working tree is missing and could be marginally faster.

Overall this should be significantly faster as it doesn't have to copy
all the working files. It has the additional benefit that it preserves
timestamps in the working tree. The only reason I haven't implemented
it yet is that I haven't decided whether we should use a workqueue.

-- 
Philip
Received on 2011-01-18 10:33:22 CET

This is an archived mail posted to the Subversion Dev mailing list.