Merge "Set request context when polling vCenter tasks"

This commit is contained in:
Zuul 2018-08-23 20:43:44 +00:00 committed by Gerrit Code Review
commit 37bed90166
5 changed files with 25 additions and 6 deletions

View File

@ -29,6 +29,7 @@ netifaces==0.10.4
openstackdocstheme==1.18.1 openstackdocstheme==1.18.1
oslo.concurrency==3.26.0 oslo.concurrency==3.26.0
oslo.config==5.2.0 oslo.config==5.2.0
oslo.context==2.19.2
oslo.i18n==3.15.3 oslo.i18n==3.15.3
oslo.utils==3.33.0 oslo.utils==3.33.0
pbr==2.0.0 pbr==2.0.0

View File

@ -24,6 +24,7 @@ in case of connection problems or server API call overload.
import logging import logging
from oslo_concurrency import lockutils from oslo_concurrency import lockutils
from oslo_context import context
from oslo_utils import excutils from oslo_utils import excutils
from oslo_utils import reflection from oslo_utils import reflection
import six import six
@ -390,12 +391,13 @@ class VMwareAPISession(object):
:raises: VimException, VimFaultException, VimAttributeException, :raises: VimException, VimFaultException, VimAttributeException,
VimSessionOverLoadException, VimConnectionException VimSessionOverLoadException, VimConnectionException
""" """
loop = loopingcall.FixedIntervalLoopingCall(self._poll_task, task) ctx = context.get_current()
loop = loopingcall.FixedIntervalLoopingCall(self._poll_task, task, ctx)
evt = loop.start(self._task_poll_interval) evt = loop.start(self._task_poll_interval)
LOG.debug("Waiting for the task: %s to complete.", task) LOG.debug("Waiting for the task: %s to complete.", task)
return evt.wait() return evt.wait()
def _poll_task(self, task): def _poll_task(self, task, ctx):
"""Poll the given task until completion. """Poll the given task until completion.
If the task completes successfully, the method returns the task info If the task completes successfully, the method returns the task info
@ -403,7 +405,9 @@ class VMwareAPISession(object):
exception is set in the event. exception is set in the event.
:param task: managed object reference of the task :param task: managed object reference of the task
:param ctx: request context for the corresponding task
""" """
ctx.update_store()
try: try:
# we poll tasks too often, so skip logging the opID as it generates # we poll tasks too often, so skip logging the opID as it generates
# too much noise in the logs # too much noise in the logs

View File

@ -24,6 +24,7 @@ import mock
import six import six
import suds import suds
from oslo_context import context
from oslo_vmware import api from oslo_vmware import api
from oslo_vmware import exceptions from oslo_vmware import exceptions
from oslo_vmware import pbm from oslo_vmware import pbm
@ -393,7 +394,10 @@ class VMwareAPISessionTest(base.TestCase):
'api') 'api')
self.assertEqual(fault_list, ex.fault_list) self.assertEqual(fault_list, ex.fault_list)
def test_wait_for_task(self): @mock.patch.object(context, 'get_current')
def test_wait_for_task(self, mock_curr_ctx):
ctx = mock.Mock()
mock_curr_ctx.return_value = ctx
api_session = self._create_api_session(True) api_session = self._create_api_session(True)
task_info_list = [('queued', 0), ('running', 40), ('success', 100)] task_info_list = [('queued', 0), ('running', 40), ('success', 100)]
task_info_list_size = len(task_info_list) task_info_list_size = len(task_info_list)
@ -420,8 +424,11 @@ class VMwareAPISessionTest(base.TestCase):
skip_op_id=True) skip_op_id=True)
self.assertEqual(task_info_list_size, self.assertEqual(task_info_list_size,
api_session.invoke_api.call_count) api_session.invoke_api.call_count)
mock_curr_ctx.assert_called_once()
self.assertEqual(3, ctx.update_store.call_count)
def test_wait_for_task_with_error_state(self): @mock.patch.object(context, 'get_current')
def test_wait_for_task_with_error_state(self, mock_curr_ctx):
api_session = self._create_api_session(True) api_session = self._create_api_session(True)
task_info_list = [('queued', 0), ('running', 40), ('error', -1)] task_info_list = [('queued', 0), ('running', 40), ('error', -1)]
task_info_list_size = len(task_info_list) task_info_list_size = len(task_info_list)
@ -446,8 +453,10 @@ class VMwareAPISessionTest(base.TestCase):
skip_op_id=True) skip_op_id=True)
self.assertEqual(task_info_list_size, self.assertEqual(task_info_list_size,
api_session.invoke_api.call_count) api_session.invoke_api.call_count)
mock_curr_ctx.assert_called_once()
def test_wait_for_task_with_invoke_api_exception(self): @mock.patch.object(context, 'get_current')
def test_wait_for_task_with_invoke_api_exception(self, mock_curr_ctx):
api_session = self._create_api_session(True) api_session = self._create_api_session(True)
api_session.invoke_api = mock.Mock( api_session.invoke_api = mock.Mock(
side_effect=exceptions.VimException(None)) side_effect=exceptions.VimException(None))
@ -461,6 +470,7 @@ class VMwareAPISessionTest(base.TestCase):
api_session.vim, task, api_session.vim, task,
'info', 'info',
skip_op_id=True) skip_op_id=True)
mock_curr_ctx.assert_called_once()
def test_wait_for_lease_ready(self): def test_wait_for_lease_ready(self):
api_session = self._create_api_session(True) api_session = self._create_api_session(True)
@ -551,9 +561,11 @@ class VMwareAPISessionTest(base.TestCase):
): ):
fake_task = mock.Mock() fake_task = mock.Mock()
fake_task.value = 'task-1' fake_task.value = 'task-1'
ctx = mock.Mock()
self.assertRaises(expected_exception, self.assertRaises(expected_exception,
api_session._poll_task, api_session._poll_task,
fake_task) fake_task,
ctx)
def test_poll_task_well_known_exceptions(self): def test_poll_task_well_known_exceptions(self):
for k, v in six.iteritems(exceptions._fault_classes_registry): for k, v in six.iteritems(exceptions._fault_classes_registry):

View File

@ -20,3 +20,4 @@ eventlet!=0.18.3,!=0.20.1,>=0.18.2 # MIT
requests>=2.14.2 # Apache-2.0 requests>=2.14.2 # Apache-2.0
urllib3>=1.21.1 # MIT urllib3>=1.21.1 # MIT
oslo.concurrency>=3.26.0 # Apache-2.0 oslo.concurrency>=3.26.0 # Apache-2.0
oslo.context>=2.19.2 # Apache-2.0

View File

@ -22,3 +22,4 @@ reno>=2.5.0 # Apache-2.0
bandit>=1.1.0 # Apache-2.0 bandit>=1.1.0 # Apache-2.0
ddt>=1.0.1 # MIT ddt>=1.0.1 # MIT
oslo.context>=2.19.2 # Apache-2.0