mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
SqliteRevMap: wait indefinitely for database lock
Python sqlite has 5 seconds timeout by default, which means if a writer holds the lock, and the second writer will error out after 5 seconds. In our use-case, it makes sense to just wait. However, sqlite does not support waiting forever (see sqlite3_busy_timeout). Therefore use a while loop to workaround.
This commit is contained in:
parent
5851f26e18
commit
345ef20c2f
@ -662,7 +662,14 @@ class SqliteRevMap(collections.MutableMapping):
|
||||
if self._db is None:
|
||||
self._opendb()
|
||||
with self._db as db:
|
||||
db.execute('BEGIN %s' % mode)
|
||||
# wait indefinitely for database lock
|
||||
while True:
|
||||
try:
|
||||
db.execute('BEGIN %s' % mode)
|
||||
break
|
||||
except sqlite3.OperationalError as ex:
|
||||
if str(ex) != 'database is locked':
|
||||
raise
|
||||
yield db
|
||||
|
||||
def _query(self, sql, params=()):
|
||||
|
Loading…
Reference in New Issue
Block a user