From c0ea0ccd434db41f97db82ac6e586d09ae852c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Badenes?= Date: Wed, 5 Feb 2025 00:27:27 -0300 Subject: [PATCH] Use tenacity for retries --- .../inorbit_mir_connector/src/connector.py | 19 +++++++------------ mir_connector/setup.py | 1 + 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/mir_connector/inorbit_mir_connector/src/connector.py b/mir_connector/inorbit_mir_connector/src/connector.py index fddfa23..3508595 100644 --- a/mir_connector/inorbit_mir_connector/src/connector.py +++ b/mir_connector/inorbit_mir_connector/src/connector.py @@ -6,6 +6,8 @@ import pytz import math import uuid +import logging +from tenacity import retry, wait_exponential_jitter, before_sleep_log from threading import Thread from inorbit_connector.connector import Connector from inorbit_edge.robot import COMMAND_CUSTOM_COMMAND @@ -97,9 +99,7 @@ def __init__(self, robot_id: str, config: MiR100Config) -> None: ) # Get or create the required missions and mission groups - Thread( - target=self.retry_until_successful, args=(self.setup_connector_missions,), daemon=True - ).start() + Thread(target=self.setup_connector_missions, daemon=True).start() def _inorbit_command_handler(self, command_name, args, options): """Callback method for command messages. @@ -357,6 +357,10 @@ def send_waypoint_over_missions(self, pose): ) self.mir_api.queue_mission(mission_id) + @retry( + wait=wait_exponential_jitter(max=10), + before_sleep=before_sleep_log(logging.getLogger(__name__), logging.WARNING), + ) def setup_connector_missions(self): """Find and store the required missions and mission groups, or create them if they don't exist.""" @@ -383,15 +387,6 @@ def setup_connector_missions(self): f"guid '{self.tmp_missions_group_id}'" ) - def retry_until_successful(self, func, *args, **kwargs): - """Retry a function until it is successful""" - while True: - try: - return func(*args, **kwargs) - except Exception as ex: - self._logger.error(f"Failed to execute function: {ex}") - sleep(5) - def cleanup_connector_missions(self): """Delete the missions group created at startup""" self._logger.info("Cleaning up connector missions") diff --git a/mir_connector/setup.py b/mir_connector/setup.py index 107acf4..d8f5a70 100644 --- a/mir_connector/setup.py +++ b/mir_connector/setup.py @@ -20,6 +20,7 @@ "psutil==5.9", "websocket-client==1.7.0", "uuid==1.30", + "tenacity==9.0.0", ] test_requirements = [