Fix batch member create for v1 amphora driver
A previous patch[1] missed batch_member_update when adding database
repository "get" method retries for new object creation actions.
This patch fixes batch member create to retry the database get call
when new members are being created via batch member update.
This issue only impacts the v1 amphora driver as the v2 driver
does not need to get these objects from the database.
Story: 2007581
Task: 39503
[1] 48e85569f7
Change-Id: Ia3476ab7b24dc3fd6e29ff2abe6eb6bacd9908ed
changes/70/733670/2
parent
0321c28588
commit
630a4e6a3c
|
@ -483,12 +483,23 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
|
|||
log=LOG):
|
||||
delete_member_tf.run()
|
||||
|
||||
@tenacity.retry(
|
||||
retry=tenacity.retry_if_exception_type(db_exceptions.NoResultFound),
|
||||
wait=tenacity.wait_incrementing(
|
||||
RETRY_INITIAL_DELAY, RETRY_BACKOFF, RETRY_MAX),
|
||||
stop=tenacity.stop_after_attempt(RETRY_ATTEMPTS))
|
||||
def batch_update_members(self, old_member_ids, new_member_ids,
|
||||
updated_members):
|
||||
old_members = [self._member_repo.get(db_apis.get_session(), id=mid)
|
||||
for mid in old_member_ids]
|
||||
new_members = [self._member_repo.get(db_apis.get_session(), id=mid)
|
||||
for mid in new_member_ids]
|
||||
# The API may not have commited all of the new member records yet.
|
||||
# Make sure we retry looking them up.
|
||||
if None in new_members or len(new_members) != len(new_member_ids):
|
||||
LOG.warning('Failed to fetch one of the new members from DB. '
|
||||
'Retrying for up to 60 seconds.')
|
||||
raise db_exceptions.NoResultFound
|
||||
old_members = [self._member_repo.get(db_apis.get_session(), id=mid)
|
||||
for mid in old_member_ids]
|
||||
updated_members = [
|
||||
(self._member_repo.get(db_apis.get_session(), id=m.get('id')), m)
|
||||
for m in updated_members]
|
||||
|
|
|
@ -884,6 +884,8 @@ class TestControllerWorker(base.TestCase):
|
|||
mock_amp_repo_get):
|
||||
|
||||
_flow_mock.reset_mock()
|
||||
mock_member_repo_get.side_effect = [None, _member_mock,
|
||||
_member_mock, _member_mock]
|
||||
mock_get_az_metadata_dict.return_value = {}
|
||||
cw = controller_worker.ControllerWorker()
|
||||
cw.batch_update_members([9], [11], [MEMBER_UPDATE_DICT])
|
||||
|
@ -898,6 +900,7 @@ class TestControllerWorker(base.TestCase):
|
|||
constants.AVAILABILITY_ZONE: {}}))
|
||||
|
||||
_flow_mock.run.assert_called_once_with()
|
||||
self.assertEqual(4, mock_member_repo_get.call_count)
|
||||
|
||||
@mock.patch('octavia.controller.worker.v1.flows.'
|
||||
'pool_flows.PoolFlows.get_create_pool_flow',
|
||||
|
|
Loading…
Reference in New Issue