mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 05:33:53 +01:00
Skip attempt to get state at backwards-extremities (#12173)
We don't *have* the state at a backwards-extremity, so this is never going to do anything useful.
This commit is contained in:
parent
9a0172d49f
commit
dc8d825ef2
2 changed files with 4 additions and 57 deletions
1
changelog.d/12173.misc
Normal file
1
changelog.d/12173.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Avoid trying to calculate the state at outlier events.
|
|
@ -23,8 +23,6 @@ from signedjson.key import decode_verify_key_bytes
|
||||||
from signedjson.sign import verify_signed_json
|
from signedjson.sign import verify_signed_json
|
||||||
from unpaddedbase64 import decode_base64
|
from unpaddedbase64 import decode_base64
|
||||||
|
|
||||||
from twisted.internet import defer
|
|
||||||
|
|
||||||
from synapse import event_auth
|
from synapse import event_auth
|
||||||
from synapse.api.constants import EventContentFields, EventTypes, Membership
|
from synapse.api.constants import EventContentFields, EventTypes, Membership
|
||||||
from synapse.api.errors import (
|
from synapse.api.errors import (
|
||||||
|
@ -45,11 +43,7 @@ from synapse.events.snapshot import EventContext
|
||||||
from synapse.events.validator import EventValidator
|
from synapse.events.validator import EventValidator
|
||||||
from synapse.federation.federation_client import InvalidResponseError
|
from synapse.federation.federation_client import InvalidResponseError
|
||||||
from synapse.http.servlet import assert_params_in_dict
|
from synapse.http.servlet import assert_params_in_dict
|
||||||
from synapse.logging.context import (
|
from synapse.logging.context import nested_logging_context
|
||||||
make_deferred_yieldable,
|
|
||||||
nested_logging_context,
|
|
||||||
preserve_fn,
|
|
||||||
)
|
|
||||||
from synapse.metrics.background_process_metrics import run_as_background_process
|
from synapse.metrics.background_process_metrics import run_as_background_process
|
||||||
from synapse.replication.http.federation import (
|
from synapse.replication.http.federation import (
|
||||||
ReplicationCleanRoomRestServlet,
|
ReplicationCleanRoomRestServlet,
|
||||||
|
@ -355,56 +349,8 @@ class FederationHandler:
|
||||||
if success:
|
if success:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# Huh, well *those* domains didn't work out. Lets try some domains
|
# TODO: we could also try servers which were previously in the room, but
|
||||||
# from the time.
|
# are no longer.
|
||||||
|
|
||||||
tried_domains = set(likely_domains)
|
|
||||||
tried_domains.add(self.server_name)
|
|
||||||
|
|
||||||
event_ids = list(extremities.keys())
|
|
||||||
|
|
||||||
logger.debug("calling resolve_state_groups in _maybe_backfill")
|
|
||||||
resolve = preserve_fn(self.state_handler.resolve_state_groups_for_events)
|
|
||||||
states_list = await make_deferred_yieldable(
|
|
||||||
defer.gatherResults(
|
|
||||||
[resolve(room_id, [e]) for e in event_ids], consumeErrors=True
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# A map from event_id to state map of event_ids.
|
|
||||||
state_ids: Dict[str, StateMap[str]] = dict(
|
|
||||||
zip(event_ids, [s.state for s in states_list])
|
|
||||||
)
|
|
||||||
|
|
||||||
state_map = await self.store.get_events(
|
|
||||||
[e_id for ids in state_ids.values() for e_id in ids.values()],
|
|
||||||
get_prev_content=False,
|
|
||||||
)
|
|
||||||
|
|
||||||
# A map from event_id to state map of events.
|
|
||||||
state_events: Dict[str, StateMap[EventBase]] = {
|
|
||||||
key: {
|
|
||||||
k: state_map[e_id]
|
|
||||||
for k, e_id in state_dict.items()
|
|
||||||
if e_id in state_map
|
|
||||||
}
|
|
||||||
for key, state_dict in state_ids.items()
|
|
||||||
}
|
|
||||||
|
|
||||||
for e_id in event_ids:
|
|
||||||
likely_extremeties_domains = get_domains_from_state(state_events[e_id])
|
|
||||||
|
|
||||||
success = await try_backfill(
|
|
||||||
[
|
|
||||||
dom
|
|
||||||
for dom, _ in likely_extremeties_domains
|
|
||||||
if dom not in tried_domains
|
|
||||||
]
|
|
||||||
)
|
|
||||||
if success:
|
|
||||||
return True
|
|
||||||
|
|
||||||
tried_domains.update(dom for dom, _ in likely_extremeties_domains)
|
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue