Don't hang in db.execute_write_fn() if connection fails

Closes #935

Refs https://github.com/simonw/latest-datasette-with-all-plugins/issues/3
This commit is contained in:
Simon Willison 2020-08-15 15:35:31 -07:00 committed by GitHub
commit b86f94883b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 6 deletions

View file

@ -89,14 +89,22 @@ class Database:
def _execute_writes(self):
# Infinite looping thread that protects the single write connection
# to this database
conn = self.connect(write=True)
conn_exception = None
conn = None
try:
conn = self.connect(write=True)
except Exception as e:
conn_exception = e
while True:
task = self._write_queue.get()
try:
result = task.fn(conn)
except Exception as e:
print(e)
result = e
if conn_exception is not None:
result = conn_exception
else:
try:
result = task.fn(conn)
except Exception as e:
print(e)
result = e
task.reply_queue.sync_q.put(result)
async def execute_fn(self, fn):