diff -Nru octavia-6.0.0/debian/changelog octavia-6.0.0/debian/changelog --- octavia-6.0.0/debian/changelog 2020-05-14 18:43:41.000000000 +0000 +++ octavia-6.0.0/debian/changelog 2020-07-08 04:13:39.000000000 +0000 @@ -1,3 +1,10 @@ +octavia (6.0.0-0ubuntu0.20.04.2) focal; urgency=medium + + * Fix batch creation of new members failure due to timeouts (LP: #1882657) + - d/p/fix-batch-member-create-for-v1-amphora-driver.patch + + -- Hemanth Nakkina Wed, 08 Jul 2020 09:43:39 +0530 + octavia (6.0.0-0ubuntu0.20.04.1) focal; urgency=medium * New upstream release for OpenStack Ussuri (LP: #1877642). diff -Nru octavia-6.0.0/debian/patches/fix-batch-member-create-for-v1-amphora-driver.patch octavia-6.0.0/debian/patches/fix-batch-member-create-for-v1-amphora-driver.patch --- octavia-6.0.0/debian/patches/fix-batch-member-create-for-v1-amphora-driver.patch 1970-01-01 00:00:00.000000000 +0000 +++ octavia-6.0.0/debian/patches/fix-batch-member-create-for-v1-amphora-driver.patch 2020-07-08 04:13:39.000000000 +0000 @@ -0,0 +1,78 @@ +From bd2987ba234494aacff6268a14dd2e9ececa0108 Mon Sep 17 00:00:00 2001 +From: Michael Johnson +Date: Thu, 4 Jun 2020 10:45:35 -0700 +Subject: [PATCH] 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] https://github.com/openstack/octavia/commit/48e85569f7e43e3dd5f09fd1ef4cb165526a92cd + +Change-Id: Ia3476ab7b24dc3fd6e29ff2abe6eb6bacd9908ed +(cherry picked from commit 630a4e6a3cb60a8edeb4d8ad4a9cd7b31b42469a) +--- + octavia/controller/worker/v1/controller_worker.py | 15 +++++++++++++-- + .../worker/v1/test_controller_worker.py | 3 +++ + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/octavia/controller/worker/v1/controller_worker.py b/octavia/controller/worker/v1/controller_worker.py +index a33a43c0..3ecb336f 100644 +--- a/octavia/controller/worker/v1/controller_worker.py ++++ b/octavia/controller/worker/v1/controller_worker.py +@@ -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] +diff --git a/octavia/tests/unit/controller/worker/v1/test_controller_worker.py b/octavia/tests/unit/controller/worker/v1/test_controller_worker.py +index ec872ffa..6d79ae54 100644 +--- a/octavia/tests/unit/controller/worker/v1/test_controller_worker.py ++++ b/octavia/tests/unit/controller/worker/v1/test_controller_worker.py +@@ -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', +-- +2.17.1 + diff -Nru octavia-6.0.0/debian/patches/series octavia-6.0.0/debian/patches/series --- octavia-6.0.0/debian/patches/series 2020-05-14 18:43:41.000000000 +0000 +++ octavia-6.0.0/debian/patches/series 2020-07-08 04:13:39.000000000 +0000 @@ -1 +1,2 @@ disable-sphinxcontrib.rsvgconverter.patch +fix-batch-member-create-for-v1-amphora-driver.patch