From 9ccce28148eebd7e5d0532f3c07e35eeec770add Mon Sep 17 00:00:00 2001 From: kgriffs Date: Fri, 1 Nov 2013 18:12:52 -0500 Subject: [PATCH] fix(mongo): Delete claimed message fails This patch adds an additional check on the primary node for the correct claim ID if it fails to match on the secondary. This takes care of the case when the claimed version of the message document has not yet been replicated to the secondary before the client attempts to delete it. Change-Id: Ia22562532351a36bedc980c7c6041517207b2723 Closes-Bug: #1247297 --- marconi/queues/storage/mongodb/messages.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/marconi/queues/storage/mongodb/messages.py b/marconi/queues/storage/mongodb/messages.py index 5a30b4f50..d0d352422 100644 --- a/marconi/queues/storage/mongodb/messages.py +++ b/marconi/queues/storage/mongodb/messages.py @@ -646,7 +646,14 @@ class MessageController(storage.MessageBase): else: if message['c']['id'] != cid: - raise errors.MessageIsClaimedBy(message_id, claim) + # NOTE(kgriffs): Read from primary in case the message + # was just barely claimed, and claim hasn't made it to + # the secondary. + pref = pymongo.read_preferences.ReadPreference.PRIMARY + message = collection.find_one(query, read_preference=pref) + + if message['c']['id'] != cid: + raise errors.MessageIsClaimedBy(message_id, claim) collection.remove(query['_id'], w=0)