Initialize vmware session during store creation

The vmware store instance is reusable, there is no need to
keep the vmware session object in the class data. This was earlier
done when multiple store instances shared the session object.

Change-Id: I856f7c743537326acc2a2bc9fed78ef473775f24
This commit is contained in:
Sabari Kumar Murugesan
2015-03-13 15:20:10 -07:00
parent 161e5e15e2
commit 4fba47890d
2 changed files with 10 additions and 29 deletions

View File

@@ -268,21 +268,16 @@ class Store(glance_store.Store):
capabilities.BitMasks.DRIVER_REUSABLE) capabilities.BitMasks.DRIVER_REUSABLE)
OPTIONS = _VMWARE_OPTS OPTIONS = _VMWARE_OPTS
WRITE_CHUNKSIZE = units.Mi WRITE_CHUNKSIZE = units.Mi
# FIXME(arnaud): re-visit this code once the store API is cleaned up.
_VMW_SESSION = None
def __init__(self, conf): def __init__(self, conf):
super(Store, self).__init__(conf) super(Store, self).__init__(conf)
self.datastores = {} self.datastores = {}
def reset_session(self, force=False): def reset_session(self):
if Store._VMW_SESSION is None or force: self.session = api.VMwareAPISession(
Store._VMW_SESSION = api.VMwareAPISession( self.server_host, self.server_username, self.server_password,
self.server_host, self.server_username, self.server_password, self.api_retry_count, self.tpoll_interval)
self.api_retry_count, self.tpoll_interval) return self.session
return Store._VMW_SESSION
session = property(reset_session)
def get_schemes(self): def get_schemes(self):
return (STORE_SCHEME,) return (STORE_SCHEME,)
@@ -325,6 +320,7 @@ class Store(glance_store.Store):
self.api_retry_count = self.conf.glance_store.vmware_api_retry_count self.api_retry_count = self.conf.glance_store.vmware_api_retry_count
self.tpoll_interval = self.conf.glance_store.vmware_task_poll_interval self.tpoll_interval = self.conf.glance_store.vmware_task_poll_interval
self.api_insecure = self.conf.glance_store.vmware_api_insecure self.api_insecure = self.conf.glance_store.vmware_api_insecure
self.session = self.reset_session()
super(Store, self).configure() super(Store, self).configure()
def _get_datacenter(self, datacenter_path): def _get_datacenter(self, datacenter_path):
@@ -455,7 +451,7 @@ class Store(glance_store.Store):
def _build_vim_cookie_header(self, verify_session=False): def _build_vim_cookie_header(self, verify_session=False):
"""Build ESX host session cookie header.""" """Build ESX host session cookie header."""
if verify_session and not self.session.is_current_session_active(): if verify_session and not self.session.is_current_session_active():
self.reset_session(force=True) self.reset_session()
vim_cookies = self.session.vim.client.options.transport.cookiejar vim_cookies = self.session.vim.client.options.transport.cookiejar
if len(list(vim_cookies)) > 0: if len(list(vim_cookies)) > 0:
cookie = list(vim_cookies)[0] cookie = list(vim_cookies)[0]
@@ -620,7 +616,7 @@ class Store(glance_store.Store):
location.image_id}) location.image_id})
if resp.status >= 400: if resp.status >= 400:
if resp.status == httplib.UNAUTHORIZED: if resp.status == httplib.UNAUTHORIZED:
self.reset_session(force=True) self.reset_session()
continue continue
if resp.status == httplib.NOT_FOUND: if resp.status == httplib.NOT_FOUND:
reason = _('VMware datastore could not find image at URI.') reason = _('VMware datastore could not find image at URI.')

View File

@@ -95,7 +95,8 @@ class TestStore(base.StoreBaseTest,
test_store_capabilities.TestStoreCapabilitiesChecking): test_store_capabilities.TestStoreCapabilitiesChecking):
@mock.patch.object(vm_store.Store, '_get_datastore') @mock.patch.object(vm_store.Store, '_get_datastore')
def setUp(self, mock_get_datastore): @mock.patch('oslo_vmware.api.VMwareAPISession')
def setUp(self, mock_api_session, mock_get_datastore):
"""Establish a clean test environment.""" """Establish a clean test environment."""
super(TestStore, self).setUp() super(TestStore, self).setUp()
@@ -437,21 +438,11 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession') @mock.patch.object(api, 'VMwareAPISession')
def test_reset_session(self, mock_api_session): def test_reset_session(self, mock_api_session):
# Initialize session and reset mock before testing.
self.store.reset_session() self.store.reset_session()
mock_api_session.reset_mock()
self.store.reset_session(force=False)
self.assertFalse(mock_api_session.called)
self.store.reset_session()
self.assertFalse(mock_api_session.called)
self.store.reset_session(force=True)
self.assertTrue(mock_api_session.called) self.assertTrue(mock_api_session.called)
@mock.patch.object(api, 'VMwareAPISession') @mock.patch.object(api, 'VMwareAPISession')
def test_build_vim_cookie_header_active(self, mock_api_session): def test_build_vim_cookie_header_active(self, mock_api_session):
# Initialize session and reset mock before testing.
self.store.reset_session()
mock_api_session.reset_mock()
self.store.session.is_current_session_active = mock.Mock() self.store.session.is_current_session_active = mock.Mock()
self.store.session.is_current_session_active.return_value = True self.store.session.is_current_session_active.return_value = True
self.store._build_vim_cookie_header(True) self.store._build_vim_cookie_header(True)
@@ -459,9 +450,6 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession') @mock.patch.object(api, 'VMwareAPISession')
def test_build_vim_cookie_header_expired(self, mock_api_session): def test_build_vim_cookie_header_expired(self, mock_api_session):
# Initialize session and reset mock before testing.
self.store.reset_session()
mock_api_session.reset_mock()
self.store.session.is_current_session_active = mock.Mock() self.store.session.is_current_session_active = mock.Mock()
self.store.session.is_current_session_active.return_value = False self.store.session.is_current_session_active.return_value = False
self.store._build_vim_cookie_header(True) self.store._build_vim_cookie_header(True)
@@ -469,9 +457,6 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession') @mock.patch.object(api, 'VMwareAPISession')
def test_build_vim_cookie_header_expired_noverify(self, mock_api_session): def test_build_vim_cookie_header_expired_noverify(self, mock_api_session):
# Initialize session and reset mock before testing.
self.store.reset_session()
mock_api_session.reset_mock()
self.store.session.is_current_session_active = mock.Mock() self.store.session.is_current_session_active = mock.Mock()
self.store.session.is_current_session_active.return_value = False self.store.session.is_current_session_active.return_value = False
self.store._build_vim_cookie_header() self.store._build_vim_cookie_header()