Browse Source

Merge pull request #1871 from matrix-org/erikj/ratelimit_401

Correctly raise exceptions for ratelimitng. Ratelimit on 401
Erik Johnston 7 years ago
parent
commit
96355d2f2f
2 changed files with 6 additions and 4 deletions
  1. 1 1
      synapse/federation/transaction_queue.py
  2. 5 3
      synapse/util/retryutils.py

+ 1 - 1
synapse/federation/transaction_queue.py

@@ -504,7 +504,7 @@ class TransactionQueue(object):
                     code = e.code
                     response = e.response
 
-                    if e.code == 429 or 500 <= e.code:
+                    if e.code in (401, 404, 429) or 500 <= e.code:
                         logger.info(
                             "TX [%s] {%s} got %d response",
                             destination, txn_id, code

+ 5 - 3
synapse/util/retryutils.py

@@ -129,11 +129,13 @@ class RetryDestinationLimiter(object):
             # APIs may expect to never received e.g. a 404. It's important to
             # handle 404 as some remote servers will return a 404 when the HS
             # has been decommissioned.
+            # If we get a 401, then we should probably back off since they
+            # won't accept our requests for at least a while.
+            # 429 is us being aggresively rate limited, so lets rate limit
+            # ourselves.
             if exc_val.code == 404 and self.backoff_on_404:
                 valid_err_code = False
-            elif exc_val.code == 429:
-                # 429 is us being aggresively rate limited, so lets rate limit
-                # ourselves.
+            elif exc_val.code in (401, 429):
                 valid_err_code = False
             elif exc_val.code < 500:
                 valid_err_code = True