diff --git a/octavia/controller/worker/flows/load_balancer_flows.py b/octavia/controller/worker/flows/load_balancer_flows.py index a561e7a9a5..ff1b987c7c 100644 --- a/octavia/controller/worker/flows/load_balancer_flows.py +++ b/octavia/controller/worker/flows/load_balancer_flows.py @@ -227,32 +227,7 @@ class LoadBalancerFlows(object): :returns: The flow for deleting a load balancer """ - (listeners_delete, store) = self._get_delete_listeners_flow(lb) - - delete_LB_flow = linear_flow.Flow(constants.DELETE_LOADBALANCER_FLOW) - delete_LB_flow.add(lifecycle_tasks.LoadBalancerToErrorOnRevertTask( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(compute_tasks.NovaServerGroupDelete( - requires=constants.SERVER_GROUP_ID)) - delete_LB_flow.add(database_tasks.MarkLBAmphoraeHealthBusy( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(listeners_delete) - delete_LB_flow.add(network_tasks.UnplugVIP( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(network_tasks.DeallocateVIP( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(compute_tasks.DeleteAmphoraeOnLoadBalancer( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(database_tasks.MarkLBAmphoraeDeletedInDB( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(database_tasks.DisableLBAmphoraeHealthMonitoring( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(database_tasks.MarkLBDeletedInDB( - requires=constants.LOADBALANCER)) - delete_LB_flow.add(database_tasks.DecrementLoadBalancerQuota( - requires=constants.LOADBALANCER)) - - return (delete_LB_flow, store) + return self._get_delete_load_balancer_flow(lb, False) def _get_delete_pools_flow(self, lb): """Sets up an internal delete flow @@ -273,16 +248,8 @@ class LoadBalancerFlows(object): pool_name)) return (pools_delete_flow, store) - def get_cascade_delete_load_balancer_flow(self, lb): - """Creates a flow to delete a load balancer. - - :returns: The flow for deleting a load balancer - """ - - (listeners_delete, store) = self._get_delete_listeners_flow(lb) - (pools_delete, pool_store) = self._get_delete_pools_flow(lb) - store.update(pool_store) - + def _get_delete_load_balancer_flow(self, lb, cascade): + store = {} delete_LB_flow = linear_flow.Flow(constants.DELETE_LOADBALANCER_FLOW) delete_LB_flow.add(lifecycle_tasks.LoadBalancerToErrorOnRevertTask( requires=constants.LOADBALANCER)) @@ -290,8 +257,12 @@ class LoadBalancerFlows(object): requires=constants.SERVER_GROUP_ID)) delete_LB_flow.add(database_tasks.MarkLBAmphoraeHealthBusy( requires=constants.LOADBALANCER)) - delete_LB_flow.add(pools_delete) - delete_LB_flow.add(listeners_delete) + if cascade: + (listeners_delete, store) = self._get_delete_listeners_flow(lb) + (pools_delete, pool_store) = self._get_delete_pools_flow(lb) + store.update(pool_store) + delete_LB_flow.add(pools_delete) + delete_LB_flow.add(listeners_delete) delete_LB_flow.add(network_tasks.UnplugVIP( requires=constants.LOADBALANCER)) delete_LB_flow.add(network_tasks.DeallocateVIP( @@ -306,9 +277,15 @@ class LoadBalancerFlows(object): requires=constants.LOADBALANCER)) delete_LB_flow.add(database_tasks.DecrementLoadBalancerQuota( requires=constants.LOADBALANCER)) - return (delete_LB_flow, store) + def get_cascade_delete_load_balancer_flow(self, lb): + """Creates a flow to delete a load balancer. + + :returns: The flow for deleting a load balancer + """ + return self._get_delete_load_balancer_flow(lb, True) + def get_new_LB_networking_subflow(self): """Create a sub-flow to setup networking. diff --git a/octavia/tests/unit/controller/worker/flows/test_load_balancer_flows.py b/octavia/tests/unit/controller/worker/flows/test_load_balancer_flows.py index 8a8e82c9ab..5bc5128b31 100644 --- a/octavia/tests/unit/controller/worker/flows/test_load_balancer_flows.py +++ b/octavia/tests/unit/controller/worker/flows/test_load_balancer_flows.py @@ -90,13 +90,12 @@ class TestLoadBalancerFlows(base.TestCase): lb_flow, store = self.LBFlow.get_delete_load_balancer_flow(lb_mock) self.assertIsInstance(lb_flow, flow.Flow) - self.assertEqual({'listener_123': listener_mock}, store) self.assertIn(constants.LOADBALANCER, lb_flow.requires) self.assertIn(constants.SERVER_GROUP_ID, lb_flow.requires) self.assertEqual(0, len(lb_flow.provides)) - self.assertEqual(3, len(lb_flow.requires)) + self.assertEqual(2, len(lb_flow.requires)) def test_get_delete_load_balancer_flow_cascade(self, mock_get_net_driver): lb_mock = mock.Mock() diff --git a/releasenotes/notes/lb-delete-flow-refactor-cfb1bc621bbe92b4.yaml b/releasenotes/notes/lb-delete-flow-refactor-cfb1bc621bbe92b4.yaml new file mode 100644 index 0000000000..ac177d523b --- /dev/null +++ b/releasenotes/notes/lb-delete-flow-refactor-cfb1bc621bbe92b4.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Removes unnecessary listener delete from non-cascade delete load balancer + flow thus speeding up the loadbalancer delete.