Browse Source

Fix pool delete race on load balancer cascade delete

In what appears to be a race condition, load balancer cascade delete can
fail while deleting numerous pools. The load balancer can still be
deleted with one or more follow-up cascade delete API calls but this is
suboptimal.

Per local testing, the ValueError exception is harmless so we can just
ignore it and continue the pool delete flow, with no orphan resources
left behind resulting from the exception skip.

Task: 41096
Story: 2008249

Change-Id: I9283d9804feb83a1d5a160da48da6146b19da88c
(cherry picked from commit 332791ee2b3cf29d01d94a9bb53fda4043303fd8)
changes/41/757841/2
Carlos Goncalves 3 months ago
parent
commit
11f9694453
1 changed files with 8 additions and 1 deletions
  1. +8
    -1
      octavia/common/data_models.py

+ 8
- 1
octavia/common/data_models.py View File

@ -16,11 +16,14 @@
import re
from oslo_log import log as logging
import six
from sqlalchemy.orm import collections
from octavia.common import constants
LOG = logging.getLogger(__name__)
class BaseDataModel(object):
def to_dict(self, calling_classes=None, recurse=False, **kwargs):
@ -326,7 +329,11 @@ class Pool(BaseDataModel):
break
for pool in self.load_balancer.pools:
if pool.id == self.id:
self.load_balancer.pools.remove(pool)
try:
self.load_balancer.pools.remove(pool)
except ValueError:
LOG.debug("Pool %s has already been removed from load "
"balancer pools list.", pool.id)
break
for l7policy in self.l7policies:
if l7policy.redirect_pool_id == self.id:


Loading…
Cancel
Save