File: //lib/mysqlsh/lib/python3.8/site-packages/oci/retry/__init__.py
# coding: utf-8
# Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
from .retry import BACKOFF_FULL_JITTER_VALUE, BACKOFF_EQUAL_JITTER_VALUE, BACKOFF_FULL_JITTER_EQUAL_ON_THROTTLE_VALUE, \
BACKOFF_DECORRELATED_JITTER_VALUE
from .retry import RetryStrategyBuilder, NoneRetryStrategy, ExponentialBackoffRetryStrategyBase, \
ExponentialBackoffWithFullJitterRetryStrategy, ExponentialBackoffWithEqualJitterRetryStrategy, \
ExponentialBackoffWithFullJitterEqualForThrottlesRetryStrategy, \
ExponentialBackOffWithDecorrelatedJitterRetryStrategy
from . import retry_checkers
import os
# A Default Retry Strategy for X509 calls
# defaults are:
#
# * 3 total attempts - 1 original and 2 retries
# * Total allowed elapsed time for all requests of 100 seconds
# * Exponential backoff with jitter using a base time of 1 second and an exponent of 2
# * The maximum wait time between calls is 30 seconds
# * Exponential backoff with de-correlated jitter of 1000 milliseconds is used
# * Retries on the following exception types:-
#
# - timeouts and connection errors
# - Any HTTP 5xx except 501
DEFAULT_FEDERATION_CLIENT_RETRY_STRATEGY = RetryStrategyBuilder() \
.add_max_attempts(max_attempts=3) \
.add_total_elapsed_time(total_elapsed_time_seconds=100) \
.add_service_error_check(service_error_retry_config={-1: []},
service_error_retry_on_any_5xx=True) \
.get_retry_strategy()
#: A retry strategy which has all options enabled and which will use the default settings for those options. These
#: defaults are:
#:
#: * 8 total attempts - 1 original and 7 retries
#: * Total allowed elapsed time for all requests of 600 seconds (10 minutes)
#: * Exponential backoff with jitter using a base time of 1 second and an exponent of 2
#: * The maximum wait time between calls is 30 seconds
#: * Exponential backoff with de-correlated jitter of 1000 milliseconds is used
#: * Retries on the following exception types:-
#:
#: - timeouts and connection errors
#: - HTTP 409/IncorrectState, 429s (throttles)
#: - Any HTTP 5xx except 501
DEFAULT_RETRY_STRATEGY = RetryStrategyBuilder().add_max_attempts(max_attempts=8) \
.add_total_elapsed_time(total_elapsed_time_seconds=600) \
.add_service_error_check(service_error_retry_config=retry_checkers.RETRYABLE_STATUSES_AND_CODES,
service_error_retry_on_any_5xx=True) \
.get_retry_strategy()
#: A retry strategy which can be set by the user to modify the SDK retry behavior globally. Initially set to ``None``, users
#: can pass to it a Retry Strategy which can be:-
#:
#: * A retry strategy built using ``oci.retry.RetryStrategyBuilder``
#: * The ``oci.retry.DEFAULT_RETRY_STRATEGY``
#: * ``oci.retry.NoneRetryStrategy()`` which will disable retries at SDK level
#:
#: A helpful environment variable ``OCI_SDK_DEFAULT_RETRY_ENABLED`` is also provided to `enable/disable` default retries for the SDK
#:
GLOBAL_RETRY_STRATEGY = None
if 'OCI_SDK_DEFAULT_RETRY_ENABLED' in os.environ:
if os.environ.get('OCI_SDK_DEFAULT_RETRY_ENABLED').lower() == 'true':
GLOBAL_RETRY_STRATEGY = DEFAULT_RETRY_STRATEGY
else:
GLOBAL_RETRY_STRATEGY = NoneRetryStrategy()
__all__ = [
"retry_checkers", "RetryStrategyBuilder", "NoneRetryStrategy", "ExponentialBackoffRetryStrategyBase",
"ExponentialBackoffWithFullJitterRetryStrategy", "ExponentialBackoffWithEqualJitterRetryStrategy",
"ExponentialBackoffWithFullJitterEqualForThrottlesRetryStrategy",
"ExponentialBackOffWithDecorrelatedJitterRetryStrategy", "DEFAULT_RETRY_STRATEGY", "GLOBAL_RETRY_STRATEGY",
"BACKOFF_FULL_JITTER_VALUE", "BACKOFF_EQUAL_JITTER_VALUE", "BACKOFF_FULL_JITTER_EQUAL_ON_THROTTLE_VALUE",
"BACKOFF_DECORRELATED_JITTER_VALUE"
]