[API] More transaction fixes
Change-Id: Id39590768baa6ec4770c48c954a301e37faae4f8
This commit is contained in:
@@ -54,17 +54,16 @@ def client_job(logger, job_type, host, data, lbid):
|
|||||||
if job_type == 'ARCHIVE':
|
if job_type == 'ARCHIVE':
|
||||||
client.send_archive(data)
|
client.send_archive(data)
|
||||||
return
|
return
|
||||||
except OperationalError as exc:
|
except OperationalError:
|
||||||
# Auto retry on galera locking error
|
# Auto retry on galera locking error
|
||||||
if exc.args[0] != 1213:
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"Galera deadlock in gearman, retry {0}".format(x+1)
|
"Galera deadlock in gearman, retry {0}".format(x+1)
|
||||||
)
|
)
|
||||||
except:
|
except:
|
||||||
logger.exception("Gearman thread unhandled exception")
|
logger.exception("Gearman thread unhandled exception")
|
||||||
|
|
||||||
|
logger.error("Gearman thread could not talk to DB")
|
||||||
|
|
||||||
|
|
||||||
class GearmanClientThread(object):
|
class GearmanClientThread(object):
|
||||||
def __init__(self, logger, host, lbid):
|
def __init__(self, logger, host, lbid):
|
||||||
|
|||||||
@@ -77,10 +77,10 @@ class LibraController(RestController):
|
|||||||
_lookup_result = self._handle_lookup(args)
|
_lookup_result = self._handle_lookup(args)
|
||||||
if _lookup_result:
|
if _lookup_result:
|
||||||
return _lookup_result
|
return _lookup_result
|
||||||
except OperationalError as sqlexc:
|
except OperationalError:
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
# if a galera transaction fails due to locking, retry the call
|
# if a galera transaction fails due to locking, retry the call
|
||||||
if sqlexc.args[0] == 1213 and LibraController.routing_calls < 5:
|
if LibraController.routing_calls < 5:
|
||||||
LibraController.routing_calls += 1
|
LibraController.routing_calls += 1
|
||||||
logger.warning("Galera deadlock, retry: {0}".format(
|
logger.warning("Galera deadlock, retry: {0}".format(
|
||||||
LibraController.routing_calls)
|
LibraController.routing_calls)
|
||||||
|
|||||||
@@ -104,21 +104,12 @@ def wsexpose(*args, **kwargs):
|
|||||||
pecan.response.status = result.status_code
|
pecan.response.status = result.status_code
|
||||||
result = result.obj
|
result = result.obj
|
||||||
|
|
||||||
except OperationalError as sqlexc:
|
except OperationalError:
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
if sqlexc.args[0] == 1213:
|
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"Galera deadlock in gearman, retry {0}".format(x+1)
|
"Galera deadlock in gearman, retry {0}".format(x+1)
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
else:
|
|
||||||
data = wsme.api.format_exception(
|
|
||||||
sys.exc_info(),
|
|
||||||
pecan.conf.get('wsme', {}).get('debug', False)
|
|
||||||
)
|
|
||||||
e = sys.exc_info()[1]
|
|
||||||
pecan.response.status = 500
|
|
||||||
return data
|
|
||||||
except:
|
except:
|
||||||
data = wsme.api.format_exception(
|
data = wsme.api.format_exception(
|
||||||
sys.exc_info(),
|
sys.exc_info(),
|
||||||
@@ -137,6 +128,13 @@ def wsexpose(*args, **kwargs):
|
|||||||
datatype=funcdef.return_type,
|
datatype=funcdef.return_type,
|
||||||
result=result
|
result=result
|
||||||
)
|
)
|
||||||
|
# After 5 retries of transaction, give up!
|
||||||
|
data = wsme.api.format_exception(
|
||||||
|
sys.exc_info(),
|
||||||
|
pecan.conf.get('wsme', {}).get('debug', False)
|
||||||
|
)
|
||||||
|
pecan.response.status = 500
|
||||||
|
return data
|
||||||
|
|
||||||
pecan_xml_decorate(callfunction)
|
pecan_xml_decorate(callfunction)
|
||||||
pecan_json_decorate(callfunction)
|
pecan_json_decorate(callfunction)
|
||||||
|
|||||||
Reference in New Issue
Block a user