From 17ae2625da0487b7398b927e4e67a713b61569d1 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Wed, 21 Oct 2020 11:59:17 -0400 Subject: [PATCH] Handle listener not found during loadbalancer status update If a call to update loadbalancer status cannot find the specified listener, the API server will throw an exception: "Error while updating the load balancer status: 'NoneType' object has no attribute 'update'" Change ListenerRepository.update() to check the DB query returned a record, and if not, raise a NotFound exception back to the caller. Change-Id: I6693be3e2d2f0e34f19f07f55b0429f8fda317b2 Task: 41108 Story: 2008254 --- octavia/db/repositories.py | 3 +++ octavia/tests/functional/db/test_repositories.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/octavia/db/repositories.py b/octavia/db/repositories.py index e9e6ecd487..b1144d5e67 100644 --- a/octavia/db/repositories.py +++ b/octavia/db/repositories.py @@ -1148,6 +1148,9 @@ class ListenerRepository(BaseRepository): resource.tags = tags listener_db = session.query(self.model_class).filter_by( id=id).first() + if not listener_db: + raise exceptions.NotFound( + resource=data_models.Listener._name(), id=id) # Verify any newly specified default_pool_id exists default_pool_id = model_kwargs.get('default_pool_id') if default_pool_id: diff --git a/octavia/tests/functional/db/test_repositories.py b/octavia/tests/functional/db/test_repositories.py index ba60a2e974..335e9024fe 100644 --- a/octavia/tests/functional/db/test_repositories.py +++ b/octavia/tests/functional/db/test_repositories.py @@ -2952,6 +2952,10 @@ class TestListenerRepositoryTest(BaseRepositoryTest): new_listener = self.listener_repo.get(self.session, id=listener.id) self.assertIn(container1_dm, new_listener.sni_containers) + def test_update_bad_id(self): + self.assertRaises(exceptions.NotFound, self.listener_repo.update, + self.session, id=uuidutils.generate_uuid()) + def test_delete(self): listener = self.create_listener(self.FAKE_UUID_1, 80) self.listener_repo.delete(self.session, id=listener.id)