Fix using MSC2716 batch sending with event persistence workers (#11220)

Signed-off-by: Tulir Asokan <tulir@beeper.com>
This commit is contained in:
Tulir Asokan 2021-11-29 15:13:23 +02:00 committed by GitHub
parent dc0a3cd596
commit 7b4e228e41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 0 deletions

1
changelog.d/11220.bugfix Normal file
View File

@ -0,0 +1 @@
Fix using MSC2716 batch sending in combination with event persistence workers. Contributed by @tulir at Beeper.

View File

@ -113,6 +113,7 @@ from synapse.storage.databases.main.monthly_active_users import (
) )
from synapse.storage.databases.main.presence import PresenceStore from synapse.storage.databases.main.presence import PresenceStore
from synapse.storage.databases.main.room import RoomWorkerStore from synapse.storage.databases.main.room import RoomWorkerStore
from synapse.storage.databases.main.room_batch import RoomBatchStore
from synapse.storage.databases.main.search import SearchStore from synapse.storage.databases.main.search import SearchStore
from synapse.storage.databases.main.session import SessionStore from synapse.storage.databases.main.session import SessionStore
from synapse.storage.databases.main.stats import StatsStore from synapse.storage.databases.main.stats import StatsStore
@ -240,6 +241,7 @@ class GenericWorkerSlavedStore(
SlavedEventStore, SlavedEventStore,
SlavedKeyStore, SlavedKeyStore,
RoomWorkerStore, RoomWorkerStore,
RoomBatchStore,
DirectoryStore, DirectoryStore,
SlavedApplicationServiceStore, SlavedApplicationServiceStore,
SlavedRegistrationStore, SlavedRegistrationStore,

View File

@ -322,6 +322,11 @@ class _AsyncEventContextImpl(EventContext):
attributes by loading from the database. attributes by loading from the database.
""" """
if self.state_group is None: if self.state_group is None:
# No state group means the event is an outlier. Usually the state_ids dicts are also
# pre-set to empty dicts, but they get reset when the context is serialized, so set
# them to empty dicts again here.
self._current_state_ids = {}
self._prev_state_ids = {}
return return
current_state_ids = await self._storage.state.get_state_ids_for_group( current_state_ids = await self._storage.state.get_state_ids_for_group(