Merge "Amphora Create now fails when amphora goes into ERROR status"
This commit is contained in:
commit
6f786fdad7
@ -16,7 +16,6 @@
|
|||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from taskflow.patterns import graph_flow
|
from taskflow.patterns import graph_flow
|
||||||
from taskflow.patterns import linear_flow
|
from taskflow.patterns import linear_flow
|
||||||
from taskflow import retry
|
|
||||||
|
|
||||||
from octavia.common import constants
|
from octavia.common import constants
|
||||||
from octavia.controller.worker.tasks import amphora_driver_tasks
|
from octavia.controller.worker.tasks import amphora_driver_tasks
|
||||||
@ -64,17 +63,12 @@ class AmphoraFlows(object):
|
|||||||
provides=constants.COMPUTE_ID))
|
provides=constants.COMPUTE_ID))
|
||||||
create_amphora_flow.add(database_tasks.MarkAmphoraBootingInDB(
|
create_amphora_flow.add(database_tasks.MarkAmphoraBootingInDB(
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
||||||
wait_flow = linear_flow.Flow(constants.WAIT_FOR_AMPHORA,
|
create_amphora_flow.add(compute_tasks.ComputeWait(
|
||||||
retry=retry.Times(CONF.
|
|
||||||
controller_worker.
|
|
||||||
amp_active_retries))
|
|
||||||
wait_flow.add(compute_tasks.ComputeWait(
|
|
||||||
requires=constants.COMPUTE_ID,
|
requires=constants.COMPUTE_ID,
|
||||||
provides=constants.COMPUTE_OBJ))
|
provides=constants.COMPUTE_OBJ))
|
||||||
wait_flow.add(database_tasks.UpdateAmphoraInfo(
|
create_amphora_flow.add(database_tasks.UpdateAmphoraInfo(
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
||||||
provides=constants.AMPHORA))
|
provides=constants.AMPHORA))
|
||||||
create_amphora_flow.add(wait_flow)
|
|
||||||
create_amphora_flow.add(database_tasks.ReloadAmphora(
|
create_amphora_flow.add(database_tasks.ReloadAmphora(
|
||||||
requires=constants.AMPHORA_ID,
|
requires=constants.AMPHORA_ID,
|
||||||
provides=constants.AMPHORA))
|
provides=constants.AMPHORA))
|
||||||
@ -148,20 +142,14 @@ class AmphoraFlows(object):
|
|||||||
create_amp_for_lb_subflow.add(database_tasks.MarkAmphoraBootingInDB(
|
create_amp_for_lb_subflow.add(database_tasks.MarkAmphoraBootingInDB(
|
||||||
name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB,
|
name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB,
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
||||||
wait_flow = linear_flow.Flow(sf_name + '-' +
|
create_amp_for_lb_subflow.add(compute_tasks.ComputeWait(
|
||||||
constants.WAIT_FOR_AMPHORA,
|
|
||||||
retry=retry.Times(CONF.
|
|
||||||
controller_worker.
|
|
||||||
amp_active_retries))
|
|
||||||
wait_flow.add(compute_tasks.ComputeWait(
|
|
||||||
name=sf_name + '-' + constants.COMPUTE_WAIT,
|
name=sf_name + '-' + constants.COMPUTE_WAIT,
|
||||||
requires=constants.COMPUTE_ID,
|
requires=constants.COMPUTE_ID,
|
||||||
provides=constants.COMPUTE_OBJ))
|
provides=constants.COMPUTE_OBJ))
|
||||||
wait_flow.add(database_tasks.UpdateAmphoraInfo(
|
create_amp_for_lb_subflow.add(database_tasks.UpdateAmphoraInfo(
|
||||||
name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO,
|
name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO,
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
||||||
provides=constants.AMPHORA))
|
provides=constants.AMPHORA))
|
||||||
create_amp_for_lb_subflow.add(wait_flow)
|
|
||||||
create_amp_for_lb_subflow.add(amphora_driver_tasks.AmphoraFinalize(
|
create_amp_for_lb_subflow.add(amphora_driver_tasks.AmphoraFinalize(
|
||||||
name=sf_name + '-' + constants.AMPHORA_FINALIZE,
|
name=sf_name + '-' + constants.AMPHORA_FINALIZE,
|
||||||
requires=constants.AMPHORA))
|
requires=constants.AMPHORA))
|
||||||
@ -315,17 +303,12 @@ class AmphoraFlows(object):
|
|||||||
requires=(constants.AMPHORA_ID, constants.LOADBALANCER_ID)))
|
requires=(constants.AMPHORA_ID, constants.LOADBALANCER_ID)))
|
||||||
failover_amphora_flow.add(database_tasks.MarkAmphoraBootingInDB(
|
failover_amphora_flow.add(database_tasks.MarkAmphoraBootingInDB(
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_ID)))
|
||||||
wait_flow = linear_flow.Flow(constants.WAIT_FOR_AMPHORA,
|
failover_amphora_flow.add(compute_tasks.ComputeWait(
|
||||||
retry=retry.Times(CONF.
|
|
||||||
controller_worker.
|
|
||||||
amp_active_retries))
|
|
||||||
wait_flow.add(compute_tasks.ComputeWait(
|
|
||||||
requires=constants.COMPUTE_ID,
|
requires=constants.COMPUTE_ID,
|
||||||
provides=constants.COMPUTE_OBJ))
|
provides=constants.COMPUTE_OBJ))
|
||||||
wait_flow.add(database_tasks.UpdateAmphoraInfo(
|
failover_amphora_flow.add(database_tasks.UpdateAmphoraInfo(
|
||||||
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ),
|
||||||
provides=constants.AMPHORA))
|
provides=constants.AMPHORA))
|
||||||
failover_amphora_flow.add(wait_flow)
|
|
||||||
failover_amphora_flow.add(database_tasks.ReloadAmphora(
|
failover_amphora_flow.add(database_tasks.ReloadAmphora(
|
||||||
requires=constants.AMPHORA_ID,
|
requires=constants.AMPHORA_ID,
|
||||||
provides=constants.FAILOVER_AMPHORA))
|
provides=constants.FAILOVER_AMPHORA))
|
||||||
|
@ -153,9 +153,12 @@ class ComputeWait(BaseComputeTask):
|
|||||||
:raises: Generic exception if the amphora is not active
|
:raises: Generic exception if the amphora is not active
|
||||||
:returns: An amphora object
|
:returns: An amphora object
|
||||||
"""
|
"""
|
||||||
time.sleep(CONF.controller_worker.amp_active_wait_sec)
|
for i in range(CONF.controller_worker.amp_active_retries):
|
||||||
amp = self.compute.get_amphora(compute_id)
|
amp = self.compute.get_amphora(compute_id)
|
||||||
if amp.status == constants.ACTIVE:
|
if amp.status == constants.ACTIVE:
|
||||||
return amp
|
return amp
|
||||||
|
elif amp.status == constants.ERROR:
|
||||||
|
raise exceptions.ComputeBuildException()
|
||||||
|
time.sleep(CONF.controller_worker.amp_active_wait_sec)
|
||||||
|
|
||||||
raise exceptions.ComputeWaitTimeoutException()
|
raise exceptions.ComputeWaitTimeoutException()
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_config import fixture as oslo_fixture
|
from oslo_config import fixture as oslo_fixture
|
||||||
@ -255,8 +253,6 @@ class TestComputeTasks(base.TestCase):
|
|||||||
computewait = compute_tasks.ComputeWait()
|
computewait = compute_tasks.ComputeWait()
|
||||||
computewait.execute(COMPUTE_ID)
|
computewait.execute(COMPUTE_ID)
|
||||||
|
|
||||||
time.sleep.assert_called_once_with(AMP_WAIT)
|
|
||||||
|
|
||||||
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID)
|
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID)
|
||||||
|
|
||||||
_amphora_mock.status = constants.DELETED
|
_amphora_mock.status = constants.DELETED
|
||||||
@ -265,6 +261,27 @@ class TestComputeTasks(base.TestCase):
|
|||||||
computewait.execute,
|
computewait.execute,
|
||||||
_amphora_mock)
|
_amphora_mock)
|
||||||
|
|
||||||
|
@mock.patch('stevedore.driver.DriverManager.driver')
|
||||||
|
@mock.patch('time.sleep')
|
||||||
|
def test_compute_wait_error_status(self, mock_time_sleep, mock_driver):
|
||||||
|
|
||||||
|
_amphora_mock.compute_id = COMPUTE_ID
|
||||||
|
_amphora_mock.status = constants.ACTIVE
|
||||||
|
_amphora_mock.lb_network_ip = LB_NET_IP
|
||||||
|
|
||||||
|
mock_driver.get_amphora.return_value = _amphora_mock
|
||||||
|
|
||||||
|
computewait = compute_tasks.ComputeWait()
|
||||||
|
computewait.execute(COMPUTE_ID)
|
||||||
|
|
||||||
|
mock_driver.get_amphora.assert_called_once_with(COMPUTE_ID)
|
||||||
|
|
||||||
|
_amphora_mock.status = constants.ERROR
|
||||||
|
|
||||||
|
self.assertRaises(exceptions.ComputeBuildException,
|
||||||
|
computewait.execute,
|
||||||
|
_amphora_mock)
|
||||||
|
|
||||||
@mock.patch('stevedore.driver.DriverManager.driver')
|
@mock.patch('stevedore.driver.DriverManager.driver')
|
||||||
def test_delete_amphorae_on_load_balancer(self, mock_driver):
|
def test_delete_amphorae_on_load_balancer(self, mock_driver):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user