@ -33,12 +33,13 @@ from synapse.api.errors import SynapseError
# these are only included to make the type annotations work
from synapse . events import EventBase # noqa: F401
from synapse . events . snapshot import EventContext # noqa: F401
from synapse . metrics . background_process_metrics import run_as_background_process
from synapse . storage . events_worker import EventsWorkerStore
from synapse . types import RoomStreamToken , get_domain_from_id
from synapse . util . async import ObservableDeferred
from synapse . util . caches . descriptors import cached , cachedInlineCallbacks
from synapse . util . frozenutils import frozendict_json_encoder
from synapse . util . logcontext import PreserveLoggingContext , make_deferred_yieldable
from synapse . util . logcontext import make_deferred_yieldable
from synapse . util . logutils import log_function
from synapse . util . metrics import Measure
@ -155,11 +156,8 @@ class _EventPeristenceQueue(object):
self . _event_persist_queues [ room_id ] = queue
self . _currently_persisting_rooms . discard ( room_id )
# set handle_queue_loop off on the background. We don't want to
# attribute work done in it to the current request, so we drop the
# logcontext altogether.
with PreserveLoggingContext ( ) :
handle_queue_loop ( )
# set handle_queue_loop off in the background
run_as_background_process ( " persist_events " , handle_queue_loop )
def _get_drainining_queue ( self , room_id ) :
queue = self . _event_persist_queues . setdefault ( room_id , deque ( ) )