示例#1
0
文件: queue.py 项目: ijat/pritunl
    def reserve(cls, reserve_id, reserve_data, block=False, block_timeout=90):
        if block:
            cursor_id = messenger.get_cursor_id('queue')

        doc = cls.collection.find_and_modify({
            'state': PENDING,
            'reserve_id': reserve_id,
            'reserve_data': None,
        }, {'$set': {
            'reserve_data': reserve_data,
        }}, new=True)
        if not doc:
            return

        if block:
            for msg in messenger.subscribe('queue', cursor_id=cursor_id,
                    timeout=block_timeout):
                try:
                    if msg['message'] == [COMPLETE, doc['_id']]:
                        return doc
                    elif msg['message'] == [ERROR, doc['_id']]:
                        raise QueueTaskError('Error occured running ' +
                            'queue task', {
                                'queue_id': doc['_id'],
                                'queue_type': doc['type'],
                            })
                except TypeError:
                    pass
            logger.error('Blocking queue reserve timed out', {
                'queue_id': doc['_id'],
                'queue_type': doc['type'],
            })
            return doc
        else:
            return doc
示例#2
0
    def reserve(cls, reserve_id, reserve_data, block=False, block_timeout=30):
        if block:
            cursor_id = messenger.get_cursor_id('queue')

        doc = cls.collection.find_and_modify({
            'state': PENDING,
            'reserve_id': reserve_id,
            'reserve_data': None,
        }, {'$set': {
            'reserve_data': reserve_data,
        }})
        if not doc:
            return

        if block:
            for msg in messenger.subscribe('queue', cursor_id=cursor_id,
                    timeout=block_timeout):
                try:
                    if msg['message'] == [COMPLETE, doc['_id']]:
                        return doc
                    elif msg['message'] == [ERROR, doc['_id']]:
                        raise QueueTaskError('Error occured running ' +
                            'queue task', {
                                'queue_id': doc['_id'],
                                'queue_type': doc['type'],
                            })
                except TypeError:
                    pass
            raise QueueTimeout('Blocking queue reserve timed out', {
                'queue_id': doc['_id'],
                'queue_type': doc['type'],
            })
        else:
            return doc
示例#3
0
    def start(self, transaction=None, block=False, block_timeout=30):
        self.ttl_timestamp = utils.now() + \
            datetime.timedelta(seconds=self.ttl)
        self.commit(transaction=transaction)

        if block:
            if transaction:
                raise TypeError('Cannot use transaction when blocking')
            cursor_id = messenger.get_cursor_id('queue')

        extra = {'queue_doc': self.export()}

        messenger.publish('queue', [PENDING, self.id],
                          extra=extra,
                          transaction=transaction)

        if block:
            last_update = time.time()
            while True:
                for msg in messenger.subscribe('queue',
                                               cursor_id=cursor_id,
                                               timeout=block_timeout):
                    cursor_id = msg['_id']
                    try:
                        if msg['message'] == [COMPLETE, self.id]:
                            return
                        elif msg['message'] == [UPDATE, self.id]:
                            last_update = time.time()
                            break
                        elif msg['message'] == [ERROR, self.id]:
                            raise QueueTaskError(
                                'Error occured running ' + 'queue task', {
                                    'queue_id': self.id,
                                    'queue_type': self.type,
                                })
                    except TypeError:
                        pass

                if (time.time() - last_update) >= block_timeout:
                    raise QueueTimeout('Blocking queue timed out.', {
                        'queue_id': self.id,
                        'queue_type': self.type,
                    })
示例#4
0
文件: queue.py 项目: ijat/pritunl
    def start(self, transaction=None, block=False, block_timeout=30):
        self.ttl_timestamp = utils.now() + \
            datetime.timedelta(seconds=self.ttl)
        self.commit(transaction=transaction)

        if block:
            if transaction:
                raise TypeError('Cannot use transaction when blocking')
            cursor_id = messenger.get_cursor_id('queue')

        extra = {
            'queue_doc': self.export()
        }

        messenger.publish('queue', [PENDING, self.id], extra=extra,
            transaction=transaction)

        if block:
            last_update = time.time()
            while True:
                for msg in messenger.subscribe('queue', cursor_id=cursor_id,
                        timeout=block_timeout):
                    cursor_id = msg['_id']
                    try:
                        if msg['message'] == [COMPLETE, self.id]:
                            return
                        elif msg['message'] == [UPDATE, self.id]:
                            last_update = time.time()
                            break
                        elif msg['message'] == [ERROR, self.id]:
                            raise QueueTaskError('Error occured running ' +
                                'queue task', {
                                    'queue_id': self.id,
                                    'queue_type': self.type,
                                })
                    except TypeError:
                        pass

                if (time.time() - last_update) >= block_timeout:
                    raise QueueTimeout('Blocking queue timed out.', {
                        'queue_id': self.id,
                        'queue_type': self.type,
                    })
示例#5
0
 def get_cursor_id(self):
     return messenger.get_cursor_id('servers')
示例#6
0
 def get_cursor_id(self):
     return messenger.get_cursor_id('servers')