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. -Hyrum