diff options
author | Alan Conway <aconway@apache.org> | 2014-04-23 21:11:08 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2014-04-23 21:11:08 +0000 |
commit | 8e0913a48177df57c4e0312bcfb7c5ee8dcdb327 (patch) | |
tree | 45af98b3fc04506dc8c84a4d1356078cb4782cdf /qpid/cpp | |
parent | 75f9e37431ec7d7ca112012e322133db76808df4 (diff) | |
download | qpid-python-8e0913a48177df57c4e0312bcfb7c5ee8dcdb327.tar.gz |
QPID-5720: HA exception raised by the store for durable transactions
Running qpid-txtest against a HA cluster was raising this exception:
async_dequeue() failed: jexception 0x0b02 wmgr::dequeue_check() threw JERR_MAP_LOCKED: Record ID locked by a pending transaction.
This is actually a test bug. In a cluster a transaction commit takes longer to
complete because of co-ordinating with backups, the test was not waiting for the
completion of commit command before proceeding. Adding a sync() in the test
solves the problem. Note this test uses the old obsolete C++ API. Applications
written using the supported messaging API are not affected by this. This can be
verified using the qpid-send and qpid-receive clients with the --tx option
(there is already an automated test for this in ha_tests.py.)
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1589520 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r-- | qpid/cpp/src/tests/brokertest.py | 3 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/ha_tests.py | 14 | ||||
-rw-r--r-- | qpid/cpp/src/tests/qpid-txtest.cpp | 1 |
3 files changed, 10 insertions, 8 deletions
diff --git a/qpid/cpp/src/tests/brokertest.py b/qpid/cpp/src/tests/brokertest.py index c93a086301..ebb1702a05 100644 --- a/qpid/cpp/src/tests/brokertest.py +++ b/qpid/cpp/src/tests/brokertest.py @@ -218,6 +218,9 @@ class Popen(subprocess.Popen): self._cleanup() return ret + def assert_exit_ok(self): + if self.wait() != 0: self.unexpected("Exit code %d" % self.returncode) + def terminate(self): try: subprocess.Popen.terminate(self) except AttributeError: # No terminate method diff --git a/qpid/cpp/src/tests/ha_tests.py b/qpid/cpp/src/tests/ha_tests.py index 844856f718..de04c44481 100755 --- a/qpid/cpp/src/tests/ha_tests.py +++ b/qpid/cpp/src/tests/ha_tests.py @@ -1551,15 +1551,13 @@ class TransactionTests(HaBrokerTest): for t in threads: t.join() for s in sessions: s.connection.close() - def test_broker_tx_tests(self): + def test_other_tx_tests(self): cluster = HaCluster(self, 3) - print "Running python broker tx tests" - p = subprocess.Popen(["qpid-python-test", - "-m", "qpid_tests.broker_0_10", - "-b", "localhost:%s"%(cluster[0].port()), - "*.tx.*"]) - assert not p.wait() - print "Finished python broker tx tests" + self.popen(["qpid-txtest", "-p%s"%cluster[0].port()]).assert_exit_ok() + self.popen(["qpid-python-test", + "-m", "qpid_tests.broker_0_10", + "-b", "localhost:%s"%(cluster[0].port()), + "*.tx.*"]).assert_exit_ok() if __name__ == "__main__": outdir = "ha_tests.tmp" diff --git a/qpid/cpp/src/tests/qpid-txtest.cpp b/qpid/cpp/src/tests/qpid-txtest.cpp index 6e7d46802c..59ab905af7 100644 --- a/qpid/cpp/src/tests/qpid-txtest.cpp +++ b/qpid/cpp/src/tests/qpid-txtest.cpp @@ -179,6 +179,7 @@ struct Transfer : public Client, public Runnable } else { session.txCommit(); } + session.sync(); } } catch(const std::exception& e) { std::cout << "Transfer interrupted: " << e.what() << std::endl; |