[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':
 | 
			
		||||
                client.send_archive(data)
 | 
			
		||||
            return
 | 
			
		||||
        except OperationalError as exc:
 | 
			
		||||
        except OperationalError:
 | 
			
		||||
            # Auto retry on galera locking error
 | 
			
		||||
            if exc.args[0] != 1213:
 | 
			
		||||
                raise
 | 
			
		||||
            else:
 | 
			
		||||
            logger.warning(
 | 
			
		||||
                "Galera deadlock in gearman, retry {0}".format(x+1)
 | 
			
		||||
            )
 | 
			
		||||
        except:
 | 
			
		||||
            logger.exception("Gearman thread unhandled exception")
 | 
			
		||||
 | 
			
		||||
    logger.error("Gearman thread could not talk to DB")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GearmanClientThread(object):
 | 
			
		||||
    def __init__(self, logger, host, lbid):
 | 
			
		||||
 
 | 
			
		||||
@@ -77,10 +77,10 @@ class LibraController(RestController):
 | 
			
		||||
            _lookup_result = self._handle_lookup(args)
 | 
			
		||||
            if _lookup_result:
 | 
			
		||||
                return _lookup_result
 | 
			
		||||
        except OperationalError as sqlexc:
 | 
			
		||||
        except OperationalError:
 | 
			
		||||
            logger = logging.getLogger(__name__)
 | 
			
		||||
            # 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
 | 
			
		||||
                logger.warning("Galera deadlock, retry: {0}".format(
 | 
			
		||||
                    LibraController.routing_calls)
 | 
			
		||||
 
 | 
			
		||||
@@ -104,21 +104,12 @@ def wsexpose(*args, **kwargs):
 | 
			
		||||
                        pecan.response.status = result.status_code
 | 
			
		||||
                        result = result.obj
 | 
			
		||||
 | 
			
		||||
                except OperationalError as sqlexc:
 | 
			
		||||
                except OperationalError:
 | 
			
		||||
                    logger = logging.getLogger(__name__)
 | 
			
		||||
                    if sqlexc.args[0] == 1213:
 | 
			
		||||
                    logger.warning(
 | 
			
		||||
                        "Galera deadlock in gearman, retry {0}".format(x+1)
 | 
			
		||||
                    )
 | 
			
		||||
                    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:
 | 
			
		||||
                    data = wsme.api.format_exception(
 | 
			
		||||
                        sys.exc_info(),
 | 
			
		||||
@@ -137,6 +128,13 @@ def wsexpose(*args, **kwargs):
 | 
			
		||||
                    datatype=funcdef.return_type,
 | 
			
		||||
                    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_json_decorate(callfunction)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user