diff --git a/openquake/baselib/parallel.py b/openquake/baselib/parallel.py index 119531e7c89c..9c91aa5cf6a1 100644 --- a/openquake/baselib/parallel.py +++ b/openquake/baselib/parallel.py @@ -188,6 +188,7 @@ def count(word): import socket import signal import pickle +import sqlite3 import getpass import inspect import logging @@ -455,6 +456,9 @@ def new(cls, func, args, mon, sentbytes=0): _etype, exc, tb = sys.exc_info() res = Result(exc, mon, ''.join(traceback.format_tb(tb))) else: + if isinstance(val, sqlite3.Cursor): + # happens when the DbServer performs an UPDATE command + val = val.lastrowid res = Result(val, mon) return res diff --git a/openquake/server/db/actions.py b/openquake/server/db/actions.py index 6ac46e935ab9..1a21fc2e5616 100644 --- a/openquake/server/db/actions.py +++ b/openquake/server/db/actions.py @@ -399,8 +399,13 @@ def log(db, job_id, timestamp, level, process, message): :param message: message to store in the log record """ - db('INSERT INTO log (job_id, timestamp, level, process, message) ' - 'VALUES (?X)', (job_id, timestamp, level, process, message)) + try: + db('INSERT INTO log (job_id, timestamp, level, process, message) ' + 'VALUES (?X)', (job_id, timestamp, level, process, message)) + except Exception as exc: + # not so serious to break the calculation + print(exc) + def get_log(db, job_id): diff --git a/openquake/server/dbserver.py b/openquake/server/dbserver.py index 04dd1cb1d6de..f5b89fe31284 100644 --- a/openquake/server/dbserver.py +++ b/openquake/server/dbserver.py @@ -61,9 +61,11 @@ def dworker(self, sock): try: func = getattr(actions, cmd) except AttributeError: # SQL string - sock.send(p.safely_call(self.db, (cmd,) + args)) + res = p.safely_call(self.db, (cmd,) + args) + sock.send(res) else: # action - sock.send(p.safely_call(func, (self.db,) + args)) + res = p.safely_call(func, (self.db,) + args) + sock.send(res) def start(self): """