Repository navigation
Fix federation backfill bugs #3261
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -751,9 +751,19 @@ def maybe_backfill(self, room_id, current_depth): | |
| curr_state = yield self.state_handler.get_current_state(room_id) | ||
|
|
||
| def get_domains_from_state(state): | ||
| """Get joined domains from state | ||
|
|
||
| Args: | ||
| state (dict[tuple, FrozenEvent]): State map from type/state | ||
| key to event. | ||
|
|
||
| Returns: | ||
| list[tuple[str, int]]: Returns a list of servers with the | ||
| lowest depth of their joins. Sorted by lowest depth first. | ||
| """ | ||
| joined_users = [ | ||
| (state_key, int(event.depth)) | ||
| for (e_type, state_key), event in state.items() | ||
| for (e_type, state_key), event in state.iteritems() | ||
| if e_type == EventTypes.Member | ||
| and event.membership == Membership.JOIN | ||
| ] | ||
|
|
@@ -770,7 +780,7 @@ def get_domains_from_state(state): | |
| except Exception: | ||
| pass | ||
|
|
||
| return sorted(joined_domains.items(), key=lambda d: d[1]) | ||
| return sorted(joined_domains.iteritems(), key=lambda d: d[1]) | ||
|
|
||
| curr_domains = get_domains_from_state(curr_state) | ||
|
|
||
|
|
@@ -787,7 +797,7 @@ def try_backfill(domains): | |
| yield self.backfill( | ||
| dom, room_id, | ||
| limit=100, | ||
| extremities=[e for e in extremities.keys()] | ||
| extremities=extremities, | ||
| ) | ||
| # If this succeeded then we probably already have the | ||
| # appropriate stuff. | ||
|
|
@@ -833,7 +843,7 @@ def try_backfill(domains): | |
| tried_domains = set(likely_domains) | ||
| tried_domains.add(self.server_name) | ||
|
|
||
| event_ids = list(extremities.keys()) | ||
| event_ids = list(extremities.iterkeys()) | ||
|
|
||
| logger.debug("calling resolve_state_groups in _maybe_backfill") | ||
| resolve = logcontext.preserve_fn( | ||
|
|
@@ -843,31 +853,34 @@ def try_backfill(domains): | |
| [resolve(room_id, [e]) for e in event_ids], | ||
| consumeErrors=True, | ||
| )) | ||
|
|
||
| # dict[str, dict[tuple, str]], a map from event_id to state map of | ||
| # event_ids. | ||
| states = dict(zip(event_ids, [s.state for s in states])) | ||
|
|
||
| state_map = yield self.store.get_events( | ||
| [e_id for ids in states.values() for e_id in ids], | ||
| [e_id for ids in states.itervalues() for e_id in ids.itervalues()], | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why is this changing from assuming you've just unpicked what
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Have added a comment and typing info |
||
| get_prev_content=False | ||
| ) | ||
| states = { | ||
| key: { | ||
| k: state_map[e_id] | ||
| for k, e_id in state_dict.items() | ||
| for k, e_id in state_dict.iteritems() | ||
| if e_id in state_map | ||
| } for key, state_dict in states.items() | ||
| } for key, state_dict in states.iteritems() | ||
| } | ||
|
|
||
| for e_id, _ in sorted_extremeties_tuple: | ||
| likely_domains = get_domains_from_state(states[e_id]) | ||
|
|
||
| success = yield try_backfill([ | ||
| dom for dom in likely_domains | ||
| dom for dom, _ in likely_domains | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this looks bogus?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| if dom not in tried_domains | ||
| ]) | ||
| if success: | ||
| defer.returnValue(True) | ||
|
|
||
| tried_domains.update(likely_domains) | ||
| tried_domains.update(dom for dom, _ in likely_domains) | ||
|
|
||
| defer.returnValue(False) | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
isn't this the same as
list(extremities)? Happy for this to be explicit but it's the opposite to what you've done at line 800