On Tue, Aug 10, 2010 at 11:31, Hyrum K. Wright
<hyrum_wri...@mail.utexas.edu> wrote:
> On Tue, Aug 10, 2010 at 10:26 AM, Julian Foad <julian.f...@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.

At the moment, it is called 'wc.db'. IIRC, there were some issues
where wc_db calls were made and it looked for wc.db. Not sure if that
is still true (ideally, there would be NO wc_db calls during an
upgrade process).

So... locking is still needed.

Maybe we should allow locks on non-existent rows. Effectively a
"reservation" that something is about to create that row.

Cheers,
-g

Reply via email to