Skip to content

Commit f80fb1e

Browse files
committed
Retry mechanism for builders to keep trying when webs are overloaded
1 parent 4fa2746 commit f80fb1e

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

readthedocs/restapi/client.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import requests
1515
from django.conf import settings
16+
from requests.packages.urllib3.util.retry import Retry
1617
from requests_toolbelt.adapters import host_header_ssl
1718
from rest_framework.renderers import JSONRenderer
1819
from slumber import API, serialize
@@ -44,9 +45,21 @@ def setup_api():
4445
else:
4546
adapter_class = requests.adapters.HTTPAdapter
4647

48+
# Define a retry mechanism trying to attempt to not fail in the first
49+
# error. Builders hit this issue frequently because the webs are high loaded
50+
retry = Retry(
51+
total=3,
52+
read=3,
53+
connect=3,
54+
status=3,
55+
backoff_factor=0.5, # 0.5, 1, 2 seconds
56+
method_whitelist=('GET', 'PUT', 'PATCH'),
57+
status_forcelist=(408, 500, 502, 503, 504),
58+
)
59+
4760
session.mount(
4861
API_HOST,
49-
adapter_class(max_retries=3),
62+
adapter_class(max_retries=retry),
5063
)
5164
session.headers.update({'Host': PRODUCTION_DOMAIN})
5265
api_config = {

0 commit comments

Comments
 (0)