Preserve outlier metadata when serializing EventContext

Also revert deaf3d8934 because it's no longer needed

Signed-off-by: Tulir Asokan <tulir@beeper.com>
This commit is contained in:
Tulir Asokan 2021-11-11 01:17:39 +02:00 committed by Tulir Asokan
parent deaf3d8934
commit 4153c7be2c
2 changed files with 21 additions and 15 deletions

View file

@ -112,6 +112,7 @@ class EventContext:
_current_state_ids = attr.ib(default=None, type=Optional[StateMap[str]])
_prev_state_ids = attr.ib(default=None, type=Optional[StateMap[str]])
_outlier = attr.ib(default=False, type=bool)
@staticmethod
def with_state(
@ -137,6 +138,7 @@ class EventContext:
return EventContext(
current_state_ids={},
prev_state_ids={},
outlier=True,
)
async def serialize(self, event: EventBase, store: "DataStore") -> JsonDict:
@ -170,6 +172,7 @@ class EventContext:
"prev_group": self.prev_group,
"delta_ids": _encode_state_dict(self.delta_ids),
"app_service_id": self.app_service.id if self.app_service else None,
"outlier": self._outlier,
}
@staticmethod
@ -198,6 +201,11 @@ class EventContext:
rejected=input["rejected"],
)
if input["outlier"]:
context._prev_state_ids = {}
context._current_state_ids = {}
context._outlier = True
app_service_id = input["app_service_id"]
if app_service_id:
context.app_service = storage.main.get_app_service_by_id(app_service_id)

View file

@ -1382,14 +1382,13 @@ class EventCreationHandler:
if event.type == EventTypes.Member:
if event.content["membership"] == Membership.INVITE:
if not event.internal_metadata.outlier:
event.unsigned[
"invite_room_state"
] = await self.store.get_stripped_room_state_from_event_context(
context,
self.room_prejoin_state_types,
membership_user_id=event.sender,
)
event.unsigned[
"invite_room_state"
] = await self.store.get_stripped_room_state_from_event_context(
context,
self.room_prejoin_state_types,
membership_user_id=event.sender,
)
invitee = UserID.from_string(event.state_key)
if not self.hs.is_mine(invitee):
@ -1406,13 +1405,12 @@ class EventCreationHandler:
event.signatures.update(returned_invite.signatures)
if event.content["membership"] == Membership.KNOCK:
if not event.internal_metadata.outlier:
event.unsigned[
"knock_room_state"
] = await self.store.get_stripped_room_state_from_event_context(
context,
self.room_prejoin_state_types,
)
event.unsigned[
"knock_room_state"
] = await self.store.get_stripped_room_state_from_event_context(
context,
self.room_prejoin_state_types,
)
if event.type == EventTypes.Redaction:
original_event = await self.store.get_event(