Merge "Fix race condition in cascade delete" into stable/2024.1

This commit is contained in:
Zuul
2025-10-14 02:22:49 +00:00
committed by Gerrit Code Review
3 changed files with 17 additions and 6 deletions

View File

@@ -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,

View File

@@ -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.

View File

@@ -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.