Return DELETED status when deleting a nonexistent member

This patch changes the provisioning_status returned to octavia-api
for the deletion operation of a member that doesn't exist associated
with a pool. Instead of returning ERROR for not having located it,
we will return DELETED to sync OVN DB with  Octavia DB. This way,
the user won't be able to perform unnecessary UPDATE/DELETE
operations on this member in the future.

Closes-Bug: #2065566
Change-Id: Id355fcb0ad5b66bf646be2e4ccbdacf1b40c1d7c
This commit is contained in:
Fernando Royo
2024-05-13 10:35:11 +02:00
parent f034bab144
commit aeac73a066
2 changed files with 4 additions and 4 deletions

View File

@@ -2185,9 +2185,7 @@ class OvnProviderHelper():
return pool_status
else:
msg = f"Member {member[constants.ID]} not found in the pool"
raise driver_exceptions.DriverError(
user_fault_string=msg,
operator_fault_string=msg)
LOG.warning(msg)
def _members_in_subnet(self, ovn_lb, subnet_id):
for key, value in ovn_lb.external_ids.items():

View File

@@ -2212,7 +2212,7 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
self.assertEqual(status['pools'][0]['provisioning_status'],
constants.ACTIVE)
self.assertEqual(status['members'][0]['provisioning_status'],
constants.ERROR)
constants.DELETED)
@mock.patch.object(ovn_helper.OvnProviderHelper, '_remove_member')
def test_member_delete_exception(self, mock_remove_member):
@@ -2220,6 +2220,8 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
status = self.helper.member_delete(self.member)
self.assertEqual(status['pools'][0]['provisioning_status'],
constants.ACTIVE)
self.assertEqual(status['members'][0]['provisioning_status'],
constants.ERROR)
def test_member_delete_disabled_lb(self):
self.helper._find_ovn_lb_with_pool_key.side_effect = [