Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maunium
synapse
Commits
f72d5a44
Unverified
Commit
f72d5a44
authored
6 years ago
by
Erik Johnston
Committed by
GitHub
6 years ago
Browse files
Options
Downloads
Plain Diff
Merge pull request #3261 from matrix-org/erikj/pagination_fixes
Fix federation backfill bugs
parents
68399fc4
e85b5a0f
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
synapse/handlers/federation.py
+22
-9
22 additions, 9 deletions
synapse/handlers/federation.py
with
22 additions
and
9 deletions
synapse/handlers/federation.py
+
22
−
9
View file @
f72d5a44
...
@@ -751,9 +751,19 @@ class FederationHandler(BaseHandler):
...
@@ -751,9 +751,19 @@ class FederationHandler(BaseHandler):
curr_state
=
yield
self
.
state_handler
.
get_current_state
(
room_id
)
curr_state
=
yield
self
.
state_handler
.
get_current_state
(
room_id
)
def
get_domains_from_state
(
state
):
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
=
[
joined_users
=
[
(
state_key
,
int
(
event
.
depth
))
(
state_key
,
int
(
event
.
depth
))
for
(
e_type
,
state_key
),
event
in
state
.
items
()
for
(
e_type
,
state_key
),
event
in
state
.
iter
items
()
if
e_type
==
EventTypes
.
Member
if
e_type
==
EventTypes
.
Member
and
event
.
membership
==
Membership
.
JOIN
and
event
.
membership
==
Membership
.
JOIN
]
]
...
@@ -770,7 +780,7 @@ class FederationHandler(BaseHandler):
...
@@ -770,7 +780,7 @@ class FederationHandler(BaseHandler):
except
Exception
:
except
Exception
:
pass
pass
return
sorted
(
joined_domains
.
items
(),
key
=
lambda
d
:
d
[
1
])
return
sorted
(
joined_domains
.
iter
items
(),
key
=
lambda
d
:
d
[
1
])
curr_domains
=
get_domains_from_state
(
curr_state
)
curr_domains
=
get_domains_from_state
(
curr_state
)
...
@@ -787,7 +797,7 @@ class FederationHandler(BaseHandler):
...
@@ -787,7 +797,7 @@ class FederationHandler(BaseHandler):
yield
self
.
backfill
(
yield
self
.
backfill
(
dom
,
room_id
,
dom
,
room_id
,
limit
=
100
,
limit
=
100
,
extremities
=
[
e
for
e
in
extremities
.
keys
()]
extremities
=
extremities
,
)
)
# If this succeeded then we probably already have the
# If this succeeded then we probably already have the
# appropriate stuff.
# appropriate stuff.
...
@@ -833,7 +843,7 @@ class FederationHandler(BaseHandler):
...
@@ -833,7 +843,7 @@ class FederationHandler(BaseHandler):
tried_domains
=
set
(
likely_domains
)
tried_domains
=
set
(
likely_domains
)
tried_domains
.
add
(
self
.
server_name
)
tried_domains
.
add
(
self
.
server_name
)
event_ids
=
list
(
extremities
.
keys
())
event_ids
=
list
(
extremities
.
iter
keys
())
logger
.
debug
(
"
calling resolve_state_groups in _maybe_backfill
"
)
logger
.
debug
(
"
calling resolve_state_groups in _maybe_backfill
"
)
resolve
=
logcontext
.
preserve_fn
(
resolve
=
logcontext
.
preserve_fn
(
...
@@ -843,31 +853,34 @@ class FederationHandler(BaseHandler):
...
@@ -843,31 +853,34 @@ class FederationHandler(BaseHandler):
[
resolve
(
room_id
,
[
e
])
for
e
in
event_ids
],
[
resolve
(
room_id
,
[
e
])
for
e
in
event_ids
],
consumeErrors
=
True
,
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
]))
states
=
dict
(
zip
(
event_ids
,
[
s
.
state
for
s
in
states
]))
state_map
=
yield
self
.
store
.
get_events
(
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
.
iter
values
()
for
e_id
in
ids
.
itervalues
()
],
get_prev_content
=
False
get_prev_content
=
False
)
)
states
=
{
states
=
{
key
:
{
key
:
{
k
:
state_map
[
e_id
]
k
:
state_map
[
e_id
]
for
k
,
e_id
in
state_dict
.
items
()
for
k
,
e_id
in
state_dict
.
iter
items
()
if
e_id
in
state_map
if
e_id
in
state_map
}
for
key
,
state_dict
in
states
.
items
()
}
for
key
,
state_dict
in
states
.
iter
items
()
}
}
for
e_id
,
_
in
sorted_extremeties_tuple
:
for
e_id
,
_
in
sorted_extremeties_tuple
:
likely_domains
=
get_domains_from_state
(
states
[
e_id
])
likely_domains
=
get_domains_from_state
(
states
[
e_id
])
success
=
yield
try_backfill
([
success
=
yield
try_backfill
([
dom
for
dom
in
likely_domains
dom
for
dom
,
_
in
likely_domains
if
dom
not
in
tried_domains
if
dom
not
in
tried_domains
])
])
if
success
:
if
success
:
defer
.
returnValue
(
True
)
defer
.
returnValue
(
True
)
tried_domains
.
update
(
likely_domains
)
tried_domains
.
update
(
dom
for
dom
,
_
in
likely_domains
)
defer
.
returnValue
(
False
)
defer
.
returnValue
(
False
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment