in mysqloperator/controller/shellutils.py [0:0]
def call(self, f: Callable[..., T], *args, **kwargs) -> T:
delay = 1
tries = 0
total_wait = 0
while True:
try:
tries += 1
return f(*args)
except (kopf.PermanentError, kopf.TemporaryError) as err:
# Don't retry kopf errors
raise
except GiveUp as err:
self.logger.error(
f"Error executing {f.__qualname__}, giving up: {err.real_exc}")
if err.real_exc:
raise err.real_exc
else:
return None
except mysqlsh.Error as err:
#import traceback
#print("=====")
#print(traceback.format_exc())
#print("=====")
if self.is_retriable and not self.is_retriable(err):
raise
if total_wait < self.timeout and (self.max_tries is None or tries < self.max_tries):
self.logger.info(
f"Error executing {f.__qualname__}, retrying after {delay}s: {err}")
time.sleep(delay)
total_wait += delay
delay = self.backoff(delay)
# TODO - do we want it this way? need it for debug now
import traceback
print(traceback.format_exc())
else:
self.logger.error(
f"Error executing {f.__qualname__}, giving up: {err}")
raise