diff --git a/octavia/controller/worker/v2/flows/listener_flows.py b/octavia/controller/worker/v2/flows/listener_flows.py index a25904e090..08198bfd4e 100644 --- a/octavia/controller/worker/v2/flows/listener_flows.py +++ b/octavia/controller/worker/v2/flows/listener_flows.py @@ -113,9 +113,6 @@ class ListenerFlows(object): delete_listener_flow = linear_flow.Flow( constants.DELETE_LISTENER_FLOW + '-' + listener_id) # Should cascade delete all L7 policies - delete_listener_flow.add(network_tasks.UpdateVIPForDelete( - name='delete_update_vip_' + listener_id, - requires=constants.LOADBALANCER_ID)) delete_listener_flow.add(database_tasks.DeleteListenerInDB( name='delete_listener_in_db_' + listener_id, requires=constants.LISTENER, diff --git a/octavia/controller/worker/v2/flows/load_balancer_flows.py b/octavia/controller/worker/v2/flows/load_balancer_flows.py index eecd5d31cb..5d604ac5ba 100644 --- a/octavia/controller/worker/v2/flows/load_balancer_flows.py +++ b/octavia/controller/worker/v2/flows/load_balancer_flows.py @@ -292,12 +292,19 @@ class LoadBalancerFlows(object): :param listeners: A list of listener dicts :return: The flow for the deletion """ - listeners_delete_flow = unordered_flow.Flow('listeners_delete_flow') + delete_listeners_flow = linear_flow.Flow('delete_listeners_flow') + delete_listeners_flow.add(network_tasks.UpdateVIPForDelete( + name='delete_update_vip', + requires=constants.LOADBALANCER_ID)) + + delete_internal_flow = unordered_flow.Flow('delete_listeners_flows') for listener in listeners: - listeners_delete_flow.add( + delete_internal_flow.add( self.listener_flows.get_delete_listener_internal_flow( listener, flavor_dict=flavor_dict)) - return listeners_delete_flow + + delete_listeners_flow.add(delete_internal_flow) + return delete_listeners_flow def get_delete_load_balancer_flow(self, lb): """Creates a flow to delete a load balancer. diff --git a/releasenotes/notes/fix-potential-race-conditions-in-cascade-delete-1e100213445a17ec.yaml b/releasenotes/notes/fix-potential-race-conditions-in-cascade-delete-1e100213445a17ec.yaml new file mode 100644 index 0000000000..c331511da2 --- /dev/null +++ b/releasenotes/notes/fix-potential-race-conditions-in-cascade-delete-1e100213445a17ec.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fix a potential race condition during the cascade deletion of load + balancers. When deleting a load balancer with multiple listeners, the + security groups of the VIP port may have been updated many times + concurrently, creating a race condition.