summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichael Still <mikal@stillhq.com>2012-10-25 10:13:53 +1100
committerMichael Still <mikal@stillhq.com>2013-02-06 12:43:33 +1100
commit51efba78bdcee821937c28c1973ec80e8c2d59ae (patch)
treefaa4b454fe361b71187e07b4ed71ecaa29b24bdc /tests
parenta9b69ff076080e31271d32751580c35107f0a451 (diff)
downloadoslo-51efba78bdcee821937c28c1973ec80e8c2d59ae.tar.gz
oslo-51efba78bdcee821937c28c1973ec80e8c2d59ae.tar.xz
oslo-51efba78bdcee821937c28c1973ec80e8c2d59ae.zip
Emit a warning if RPC calls made with lock.
This patch will log a warning every time a RPC call is made while a lock is held if the caller has requested it. This should help us track down performance problems such as the security group refresh problem recently found in nova. RPC calls can emit a warning if called with check_for_lock=True and debugging is turned on. Sneaks up on bug 1063222. Change-Id: Ice94093efb3cb95dd58b31d6ba817c7d505c15af
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/rpc/test_proxy.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/unit/rpc/test_proxy.py b/tests/unit/rpc/test_proxy.py
index 64eb008..436bcab 100644
--- a/tests/unit/rpc/test_proxy.py
+++ b/tests/unit/rpc/test_proxy.py
@@ -21,6 +21,7 @@ Unit Tests for rpc.proxy
import copy
from openstack.common import context
+from openstack.common import lockutils
from openstack.common.fixture import moxstubout
from openstack.common import rpc
from openstack.common.rpc import proxy
@@ -45,6 +46,7 @@ class RpcProxyTestCase(utils.BaseTestCase):
self.fake_kwargs = None
def _fake_rpc_method(*args, **kwargs):
+ rpc._check_for_lock()
self.fake_args = args
self.fake_kwargs = kwargs
if has_retval:
@@ -101,6 +103,17 @@ class RpcProxyTestCase(utils.BaseTestCase):
def test_multicall(self):
self._test_rpc_method('multicall', has_timeout=True, has_retval=True)
+ def test_multicall_with_lock_held(self):
+ self.config(debug=True)
+ self.assertFalse(rpc._check_for_lock())
+
+ @lockutils.synchronized('detecting', 'test-')
+ def f():
+ self.assertTrue(rpc._check_for_lock())
+ f()
+
+ self.assertFalse(rpc._check_for_lock())
+
def test_cast(self):
self._test_rpc_method('cast')