in alibabacloud_credentials/provider/refreshable.py [0:0]
def _handle_fetched_failure(self, exception: Exception) -> RefreshResult[T]:
log.warning(f'Refresh credentials failed, cached value is {self._cached_value}, error: {exception}')
if not self._cached_value:
log.exception(exception)
raise exception
now = int(time.mktime(time.localtime()))
if now < self._cached_value.stale_time():
return self._cached_value
self._consecutive_refresh_failures += 1
if self._stale_value_behavior == StaleValueBehavior.STRICT:
log.exception(exception)
raise exception
else: # ALLOW
new_stale_time = int(
_jitter_time(now * 1000, 1000, _max_stale_failure_jitter(self._consecutive_refresh_failures)) / 1000)
log.warning(
f'Cached value expiration has been extended to {datetime.fromtimestamp(new_stale_time)} because calling the downstream service failed (consecutive failures: {self._consecutive_refresh_failures}).')
return RefreshResult(value=self._cached_value.value(), stale_time=new_stale_time,
prefetch_time=self._cached_value.prefetch_time())