forked from MirrorHub/synapse
Handle TimelineBatch being limited and empty.
This hopefully addresses #5407 by gracefully handling an empty but limited TimelineBatch. We also add some logging to figure out how this is happening.
This commit is contained in:
parent
8ed9e63432
commit
6881f21f3e
1 changed files with 37 additions and 6 deletions
|
@ -781,9 +781,17 @@ class SyncHandler(object):
|
||||||
lazy_load_members=lazy_load_members,
|
lazy_load_members=lazy_load_members,
|
||||||
)
|
)
|
||||||
elif batch.limited:
|
elif batch.limited:
|
||||||
state_at_timeline_start = yield self.store.get_state_ids_for_event(
|
if batch:
|
||||||
batch.events[0].event_id, state_filter=state_filter
|
state_at_timeline_start = yield self.store.get_state_ids_for_event(
|
||||||
)
|
batch.events[0].event_id, state_filter=state_filter
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Its not clear how we get here, but empirically we do
|
||||||
|
# (#5407). Logging has been added elsewhere to try and
|
||||||
|
# figure out where this state comes from.
|
||||||
|
state_at_timeline_start = yield self.get_state_at(
|
||||||
|
room_id, stream_position=now_token, state_filter=state_filter
|
||||||
|
)
|
||||||
|
|
||||||
# for now, we disable LL for gappy syncs - see
|
# for now, we disable LL for gappy syncs - see
|
||||||
# https://github.com/vector-im/riot-web/issues/7211#issuecomment-419976346
|
# https://github.com/vector-im/riot-web/issues/7211#issuecomment-419976346
|
||||||
|
@ -803,9 +811,17 @@ class SyncHandler(object):
|
||||||
room_id, stream_position=since_token, state_filter=state_filter
|
room_id, stream_position=since_token, state_filter=state_filter
|
||||||
)
|
)
|
||||||
|
|
||||||
current_state_ids = yield self.store.get_state_ids_for_event(
|
if batch:
|
||||||
batch.events[-1].event_id, state_filter=state_filter
|
current_state_ids = yield self.store.get_state_ids_for_event(
|
||||||
)
|
batch.events[-1].event_id, state_filter=state_filter
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Its not clear how we get here, but empirically we do
|
||||||
|
# (#5407). Logging has been added elsewhere to try and
|
||||||
|
# figure out where this state comes from.
|
||||||
|
current_state_ids = yield self.get_state_at(
|
||||||
|
room_id, stream_position=now_token, state_filter=state_filter
|
||||||
|
)
|
||||||
|
|
||||||
state_ids = _calculate_state(
|
state_ids = _calculate_state(
|
||||||
timeline_contains=timeline_state,
|
timeline_contains=timeline_state,
|
||||||
|
@ -1755,6 +1771,21 @@ class SyncHandler(object):
|
||||||
newly_joined_room=newly_joined,
|
newly_joined_room=newly_joined,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not batch and batch.limited:
|
||||||
|
# This resulted in #5407, which is weird, so lets log! We do it
|
||||||
|
# here as we have the maximum amount of information.
|
||||||
|
user_id = sync_result_builder.sync_config.user.to_string()
|
||||||
|
logger.info(
|
||||||
|
"Issue #5407: Found limited batch with no events. user %s, room %s,"
|
||||||
|
" sync_config %s, newly_joined %s, events %s, batch %s.",
|
||||||
|
user_id,
|
||||||
|
room_id,
|
||||||
|
sync_config,
|
||||||
|
newly_joined,
|
||||||
|
events,
|
||||||
|
batch,
|
||||||
|
)
|
||||||
|
|
||||||
if newly_joined:
|
if newly_joined:
|
||||||
# debug for https://github.com/matrix-org/synapse/issues/4422
|
# debug for https://github.com/matrix-org/synapse/issues/4422
|
||||||
issue4422_logger.debug(
|
issue4422_logger.debug(
|
||||||
|
|
Loading…
Reference in a new issue