From 1ae54e331e8ed3c332eabbe0bc650615ae809eb5 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Thu, 9 Feb 2023 08:25:17 -0800 Subject: [PATCH] Fix retry_bad_request() context manager When I converted this from a decorator to a context manager, I didn't remove the fn parameter, nor was it even doing the thing I expected on the second and later iterations because it doesn't fail in my local environment. Apparently we're not running this test in the tempest gate, so this adds to experimental so we can at least run it on command. Change-Id: Ia72b50f7f7bf64fe0ddd3f1a415b1807ff264b66 --- tempest/api/image/v2/test_images.py | 41 +++++++++++++++-------------- zuul.d/project.yaml | 2 ++ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py index e8734e0723..1d05f1366a 100644 --- a/tempest/api/image/v2/test_images.py +++ b/tempest/api/image/v2/test_images.py @@ -14,7 +14,6 @@ # License for the specific language governing permissions and limitations # under the License. -import contextlib import io import random import time @@ -29,19 +28,7 @@ from tempest.lib import exceptions as lib_exc CONF = config.CONF LOG = logging.getLogger(__name__) - - -@contextlib.contextmanager -def retry_bad_request(fn): - retries = 3 - for i in range(retries): - try: - yield - except lib_exc.BadRequest: - if i < retries: - time.sleep(1) - else: - raise +BAD_REQUEST_RETRIES = 3 class ImportImagesTest(base.BaseV2ImageTest): @@ -837,9 +824,16 @@ class ImageLocationsTest(base.BaseV2ImageTest): # HTTP, it will return BadRequest. Because this can be transient in # CI, we try this a few times before we agree that it has failed # for a reason worthy of failing the test. - with retry_bad_request(): - self.client.update_image(image['id'], [ - dict(add='/locations/-', value=new_loc)]) + for i in range(BAD_REQUEST_RETRIES): + try: + self.client.update_image(image['id'], [ + dict(add='/locations/-', value=new_loc)]) + break + except lib_exc.BadRequest: + if i + 1 == BAD_REQUEST_RETRIES: + raise + else: + time.sleep(1) # The image should now be active, with one location that looks # like we expect @@ -874,9 +868,16 @@ class ImageLocationsTest(base.BaseV2ImageTest): # HTTP, it will return BadRequest. Because this can be transient in # CI, we try this a few times before we agree that it has failed # for a reason worthy of failing the test. - with retry_bad_request(): - self.client.update_image(image['id'], [ - dict(add='/locations/-', value=new_loc)]) + for i in range(BAD_REQUEST_RETRIES): + try: + self.client.update_image(image['id'], [ + dict(add='/locations/-', value=new_loc)]) + break + except lib_exc.BadRequest: + if i + 1 == BAD_REQUEST_RETRIES: + raise + else: + time.sleep(1) # The image should now have two locations and the last one # (locations are ordered) should have the new URL. diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml index 966cc9a252..3497cd89ca 100644 --- a/zuul.d/project.yaml +++ b/zuul.d/project.yaml @@ -159,6 +159,8 @@ experimental: jobs: - nova-multi-cell + - nova-ceph-multistore: + irrelevant-files: *tempest-irrelevant-files - tempest-with-latest-microversion - tempest-stestr-master - tempest-cinder-v2-api: