diff --git a/synapse/util/retryutils.py b/synapse/util/retryutils.py
index a42138f556..2fe6814807 100644
--- a/synapse/util/retryutils.py
+++ b/synapse/util/retryutils.py
@@ -18,6 +18,7 @@ from twisted.internet import defer
from synapse.api.errors import CodeMessageException
import logging
+import random
logger = logging.getLogger(__name__)
@@ -85,8 +86,9 @@ def get_retry_limiter(destination, clock, store, **kwargs):
class RetryDestinationLimiter(object):
def __init__(self, destination, clock, store, retry_interval,
- min_retry_interval=5000, max_retry_interval=60 * 60 * 1000,
- multiplier_retry_interval=2,):
+ min_retry_interval=10 * 60 * 1000,
+ max_retry_interval=24 * 60 * 60 * 1000,
+ multiplier_retry_interval=5,):
"""Marks the destination as "down" if an exception is thrown in the
context, except for CodeMessageException with code < 500.
@@ -140,6 +142,7 @@ class RetryDestinationLimiter(object):
# We couldn't connect.
if self.retry_interval:
self.retry_interval *= self.multiplier_retry_interval
+ self.retry_interval *= int(random.uniform(0.8, 1.4))
if self.retry_interval >= self.max_retry_interval:
self.retry_interval = self.max_retry_interval
diff --git a/synapse/util/third_party_invites.py b/synapse/util/third_party_invites.py
deleted file mode 100644
index 31d186740d..0000000000
--- a/synapse/util/third_party_invites.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2015 OpenMarket Ltd
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from twisted.internet import defer
-from synapse.api.errors import AuthError
-
-
-INVITE_KEYS = {"id_server", "medium", "address", "display_name"}
-
-JOIN_KEYS = {
- "token",
- "public_key",
- "key_validity_url",
- "sender",
- "signed",
-}
-
-
-def has_invite_keys(content):
- for key in INVITE_KEYS:
- if key not in content:
- return False
- return True
-
-
-def has_join_keys(content):
- for key in JOIN_KEYS:
- if key not in content:
- return False
- return True
-
-
-def join_has_third_party_invite(content):
- if "third_party_invite" not in content:
- return False
- return has_join_keys(content["third_party_invite"])
-
-
-def extract_join_keys(src):
- return {
- key: value
- for key, value in src.items()
- if key in JOIN_KEYS
- }
-
-
-@defer.inlineCallbacks
-def check_key_valid(http_client, event):
- try:
- response = yield http_client.get_json(
- event.content["third_party_invite"]["key_validity_url"],
- {"public_key": event.content["third_party_invite"]["public_key"]}
- )
- except Exception:
- raise AuthError(502, "Third party certificate could not be checked")
- if "valid" not in response or not response["valid"]:
- raise AuthError(403, "Third party certificate was invalid")
|