Merge "Fix race condition in cascade delete" into stable/2025.1
This commit is contained in:
@@ -113,9 +113,6 @@ class ListenerFlows:
|
|||||||
delete_listener_flow = linear_flow.Flow(
|
delete_listener_flow = linear_flow.Flow(
|
||||||
constants.DELETE_LISTENER_FLOW + '-' + listener_id)
|
constants.DELETE_LISTENER_FLOW + '-' + listener_id)
|
||||||
# Should cascade delete all L7 policies
|
# 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(
|
delete_listener_flow.add(database_tasks.DeleteListenerInDB(
|
||||||
name='delete_listener_in_db_' + listener_id,
|
name='delete_listener_in_db_' + listener_id,
|
||||||
requires=constants.LISTENER,
|
requires=constants.LISTENER,
|
||||||
|
|||||||
@@ -295,12 +295,19 @@ class LoadBalancerFlows:
|
|||||||
:param listeners: A list of listener dicts
|
:param listeners: A list of listener dicts
|
||||||
:return: The flow for the deletion
|
: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:
|
for listener in listeners:
|
||||||
listeners_delete_flow.add(
|
delete_internal_flow.add(
|
||||||
self.listener_flows.get_delete_listener_internal_flow(
|
self.listener_flows.get_delete_listener_internal_flow(
|
||||||
listener, flavor_dict=flavor_dict))
|
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):
|
def get_delete_load_balancer_flow(self, lb):
|
||||||
"""Creates a flow to delete a load balancer.
|
"""Creates a flow to delete a load balancer.
|
||||||
|
|||||||
@@ -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.
|
||||||
Reference in New Issue
Block a user