forked from MirrorHub/synapse
_run_push_actions_and_persist_event
: handle no min_depth (#11014)
Make sure that we correctly handle rooms where we do not yet have a `min_depth`, and also add some comments and logging.
This commit is contained in:
parent
7d70582eb0
commit
e8f24b6c35
3 changed files with 20 additions and 11 deletions
1
changelog.d/11014.misc
Normal file
1
changelog.d/11014.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add some extra logging to the event persistence code.
|
|
@ -214,7 +214,7 @@ class FederationEventHandler:
|
||||||
|
|
||||||
if missing_prevs:
|
if missing_prevs:
|
||||||
# We only backfill backwards to the min depth.
|
# We only backfill backwards to the min depth.
|
||||||
min_depth = await self.get_min_depth_for_context(pdu.room_id)
|
min_depth = await self._store.get_min_depth(pdu.room_id)
|
||||||
logger.debug("min_depth: %d", min_depth)
|
logger.debug("min_depth: %d", min_depth)
|
||||||
|
|
||||||
if min_depth is not None and pdu.depth > min_depth:
|
if min_depth is not None and pdu.depth > min_depth:
|
||||||
|
@ -1696,16 +1696,27 @@ class FederationEventHandler:
|
||||||
# persist_events_and_notify directly.)
|
# persist_events_and_notify directly.)
|
||||||
assert not event.internal_metadata.outlier
|
assert not event.internal_metadata.outlier
|
||||||
|
|
||||||
try:
|
if not backfilled and not context.rejected:
|
||||||
if (
|
min_depth = await self._store.get_min_depth(event.room_id)
|
||||||
not backfilled
|
if min_depth is None or min_depth > event.depth:
|
||||||
and not context.rejected
|
# XXX richvdh 2021/10/07: I don't really understand what this
|
||||||
and (await self._store.get_min_depth(event.room_id)) <= event.depth
|
# condition is doing. I think it's trying not to send pushes
|
||||||
):
|
# for events that predate our join - but that's not really what
|
||||||
|
# min_depth means, and anyway ancient events are a more general
|
||||||
|
# problem.
|
||||||
|
#
|
||||||
|
# for now I'm just going to log about it.
|
||||||
|
logger.info(
|
||||||
|
"Skipping push actions for old event with depth %s < %s",
|
||||||
|
event.depth,
|
||||||
|
min_depth,
|
||||||
|
)
|
||||||
|
else:
|
||||||
await self._action_generator.handle_push_actions_for_event(
|
await self._action_generator.handle_push_actions_for_event(
|
||||||
event, context
|
event, context
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
await self.persist_events_and_notify(
|
await self.persist_events_and_notify(
|
||||||
event.room_id, [(event, context)], backfilled=backfilled
|
event.room_id, [(event, context)], backfilled=backfilled
|
||||||
)
|
)
|
||||||
|
@ -1837,6 +1848,3 @@ class FederationEventHandler:
|
||||||
len(ev.auth_event_ids()),
|
len(ev.auth_event_ids()),
|
||||||
)
|
)
|
||||||
raise SynapseError(HTTPStatus.BAD_REQUEST, "Too many auth_events")
|
raise SynapseError(HTTPStatus.BAD_REQUEST, "Too many auth_events")
|
||||||
|
|
||||||
async def get_min_depth_for_context(self, context: str) -> int:
|
|
||||||
return await self._store.get_min_depth(context)
|
|
||||||
|
|
|
@ -906,7 +906,7 @@ class EventFederationWorkerStore(EventsWorkerStore, SignatureWorkerStore, SQLBas
|
||||||
desc="get_latest_event_ids_in_room",
|
desc="get_latest_event_ids_in_room",
|
||||||
)
|
)
|
||||||
|
|
||||||
async def get_min_depth(self, room_id: str) -> int:
|
async def get_min_depth(self, room_id: str) -> Optional[int]:
|
||||||
"""For the given room, get the minimum depth we have seen for it."""
|
"""For the given room, get the minimum depth we have seen for it."""
|
||||||
return await self.db_pool.runInteraction(
|
return await self.db_pool.runInteraction(
|
||||||
"get_min_depth", self._get_min_depth_interaction, room_id
|
"get_min_depth", self._get_min_depth_interaction, room_id
|
||||||
|
|
Loading…
Reference in a new issue