- Notifications
You must be signed in to change notification settings - Fork 2.5k
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_retriesfrom this max time?
I read the formula used to assess the sleep time between 2 retries:
sleep_time = rand() * 2 ** retry_num
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!