summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Moravec <pmoravec@apache.org>2014-02-01 10:16:39 +0000
committerPavel Moravec <pmoravec@apache.org>2014-02-01 10:16:39 +0000
commit3b036d9cef353c142c1cb0aec31cb8e8f96fa314 (patch)
tree6781354f2ab68cc73954634efd64b746167342e8
parente9e3e6281da5172965a53ea83753b998646a3ec3 (diff)
downloadqpid-python-3b036d9cef353c142c1cb0aec31cb8e8f96fa314.tar.gz
QPID-5530: [legacystore] store_chk raises "Operation on non-existent record: operation=unlock; rid=.." on aborted DTX transaction in TplStore
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1563387 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/tools/src/py/qpidstore/janal.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/qpid/tools/src/py/qpidstore/janal.py b/qpid/tools/src/py/qpidstore/janal.py
index 1f89207b4d..231b283c05 100644
--- a/qpid/tools/src/py/qpidstore/janal.py
+++ b/qpid/tools/src/py/qpidstore/janal.py
@@ -215,9 +215,18 @@ class TxnMap(object):
def _abort(self, xid):
"""Perform an abort operation for the given xid record"""
- for fid, hdr, lock in self.__map[xid]:
+ for _, hdr, _ in self.__map[xid]:
if isinstance(hdr, jrnl.DeqRec):
- self.__emap.unlock(hdr.deq_rid)
+ try:
+ self.__emap.unlock(hdr.deq_rid)
+ except jerr.NonExistentRecordError as err: # Not in emap, look in current transaction op list (TPL)
+ found_rid = False
+ for _, hdr1, _ in self.__map[xid]:
+ if isinstance(hdr1, jrnl.EnqRec) and hdr1.rid == hdr.deq_rid:
+ found_rid = True
+ break
+ if not found_rid: # Not found in current transaction op list, re-throw error
+ raise err
del self.__map[xid]
def _commit(self, xid):