Merge "Set request context when polling vCenter tasks"
This commit is contained in:
commit
37bed90166
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue