Description
Hi @DFrenkel @busunkim96,
CONTEXT
Recently, I got an HttpError 502
when running googleapiclient.discovery.build()
.
File "/usr/local/lib/python3.8/dist-packages/my_app-0.3.1-py3.8.egg/my_app/data/gd.py", line 58, in __init__
self.drive = googleapiclient.discovery.build('drive', 'v3', http=auth_http)
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/discovery.py", line 292, in build
raise e
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/discovery.py", line 268, in build
content = _retrieve_discovery_doc(
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/discovery.py", line 365, in _retrieve_discovery_doc
resp, content = req.execute(num_retries=num_retries)
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/googleapiclient/http.py", line 907, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 502 when requesting https://www.googleapis.com/discovery/v1/apis/drive/v3/rest returned "Bad Gateway">
I could read about this error from this SO thread.
Quest.
Is anyone else getting a 502 Bad Gateway error when trying to access https://www.googleapis.com/discovery/v1/apis/drive/v2/rest
Ans.
It appears to have started working again after being down for ~ 1 hr. Nothing needed to be done.
Additionally, Google doc suggests to address 5xx HttpError with a retry strategy.
Heading in this direction, I finally noticed that a num_retries made its apparition in build
a few weeks ago thanks to you @DFrenkel 👍 (PR)
So my trouble seems like easy to solve with this parameter. Nonetheless I have 2 questions.
QUESTION 1: Setting an appropriate num_retries
value
- What is the max time discovery can be down? Is this 1hr true? This seems to me like a large time, but then why not. I am not an expert on this topic.
- What would be the appropriate
num_retries
from this max time?
I read the formula used to assess the sleep time between 2 retries:
random()
giving a number between 0 and 1, I considered it being equal to 0.5. I could then see that with 12 retries, I could have a process retrying for about 1hr 10 minutes. Do you consider this correct?
QUESTION 2: num_retries
inheritance?
Does the subsequent num_retries
in execute()
inherit as default value the value set for num_retries
in build()
?
Thanks a lot for your help and support.
Have a good day,
Bests,
PS: num_retries
does not appear documented yet in source doc, which is where I 1st looked to see how I could implement it.
I most notably found this other thread, suggesting to subclass HttpRequest
, with default num_retries
. Seemed like another level of work to conduct, and very happy you could implement it directly in build()
! :) Thanks!