def bulk_get(self, queue, message_ids, project): if project is None: project = '' message_ids = [ id for id in map(utils.msgid_decode, message_ids) if id is not None ] statement = sa.sql.select([ tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created ]) and_stmt = [ tables.Messages.c.id.in_(message_ids), tables.Queues.c.name == queue, tables.Queues.c.project == project, tables.Messages.c.ttl > sfunc.now() - tables.Messages.c.created ] j = sa.join(tables.Messages, tables.Queues, tables.Messages.c.qid == tables.Queues.c.id) statement = statement.select_from(j).where(sa.and_(*and_stmt)) now = timeutils.utcnow_ts() records = self.driver.run(statement) for id, body, ttl, created in records: yield { 'id': utils.msgid_encode(int(id)), 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }
def _normalize(pool, detailed=False): ret = {"name": pool[0], "uri": pool[1], "weight": pool[2]} if detailed: opts = pool[3] ret["options"] = utils.json_decode(opts) if opts else {} return ret
def bulk_get(self, queue, message_ids, project): if project is None: project = '' message_ids = [id for id in map(utils.msgid_decode, message_ids) if id is not None] statement = sa.sql.select([tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created]) and_stmt = [tables.Messages.c.id.in_(message_ids), tables.Queues.c.name == queue, tables.Queues.c.project == project, tables.Messages.c.ttl > sfunc.now() - tables.Messages.c.created] j = sa.join(tables.Messages, tables.Queues, tables.Messages.c.qid == tables.Queues.c.id) statement = statement.select_from(j).where(sa.and_(*and_stmt)) now = timeutils.utcnow_ts() records = self.driver.run(statement) for id, body, ttl, created in records: yield { 'id': utils.msgid_encode(int(id)), 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }
def it(): for rec in records: marker_name['next'] = rec[0] yield ({ 'name': rec[0] } if not detailed else { 'name': rec[0], 'metadata': utils.json_decode(rec[1]) })
def get(self, queue, message_id, project): body, ttl, created = self._get(queue, message_id, project) now = timeutils.utcnow_ts() return { 'id': message_id, 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }
def it(): now = timeutils.utcnow_ts() for id, body, ttl, created in records: marker_id['next'] = id yield { 'id': utils.msgid_encode(id), 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }
def _normalize(pool, detailed=False): ret = { 'name': pool[0], 'uri': pool[1], 'weight': pool[2], } if detailed: opts = pool[3] ret['options'] = utils.json_decode(opts) if opts else {} return ret
def get_metadata(self, name, project): if project is None: project = '' try: sel = sa.sql.select([tables.Queues.c.metadata], sa.and_(tables.Queues.c.project == project, tables.Queues.c.name == name)) return utils.json_decode(self.driver.get(sel)[0]) except utils.NoResult: raise errors.QueueDoesNotExist(name, project)
def get_metadata(self, name, project): if project is None: project = '' try: sel = sa.sql.select([tables.Queues.c.metadata], sa.and_( tables.Queues.c.project == project, tables.Queues.c.name == name )) return utils.json_decode(self.driver.get(sel)[0]) except utils.NoResult: raise errors.QueueDoesNotExist(name, project)
def pop(self, queue_name, limit, project=None): if project is None: project = '' with self.driver.trans() as trans: sel = sa.sql.select([ tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created ]) j = sa.join(tables.Messages, tables.Queues, tables.Messages.c.qid == tables.Queues.c.id) sel = sel.select_from(j) and_clause = [ tables.Queues.c.name == queue_name, tables.Queues.c.project == project ] and_clause.append(tables.Messages.c.cid == (None)) sel = sel.where(sa.and_(*and_clause)) sel = sel.limit(limit) records = trans.execute(sel) now = timeutils.utcnow_ts() messages = [] message_ids = [] for id, body, ttl, created in records: messages.append({ 'id': utils.msgid_encode(id), 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }) message_ids.append(id) statement = tables.Messages.delete() qid = utils.get_qid(self.driver, queue_name, project) and_stmt = [ tables.Messages.c.id.in_(message_ids), tables.Messages.c.qid == qid ] trans.execute(statement.where(sa.and_(*and_stmt))) return messages
def pop(self, queue_name, limit, project=None): if project is None: project = '' with self.driver.trans() as trans: sel = sa.sql.select([tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created]) j = sa.join(tables.Messages, tables.Queues, tables.Messages.c.qid == tables.Queues.c.id) sel = sel.select_from(j) and_clause = [tables.Queues.c.name == queue_name, tables.Queues.c.project == project] and_clause.append(tables.Messages.c.cid == (None)) sel = sel.where(sa.and_(*and_clause)) sel = sel.limit(limit) records = trans.execute(sel) now = timeutils.utcnow_ts() messages = [] message_ids = [] for id, body, ttl, created in records: messages.append({ 'id': utils.msgid_encode(id), 'ttl': ttl, 'age': now - calendar.timegm(created.timetuple()), 'body': utils.json_decode(body), }) message_ids.append(id) statement = tables.Messages.delete() qid = utils.get_qid(self.driver, queue_name, project) and_stmt = [tables.Messages.c.id.in_(message_ids), tables.Messages.c.qid == qid] trans.execute(statement.where(sa.and_(*and_stmt))) return messages
def __get(self, cid, trans): # NOTE(flaper87): This probably needs to # join on `Claim` to check the claim ttl. sel = sa.sql.select([tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created], sa.and_( tables.Messages.c.ttl > utils.get_age(tables.Messages.c.created), # tables.Messages.c.ttl > # utils.get_age(tables.Claims.c.created), tables.Messages.c.cid == cid)) records = trans.execute(sel) for id, body, ttl, created in records: yield { 'id': utils.msgid_encode(int(id)), 'ttl': ttl, 'age': (timeutils.utcnow() - created).seconds, 'body': utils.json_decode(body), }
def it(): for rec in records: marker_name['next'] = rec[0] yield ({'name': rec[0]} if not detailed else {'name': rec[0], 'metadata': utils.json_decode(rec[1])})