Browse Source

Fix crash on starting a run while the DB is locked

master
JustAnotherArchivist 3 years ago
parent
commit
dcd5455388
1 changed files with 11 additions and 1 deletions
  1. +11
    -1
      qwarc/__init__.py

+ 11
- 1
qwarc/__init__.py View File

@@ -331,7 +331,17 @@ class QWARC:

self._db = sqlite3.connect(self._dbPath, timeout = 1)
self._db.isolation_level = None # Transactions are handled manually below.
self._db.execute('PRAGMA synchronous = OFF')

# Setting the synchronous PRAGMA is not possible if the DB is currently locked by another process but also can't be done inside a transaction... So just retry until it succeeds.
while True:
try:
self._db.execute('PRAGMA synchronous = OFF')
except sqlite3.OperationalError as e:
if str(e) != 'database is locked':
raise
await asyncio.sleep(1)
else:
break

async with self.exclusive_db_lock() as cursor:
cursor.execute('SELECT name FROM sqlite_master WHERE type = "table" AND name = "items"')


Loading…
Cancel
Save