[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:
 | 
					            logger.warning(
 | 
				
			||||||
                raise
 | 
					                "Galera deadlock in gearman, retry {0}".format(x+1)
 | 
				
			||||||
            else:
 | 
					            )
 | 
				
			||||||
                logger.warning(
 | 
					 | 
				
			||||||
                    "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