Fix fail of getting claim after claim expire(Redis)
When creating a claim for messages in a queue, after this claim expires, Zaqar will return service unavailable when getting the claim. This happens since claim's id is still listed in set "<project_id>.<queue_name>.claims" but Zaqar get '[None]' from claim_id's 'expire' field. Fix this issue if field value is '[None]' then just return it and remove it from set "<project_id>.<queue_name>.claims". Change-Id: I8602b197903acc1692185e7715a4070814fe1661 Closes-Bug: #1588247
This commit is contained in:
parent
5d1964d96b
commit
e72dc08287
@ -98,7 +98,10 @@ class ClaimController(storage.Claim, scripting.Mixin):
|
||||
"""Get one or more fields from the claim Info."""
|
||||
|
||||
values = self._client.hmget(claim_id, fields)
|
||||
return [transform(v) for v in values] if transform else values
|
||||
if values == [None]:
|
||||
return values
|
||||
else:
|
||||
return [transform(v) for v in values] if transform else values
|
||||
|
||||
def _claim_messages(self, msgset_key, now, limit,
|
||||
claim_id, claim_expires, msg_ttl, msg_expires):
|
||||
|
@ -400,6 +400,24 @@ class RedisClaimsTest(base.ClaimControllerTest):
|
||||
self.controller.update, queue_name,
|
||||
claim_id, {}, project=None)
|
||||
|
||||
def test_get_claim_after_expires(self):
|
||||
queue_name = 'no-such-claim'
|
||||
self.queue_controller.create(queue_name, project='fake_project')
|
||||
new_messages = [{'ttl': 60, 'body': {}},
|
||||
{'ttl': 60, 'body': {}},
|
||||
{'ttl': 60, 'body': {}}]
|
||||
self.message_controller.post(queue_name, new_messages,
|
||||
client_uuid=str(uuid.uuid1()),
|
||||
project='fake_project')
|
||||
claim_id, messages = self.controller.create(queue_name, {'ttl': 1,
|
||||
'grace': 0},
|
||||
project='fake_project')
|
||||
# Lets let it expire
|
||||
time.sleep(2)
|
||||
self.assertRaises(storage.errors.ClaimDoesNotExist,
|
||||
self.controller.get, queue_name,
|
||||
claim_id, project='fake_project')
|
||||
|
||||
def test_gc(self):
|
||||
self.queue_controller.create(self.queue_name)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user