예제 #1
0
    def _getResult(self, function, passErrors =None):
        # SLAVE models are read-only, so make sure to lock the table in read mode only to prevent
        # lock collisions. MASTER models query for updates, so use the stronger update lockmode
        # to prevent read collisions.

        # 3 iterations is significant to SQLAlchemy.
        for i in range(3):
            try:
                result = function()
                if self._lock:
                    if self._modelClass.IS_MASTER:
                        result = result.with_lockmode("update")
                    else:
                        result = result.with_lockmode("read")
                return result
            except passErrors as err:
                raise err
            except Exception as err:
                stackData = Logger.getStackData()
                self._modelClass._log.writeError('[%s] BAD CURSOR ACTION: %s'
                                                 % (str(i), str(function)), err)
                pass

        # Sleeps away collisions.
        time.sleep(1)

        try:
            result = function()
            if self._lock:
                if self._modelClass.IS_MASTER:
                    result = result.with_lockmode("update")
                else:
                    result = result.with_lockmode("read")
            return result
        except passErrors as err:
            raise err
        except Exception as err:
            stackData = Logger.getStackData()
            # noinspection PyProtectedMember
            self._modelClass._log.writeError('FAILED CURSOR ACTION: %s'% str(function), err)

        return None
예제 #2
0
                    if self._modelClass.IS_MASTER:
                        result = result.with_lockmode("update")
                    else:
                        result = result.with_lockmode("read")
                return result
            except passErrors, err:
                raise err
            except Exception, err:
                stackData = Logger.getStackData()
                self._modelClass._log.writeError("[%s] BAD CURSOR ACTION: %s" % (str(i), str(function)), err)
                pass

        # Sleeps away collisions.
        time.sleep(1)

        try:
            result = function()
            if self._lock:
                if self._modelClass.IS_MASTER:
                    result = result.with_lockmode("update")
                else:
                    result = result.with_lockmode("read")
            return result
        except passErrors, err:
            raise err
        except Exception, err:
            stackData = Logger.getStackData()
            self._modelClass._log.writeError("FAILED CURSOR ACTION: %s" % str(function), err)

        return None