limit total timeout for get_missing_events to 10s

pull/1744/head
Matthew Hodgson 2016-12-31 15:21:37 +00:00
parent 899a3a1268
commit 555d702e34
3 changed files with 11 additions and 3 deletions

View File

@ -707,7 +707,7 @@ class FederationClient(FederationBase):
@defer.inlineCallbacks @defer.inlineCallbacks
def get_missing_events(self, destination, room_id, earliest_events_ids, def get_missing_events(self, destination, room_id, earliest_events_ids,
latest_events, limit, min_depth): latest_events, limit, min_depth, timeout):
"""Tries to fetch events we are missing. This is called when we receive """Tries to fetch events we are missing. This is called when we receive
an event without having received all of its ancestors. an event without having received all of its ancestors.
@ -721,6 +721,7 @@ class FederationClient(FederationBase):
have all previous events for. have all previous events for.
limit (int): Maximum number of events to return. limit (int): Maximum number of events to return.
min_depth (int): Minimum depth of events tor return. min_depth (int): Minimum depth of events tor return.
timeout (int): Max time to wait in ms
""" """
try: try:
content = yield self.transport_layer.get_missing_events( content = yield self.transport_layer.get_missing_events(
@ -730,6 +731,7 @@ class FederationClient(FederationBase):
latest_events=[e.event_id for e in latest_events], latest_events=[e.event_id for e in latest_events],
limit=limit, limit=limit,
min_depth=min_depth, min_depth=min_depth,
timeout=timeout,
) )
events = [ events = [

View File

@ -425,6 +425,7 @@ class FederationServer(FederationBase):
" limit: %d, min_depth: %d", " limit: %d, min_depth: %d",
earliest_events, latest_events, limit, min_depth earliest_events, latest_events, limit, min_depth
) )
missing_events = yield self.handler.on_get_missing_events( missing_events = yield self.handler.on_get_missing_events(
origin, room_id, earliest_events, latest_events, limit, min_depth origin, room_id, earliest_events, latest_events, limit, min_depth
) )
@ -567,6 +568,9 @@ class FederationServer(FederationBase):
len(prevs - seen), pdu.room_id, list(prevs - seen)[:5] len(prevs - seen), pdu.room_id, list(prevs - seen)[:5]
) )
# XXX: we set timeout to 10s to help workaround
# https://github.com/matrix-org/synapse/issues/1733
missing_events = yield self.get_missing_events( missing_events = yield self.get_missing_events(
origin, origin,
pdu.room_id, pdu.room_id,
@ -574,6 +578,7 @@ class FederationServer(FederationBase):
latest_events=[pdu], latest_events=[pdu],
limit=10, limit=10,
min_depth=min_depth, min_depth=min_depth,
timeout=10000,
) )
# We want to sort these by depth so we process them and # We want to sort these by depth so we process them and

View File

@ -386,7 +386,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks @defer.inlineCallbacks
@log_function @log_function
def get_missing_events(self, destination, room_id, earliest_events, def get_missing_events(self, destination, room_id, earliest_events,
latest_events, limit, min_depth): latest_events, limit, min_depth, timeout):
path = PREFIX + "/get_missing_events/%s" % (room_id,) path = PREFIX + "/get_missing_events/%s" % (room_id,)
content = yield self.client.post_json( content = yield self.client.post_json(
@ -397,7 +397,8 @@ class TransportLayerClient(object):
"min_depth": int(min_depth), "min_depth": int(min_depth),
"earliest_events": earliest_events, "earliest_events": earliest_events,
"latest_events": latest_events, "latest_events": latest_events,
} },
timeout=timeout,
) )
defer.returnValue(content) defer.returnValue(content)