Fix bug when running presence off master (#10149)

Hopefully fixes #10027.
This commit is contained in:
Erik Johnston 2021-06-11 10:27:12 +01:00 committed by GitHub
parent b31daac01c
commit d26d15ba3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 1 deletions

1
changelog.d/10149.bugfix Normal file
View file

@ -0,0 +1 @@
Fix a bug which caused presence updates to stop working some time after restart, when using a presence writer worker.

View file

@ -50,7 +50,7 @@ class PresenceStore(SQLBaseStore):
instance_name=self._instance_name, instance_name=self._instance_name,
tables=[("presence_stream", "instance_name", "stream_id")], tables=[("presence_stream", "instance_name", "stream_id")],
sequence_name="presence_stream_sequence", sequence_name="presence_stream_sequence",
writers=hs.config.worker.writers.to_device, writers=hs.config.worker.writers.presence,
) )
else: else:
self._presence_id_gen = StreamIdGenerator( self._presence_id_gen = StreamIdGenerator(

View file

@ -397,6 +397,11 @@ class MultiWriterIdGenerator:
# ... persist event ... # ... persist event ...
""" """
# If we have a list of instances that are allowed to write to this
# stream, make sure we're in it.
if self._writers and self._instance_name not in self._writers:
raise Exception("Tried to allocate stream ID on non-writer")
return _MultiWriterCtxManager(self) return _MultiWriterCtxManager(self)
def get_next_mult(self, n: int): def get_next_mult(self, n: int):
@ -406,6 +411,11 @@ class MultiWriterIdGenerator:
# ... persist events ... # ... persist events ...
""" """
# If we have a list of instances that are allowed to write to this
# stream, make sure we're in it.
if self._writers and self._instance_name not in self._writers:
raise Exception("Tried to allocate stream ID on non-writer")
return _MultiWriterCtxManager(self, n) return _MultiWriterCtxManager(self, n)
def get_next_txn(self, txn: LoggingTransaction): def get_next_txn(self, txn: LoggingTransaction):
@ -416,6 +426,11 @@ class MultiWriterIdGenerator:
# ... persist event ... # ... persist event ...
""" """
# If we have a list of instances that are allowed to write to this
# stream, make sure we're in it.
if self._writers and self._instance_name not in self._writers:
raise Exception("Tried to allocate stream ID on non-writer")
next_id = self._load_next_id_txn(txn) next_id = self._load_next_id_txn(txn)
with self._lock: with self._lock: