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

View File

@ -95,7 +95,8 @@ class TestStore(base.StoreBaseTest,
test_store_capabilities.TestStoreCapabilitiesChecking):
@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."""
super(TestStore, self).setUp()
@ -437,21 +438,11 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession')
def test_reset_session(self, mock_api_session):
# Initialize session and reset mock before testing.
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)
@mock.patch.object(api, 'VMwareAPISession')
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.return_value = True
self.store._build_vim_cookie_header(True)
@ -459,9 +450,6 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession')
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.return_value = False
self.store._build_vim_cookie_header(True)
@ -469,9 +457,6 @@ class TestStore(base.StoreBaseTest,
@mock.patch.object(api, 'VMwareAPISession')
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.return_value = False
self.store._build_vim_cookie_header()