Parcourir la source

Fix crash on starting a run while the DB is locked

master
JustAnotherArchivist il y a 3 ans
Parent
révision
dcd5455388
1 fichiers modifiés avec 11 ajouts et 1 suppressions
  1. +11
    -1
      qwarc/__init__.py

+ 11
- 1
qwarc/__init__.py Voir le fichier

@@ -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"')


Chargement…
Annuler
Enregistrer