Add a keyword argument to get_json to avoid retrying on DNS failures. Rather than passing MatrixHttpClient.RETRY_DNS_LOOKUP_FAILURES as a fake query string parameter
parent
9435830351
commit
574377636e
|
@ -159,7 +159,8 @@ class ReplicationLayer(object):
|
||||||
return defer.succeed(None)
|
return defer.succeed(None)
|
||||||
|
|
||||||
@log_function
|
@log_function
|
||||||
def make_query(self, destination, query_type, args):
|
def make_query(self, destination, query_type, args,
|
||||||
|
retry_on_dns_fail=True):
|
||||||
"""Sends a federation Query to a remote homeserver of the given type
|
"""Sends a federation Query to a remote homeserver of the given type
|
||||||
and arguments.
|
and arguments.
|
||||||
|
|
||||||
|
@ -174,7 +175,9 @@ class ReplicationLayer(object):
|
||||||
a Deferred which will eventually yield a JSON object from the
|
a Deferred which will eventually yield a JSON object from the
|
||||||
response
|
response
|
||||||
"""
|
"""
|
||||||
return self.transport_layer.make_query(destination, query_type, args)
|
return self.transport_layer.make_query(
|
||||||
|
destination, query_type, args, retry_on_dns_fail=retry_on_dns_fail
|
||||||
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@log_function
|
@log_function
|
||||||
|
|
|
@ -193,13 +193,14 @@ class TransportLayer(object):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@log_function
|
@log_function
|
||||||
def make_query(self, destination, query_type, args):
|
def make_query(self, destination, query_type, args, retry_on_dns_fail):
|
||||||
path = PREFIX + "/query/%s" % query_type
|
path = PREFIX + "/query/%s" % query_type
|
||||||
|
|
||||||
response = yield self.client.get_json(
|
response = yield self.client.get_json(
|
||||||
destination=destination,
|
destination=destination,
|
||||||
path=path,
|
path=path,
|
||||||
args=args
|
args=args,
|
||||||
|
retry_on_dns_fail=retry_on_dns_fail,
|
||||||
)
|
)
|
||||||
|
|
||||||
defer.returnValue(response)
|
defer.returnValue(response)
|
||||||
|
|
|
@ -18,7 +18,6 @@ from twisted.internet import defer
|
||||||
from ._base import BaseHandler
|
from ._base import BaseHandler
|
||||||
|
|
||||||
from synapse.api.errors import SynapseError
|
from synapse.api.errors import SynapseError
|
||||||
from synapse.http.client import MatrixHttpClient
|
|
||||||
from synapse.api.events.room import RoomAliasesEvent
|
from synapse.api.events.room import RoomAliasesEvent
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -98,8 +97,8 @@ class DirectoryHandler(BaseHandler):
|
||||||
query_type="directory",
|
query_type="directory",
|
||||||
args={
|
args={
|
||||||
"room_alias": room_alias.to_string(),
|
"room_alias": room_alias.to_string(),
|
||||||
MatrixHttpClient.RETRY_DNS_LOOKUP_FAILURES: False
|
},
|
||||||
}
|
retry_on_dns_fail=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
if result and "room_id" in result and "servers" in result:
|
if result and "room_id" in result and "servers" in result:
|
||||||
|
|
|
@ -183,7 +183,7 @@ class MatrixHttpClient(BaseHttpClient):
|
||||||
defer.returnValue((response.code, body))
|
defer.returnValue((response.code, body))
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_json(self, destination, path, args={}):
|
def get_json(self, destination, path, args={}, retry_on_dns_fail=True):
|
||||||
""" Get's some json from the given host homeserver and path
|
""" Get's some json from the given host homeserver and path
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -203,13 +203,6 @@ class MatrixHttpClient(BaseHttpClient):
|
||||||
"""
|
"""
|
||||||
logger.debug("get_json args: %s", args)
|
logger.debug("get_json args: %s", args)
|
||||||
|
|
||||||
retry_on_dns_fail = True
|
|
||||||
if HttpClient.RETRY_DNS_LOOKUP_FAILURES in args:
|
|
||||||
# FIXME: This isn't ideal, but the interface exposed in get_json
|
|
||||||
# isn't comprehensive enough to give caller's any control over
|
|
||||||
# their connection mechanics.
|
|
||||||
retry_on_dns_fail = args.pop(HttpClient.RETRY_DNS_LOOKUP_FAILURES)
|
|
||||||
|
|
||||||
query_bytes = urllib.urlencode(args, True)
|
query_bytes = urllib.urlencode(args, True)
|
||||||
logger.debug("Query bytes: %s Retry DNS: %s", args, retry_on_dns_fail)
|
logger.debug("Query bytes: %s Retry DNS: %s", args, retry_on_dns_fail)
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ class FederationTestCase(unittest.TestCase):
|
||||||
response = yield self.federation.make_query(
|
response = yield self.federation.make_query(
|
||||||
destination="remote",
|
destination="remote",
|
||||||
query_type="a-question",
|
query_type="a-question",
|
||||||
args={"one": "1", "two": "2"}
|
args={"one": "1", "two": "2"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEquals({"your": "response"}, response)
|
self.assertEquals({"your": "response"}, response)
|
||||||
|
@ -261,7 +261,8 @@ class FederationTestCase(unittest.TestCase):
|
||||||
self.mock_http_client.get_json.assert_called_with(
|
self.mock_http_client.get_json.assert_called_with(
|
||||||
destination="remote",
|
destination="remote",
|
||||||
path="/_matrix/federation/v1/query/a-question",
|
path="/_matrix/federation/v1/query/a-question",
|
||||||
args={"one": "1", "two": "2"}
|
args={"one": "1", "two": "2"},
|
||||||
|
retry_on_dns_fail=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
|
|
@ -20,7 +20,6 @@ from twisted.internet import defer
|
||||||
from mock import Mock
|
from mock import Mock
|
||||||
|
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
from synapse.http.client import MatrixHttpClient
|
|
||||||
from synapse.handlers.directory import DirectoryHandler
|
from synapse.handlers.directory import DirectoryHandler
|
||||||
from synapse.storage.directory import RoomAliasMapping
|
from synapse.storage.directory import RoomAliasMapping
|
||||||
|
|
||||||
|
@ -95,8 +94,8 @@ class DirectoryTestCase(unittest.TestCase):
|
||||||
query_type="directory",
|
query_type="directory",
|
||||||
args={
|
args={
|
||||||
"room_alias": "#another:remote",
|
"room_alias": "#another:remote",
|
||||||
MatrixHttpClient.RETRY_DNS_LOOKUP_FAILURES: False
|
},
|
||||||
}
|
retry_on_dns_fail=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
|
Loading…
Reference in New Issue