From 661871e2ed7486804248ee21025f661eb9c71f27 Mon Sep 17 00:00:00 2001 From: Carl Csaposs Date: Wed, 8 May 2024 09:50:08 +0200 Subject: [PATCH 1/4] patch(pytest_plugins/microceph): Add retry if microceph not ready Fixes #171 (on self-hosted runners, microceph is not ready before we create bucket) --- .../microceph/pytest_microceph/_plugin.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py index 5a060a59..14f72689 100644 --- a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py +++ b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py @@ -3,8 +3,10 @@ import logging import os import subprocess +import time import boto3 +import botocore.exceptions import pytest @@ -43,12 +45,23 @@ def microceph(): key_id = key["access_key"] secret_key = key["secret_key"] logger.info("Creating microceph bucket") - boto3.client( - "s3", - endpoint_url="http://localhost", - aws_access_key_id=key_id, - aws_secret_access_key=secret_key, - ).create_bucket(Bucket=_BUCKET) + for attempt in range(3): + try: + boto3.client( + "s3", + endpoint_url="http://localhost", + aws_access_key_id=key_id, + aws_secret_access_key=secret_key, + ).create_bucket(Bucket=_BUCKET) + except botocore.exceptions.EndpointConnectionError as exception: + if attempt == 2: + raise + logger.debug( + "Unable to connect to microceph via S3. Retrying", exc_info=exception + ) + time.sleep(1) + else: + break logger.info("Set up microceph") return ConnectionInformation(key_id, secret_key, _BUCKET) From e42d858ca2a1d15cfd5a494156fb0a6294ec0800 Mon Sep 17 00:00:00 2001 From: Carl Csaposs Date: Wed, 8 May 2024 10:49:18 +0200 Subject: [PATCH 2/4] remove exc_info --- python/pytest_plugins/microceph/pytest_microceph/_plugin.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py index 14f72689..3034dc15 100644 --- a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py +++ b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py @@ -53,12 +53,10 @@ def microceph(): aws_access_key_id=key_id, aws_secret_access_key=secret_key, ).create_bucket(Bucket=_BUCKET) - except botocore.exceptions.EndpointConnectionError as exception: + except botocore.exceptions.EndpointConnectionError: if attempt == 2: raise - logger.debug( - "Unable to connect to microceph via S3. Retrying", exc_info=exception - ) + logger.debug("Unable to connect to microceph via S3. Retrying") time.sleep(1) else: break From 161b8b01e706a533b8867a042620d09a1f4da0e8 Mon Sep 17 00:00:00 2001 From: Carl Csaposs Date: Wed, 8 May 2024 10:51:22 +0200 Subject: [PATCH 3/4] add comment --- python/pytest_plugins/microceph/pytest_microceph/_plugin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py index 3034dc15..b1e7d95d 100644 --- a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py +++ b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py @@ -56,6 +56,7 @@ def microceph(): except botocore.exceptions.EndpointConnectionError: if attempt == 2: raise + # microceph is not ready yet logger.debug("Unable to connect to microceph via S3. Retrying") time.sleep(1) else: From 15eaee9ff4675f1b14ef43f6b08d58b9428acf22 Mon Sep 17 00:00:00 2001 From: Carl Csaposs Date: Wed, 8 May 2024 12:39:34 +0200 Subject: [PATCH 4/4] log info --- python/pytest_plugins/microceph/pytest_microceph/_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py index b1e7d95d..b789b72b 100644 --- a/python/pytest_plugins/microceph/pytest_microceph/_plugin.py +++ b/python/pytest_plugins/microceph/pytest_microceph/_plugin.py @@ -57,7 +57,7 @@ def microceph(): if attempt == 2: raise # microceph is not ready yet - logger.debug("Unable to connect to microceph via S3. Retrying") + logger.info("Unable to connect to microceph via S3. Retrying") time.sleep(1) else: break