diff --git a/octavia/db/repositories.py b/octavia/db/repositories.py index 29af916dfa..bbd4577c00 100644 --- a/octavia/db/repositories.py +++ b/octavia/db/repositories.py @@ -30,6 +30,7 @@ from oslo_utils import uuidutils from sqlalchemy.orm import joinedload from sqlalchemy.orm import noload from sqlalchemy.orm import subqueryload +from sqlalchemy.sql.expression import false from sqlalchemy.sql import func from octavia.common import constants as consts @@ -1417,9 +1418,12 @@ class AmphoraRepository(BaseRepository): seconds=expired_seconds) with session.begin(subtransactions=True): - amp = session.query(self.model_class).with_for_update().filter_by( - cert_busy=False).filter( - self.model_class.cert_expiration < expired_date).first() + amp = session.query(self.model_class).with_for_update().filter( + self.model_class.status.notin_( + [consts.DELETED, consts.PENDING_DELETE]), + self.model_class.cert_busy == false(), + self.model_class.cert_expiration < expired_date + ).first() if amp is None: return None diff --git a/octavia/tests/functional/db/test_repositories.py b/octavia/tests/functional/db/test_repositories.py index 6c5289d4fc..ba60a2e974 100644 --- a/octavia/tests/functional/db/test_repositories.py +++ b/octavia/tests/functional/db/test_repositories.py @@ -3999,6 +3999,18 @@ class AmphoraRepositoryTest(BaseRepositoryTest): self.assertEqual(cert_expired_amphora.cert_expiration, expiration) self.assertEqual(cert_expired_amphora.id, amphora2.id) + def test_get_cert_expired_amphora_deleted(self): + amphora = self.create_amphora(self.FAKE_UUID_3) + expiration = datetime.datetime.utcnow() + datetime.timedelta(seconds=1) + self.amphora_repo.update(self.session, amphora.id, + status=constants.DELETED, + cert_expiration=expiration) + + cert_expired_amphora = self.amphora_repo.get_cert_expiring_amphora( + self.session) + + self.assertIsNone(cert_expired_amphora) + def test_get_lb_for_health_update(self): amphora1 = self.create_amphora(self.FAKE_UUID_1) amphora2 = self.create_amphora(self.FAKE_UUID_3)