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

Re: Upgrade to single-DB: problem locking an empty DB

From: Hyrum K. Wright <hyrum_wright_at_mail.utexas.edu>
Date: Tue, 10 Aug 2010 10:31:50 -0500

On Tue, Aug 10, 2010 at 10:26 AM, Julian Foad <julian.foad_at_wandisco.com> wrote:
> On Tue, 2010-08-10 at 15:31 +0100, Julian Foad wrote:
>> Upgrading a WC to single-DB:
>>
>> upgrade_to_wcng() calls
>>
>>   svn_wc__db_upgrade_begin() to create a new DB, and then
>>   svn_wc__db_wclock_obtain() and then
>>   svn_wc__write_upgraded_entries()
>>
>> The _wclock_obtain() fails because it checks that the node with relpath
>> "" exists.  Normally in libsvn_wc a new DB is created with
>> svn_wc__db_init() which inserts a row for relpath "", but
>> svn_wc__db_upgrade_begin() doesn't.
>>
>> What's the best solution here?  Not lock it?  Have
>> svn_wc__db_upgrade_begin() create an initial "" row?  Have
>> svn_wc__db_wclock_obtain() NOT check for existence of a "" row?  The
>> first and last options don't sound right.  Creating an initial "" row
>> does sound right, and requires (presumably) a modification of
>> svn_wc__write_upgraded_entries().
>
> The upgrade function is creating new DBs (or a new single-DB).  Should
> it perhaps be asking for a lock on the DB as a whole, as distinct from a
> recursive lock on the WC root directory?  In normal operation, those two
> mean the same, but maybe here we need to distinguish these as two
> different concepts.

Where is the upgrade DB being created? If it's called something like
'wc.db.foo', I would think you don't require *any* locking, since no
other process is going to be looking for that file. Do the upgrade,
and then move it in to place before nuking all the old data.

-Hyrum
Received on 2010-08-10 17:32:33 CEST

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