From e241f83acb481c08881050d8b07717be7784bcc3 Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Fri, 12 Jun 2020 11:01:02 -0300 Subject: O365: Log throttling in a more informative way For some reason the graph server has started to throttle message modification after 3-5 requests, I assume it is a server bug, so make the logging clearer for now. Also use the response headers to guide the retry timer. Signed-off-by: Jason Gunthorpe --- cloud_mdir_sync/office365.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cloud_mdir_sync/office365.py b/cloud_mdir_sync/office365.py index d68e75d..9c8ee62 100644 --- a/cloud_mdir_sync/office365.py +++ b/cloud_mdir_sync/office365.py @@ -37,9 +37,15 @@ def _retry_protect(func): self.owa_token = None await self.authenticate() continue + if e.code == 429: # Too Many Requests + delay = int(e.headers.get("Retry-After", 10)) + self.cfg.logger.error( + f"Graph returns {e} Too Many Requests, {e.headers.get('Rate-Limit-Reason')}, delaying {delay}" + ) + await asyncio.sleep(delay) + continue if (e.code == 503 or # Service Unavilable e.code == 509 or # Bandwidth Limit Exceeded - e.code == 429 or # Too Many Requests e.code == 504 or # Gateway Timeout e.code == 200): # Success, but error JSON self.cfg.logger.error(f"Graph returns {e}, delaying") -- cgit v1.2.3