From 6a6e0d243b234d5988d44c5eb98c05d4dd46d34d Mon Sep 17 00:00:00 2001 From: German Eichberger Date: Tue, 12 Mar 2019 15:26:42 -0700 Subject: [PATCH] Refactors LB delete flow and removes listener delete This refactors the method generating the lb delete flow and removes redundant code between cascade and the normal delete. It also removed the listener delete from the non-cascade flow thus speeding up the deletion. Change-Id: I6133e9b5f1c4c440a56bf75a1e3369424971f33a --- .../worker/flows/load_balancer_flows.py | 55 ++++++------------- .../worker/flows/test_load_balancer_flows.py | 3 +- ...delete-flow-refactor-cfb1bc621bbe92b4.yaml | 5 ++ 3 files changed, 22 insertions(+), 41 deletions(-) create mode 100644 releasenotes/notes/lb-delete-flow-refactor-cfb1bc621bbe92b4.yaml 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.