From: Guillaume Abrioux Date: Fri, 9 Jun 2023 12:58:02 +0000 (+0200) Subject: node-proxy: add a decorator 'retry' X-Git-Tag: v19.3.0~102^2~93 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9b88e5a782b2c10ce782ca09ff2bb56bb0a82200;p=ceph.git node-proxy: add a decorator 'retry' This decorator will be useful for calls that should do multiple attempts before actually failing. Signed-off-by: Guillaume Abrioux --- diff --git a/src/cephadm/node-proxy/util.py b/src/cephadm/node-proxy/util.py index 817583e6ff7f..6420e904876f 100644 --- a/src/cephadm/node-proxy/util.py +++ b/src/cephadm/node-proxy/util.py @@ -1,7 +1,8 @@ import logging import yaml import os -from typing import Dict, List +import time +from typing import Dict, List, Callable, Any def normalize_dict(test_dict: Dict) -> Dict: @@ -69,3 +70,20 @@ class Logger: logger.addHandler(handler) return logger + + +def retry(exceptions: Any = Exception, retries: int = 20, delay: int = 1) -> Callable: + def decorator(f: Callable) -> Callable: + def _retry(*args: str, **kwargs: Any) -> Callable: + _tries = retries + while _tries > 1: + try: + print("{}".format(_tries)) + return f(*args, **kwargs) + except exceptions: + time.sleep(delay) + _tries -= 1 + print("{} has failed after {} tries".format(f, retries)) + return f(*args, **kwargs) + return _retry + return decorator