Ejemplo n.º 1
0
def run_in_transaction_custom_retries(retry, function, *args, **kwargs):
    MYSQL_WAIT_MAX = 3

    count = retry
    start_time = OSAUtil.get_now()
    while True:
        try:
            return transaction_sub(function, *args, **kwargs)
        except AppError:
            # apperrorは意図的に出しているからスルー.
            raise
        except CabaretError:
            # apperrorは意図的に出しているからスルー.
            raise
        except TimeoutError:
            # db接続タイムアウト.
            raise
        except OperationalError:
            # mysqlの接続等のエラー.
            now = OSAUtil.get_now()
            dif = now - start_time
            if dif.seconds < MYSQL_WAIT_MAX:
                time.sleep(0.1)
            else:
                info = sys.exc_info()
                trace = CabaretError.makeErrorTraceString(info)
                raise CabaretError(trace,
                                   CabaretError.Code.TOO_MANY_TRANSACTION)
        except:
            if count <= 0:
                raise
            count -= 1
            time.sleep(0.01)
Ejemplo n.º 2
0
def save_custom_retries(method, *args, **kwargs):
    """書き込みリトライメソッド.
    トランザクションをはっていないときに呼ばれる.
    """
    start_time = OSAUtil.get_now()
    while True:
        try:
            return method(*args, **kwargs)
        except TimeoutError:
            # db接続タイムアウト.
            raise
        except OperationalError:
            # mysqlの接続等のエラー.
            now = OSAUtil.get_now()
            dif = now - start_time
            if dif.seconds < 3:
                time.sleep(0.1)
            else:
                info = sys.exc_info()
                trace = CabaretError.makeErrorTraceString(info)
                raise CabaretError(trace,
                                   CabaretError.Code.TOO_MANY_TRANSACTION)
Ejemplo n.º 3
0
    def handle(self, *args, **options):

        print '================================'
        print 'make_local_master'
        print '================================'

        filepath = os.path.join(os.path.dirname(__file__),
                                '../../models/localdata/master.json')
        print '---------------'
        print 'file: %s' % filepath
        print '---------------'

        f = None
        try:
            f = open(filepath, "r")
            jsonstr = f.read()
            modellist = MasterData.update_from_json(jsonstr)
            print 'success:record num=%d' % len(modellist)
        except:
            print 'error: %s' % CabaretError.makeErrorTraceString(
                sys.exc_info())
        finally:
            if f:
                f.close()