Merge "Fix lock decorator usage for LVM and Generic drivers"

This commit is contained in:
Jenkins 2016-03-14 18:01:26 +00:00 committed by Gerrit Code Review
commit 3abd644ef2
4 changed files with 32 additions and 2 deletions

View File

@ -121,9 +121,12 @@ class NASHelperBase(object):
def nfs_synchronized(f):
def wrapped_func(self, *args, **kwargs):
key = "nfs-%s" % args[0]["public_address"]
key = "nfs-%s" % args[0].get("lock_name", args[0]["instance_id"])
@utils.synchronized(key)
# NOTE(vponomaryov): 'external' lock is required for DHSS=False
# mode of LVM and Generic drivers, that may have lots of
# driver instances on single host.
@utils.synchronized(key, external=True)
def source_func(self, *args, **kwargs):
return f(self, *args, **kwargs)

View File

@ -143,6 +143,7 @@ class LVMShareDriver(LVMMixin, driver.ShareDriver):
self.share_server = {
'public_address': self.configuration.lvm_share_export_ip,
'instance_id': self.backend_name,
'lock_name': 'manila_lvm',
}
def _ssh_exec_as_root(self, server, command, check_exit_code=True):

View File

@ -598,3 +598,28 @@ class CIFSHelperUserAccessTestCase(test.TestCase):
self.server_details,
self.share_name,
access_rules)
@ddt.ddt
class NFSSynchronizedTestCase(test.TestCase):
@helpers.nfs_synchronized
def wrapped_method(self, server, share_name):
return server['instance_id'] + share_name
@ddt.data(
({'lock_name': 'FOO', 'instance_id': 'QUUZ'}, 'nfs-FOO'),
({'instance_id': 'QUUZ'}, 'nfs-QUUZ'),
)
@ddt.unpack
def test_with_lock_name(self, server, expected_lock_name):
share_name = 'fake_share_name'
self.mock_object(
helpers.utils, 'synchronized',
mock.Mock(side_effect=helpers.utils.synchronized))
result = self.wrapped_method(server, share_name)
self.assertEqual(server['instance_id'] + share_name, result)
helpers.utils.synchronized.assert_called_once_with(
expected_lock_name, external=True)

View File

@ -105,6 +105,7 @@ class LVMShareDriverTestCase(test.TestCase):
self.server = {
'public_address': self.fake_conf.lvm_share_export_ip,
'instance_id': 'LVM',
'lock_name': 'manila_lvm',
}
# Used only to test compatibility with share manager