|
|
@@ -87,25 +87,32 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
self._instance_name in hs.config.worker.writers.to_device |
|
|
|
) |
|
|
|
|
|
|
|
self._device_inbox_id_gen: AbstractStreamIdGenerator = ( |
|
|
|
self._to_device_msg_id_gen: AbstractStreamIdGenerator = ( |
|
|
|
MultiWriterIdGenerator( |
|
|
|
db_conn=db_conn, |
|
|
|
db=database, |
|
|
|
notifier=hs.get_replication_notifier(), |
|
|
|
stream_name="to_device", |
|
|
|
instance_name=self._instance_name, |
|
|
|
tables=[("device_inbox", "instance_name", "stream_id")], |
|
|
|
tables=[ |
|
|
|
("device_inbox", "instance_name", "stream_id"), |
|
|
|
("device_federation_outbox", "instance_name", "stream_id"), |
|
|
|
], |
|
|
|
sequence_name="device_inbox_sequence", |
|
|
|
writers=hs.config.worker.writers.to_device, |
|
|
|
) |
|
|
|
) |
|
|
|
else: |
|
|
|
self._can_write_to_device = True |
|
|
|
self._device_inbox_id_gen = StreamIdGenerator( |
|
|
|
db_conn, hs.get_replication_notifier(), "device_inbox", "stream_id" |
|
|
|
self._to_device_msg_id_gen = StreamIdGenerator( |
|
|
|
db_conn, |
|
|
|
hs.get_replication_notifier(), |
|
|
|
"device_inbox", |
|
|
|
"stream_id", |
|
|
|
extra_tables=[("device_federation_outbox", "stream_id")], |
|
|
|
) |
|
|
|
|
|
|
|
max_device_inbox_id = self._device_inbox_id_gen.get_current_token() |
|
|
|
max_device_inbox_id = self._to_device_msg_id_gen.get_current_token() |
|
|
|
device_inbox_prefill, min_device_inbox_id = self.db_pool.get_cache_dict( |
|
|
|
db_conn, |
|
|
|
"device_inbox", |
|
|
@@ -145,8 +152,8 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
) -> None: |
|
|
|
if stream_name == ToDeviceStream.NAME: |
|
|
|
# If replication is happening than postgres must be being used. |
|
|
|
assert isinstance(self._device_inbox_id_gen, MultiWriterIdGenerator) |
|
|
|
self._device_inbox_id_gen.advance(instance_name, token) |
|
|
|
assert isinstance(self._to_device_msg_id_gen, MultiWriterIdGenerator) |
|
|
|
self._to_device_msg_id_gen.advance(instance_name, token) |
|
|
|
for row in rows: |
|
|
|
if row.entity.startswith("@"): |
|
|
|
self._device_inbox_stream_cache.entity_has_changed( |
|
|
@@ -162,11 +169,11 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
self, stream_name: str, instance_name: str, token: int |
|
|
|
) -> None: |
|
|
|
if stream_name == ToDeviceStream.NAME: |
|
|
|
self._device_inbox_id_gen.advance(instance_name, token) |
|
|
|
self._to_device_msg_id_gen.advance(instance_name, token) |
|
|
|
super().process_replication_position(stream_name, instance_name, token) |
|
|
|
|
|
|
|
def get_to_device_stream_token(self) -> int: |
|
|
|
return self._device_inbox_id_gen.get_current_token() |
|
|
|
return self._to_device_msg_id_gen.get_current_token() |
|
|
|
|
|
|
|
async def get_messages_for_user_devices( |
|
|
|
self, |
|
|
@@ -801,7 +808,7 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
msg.get(EventContentFields.TO_DEVICE_MSGID), |
|
|
|
) |
|
|
|
|
|
|
|
async with self._device_inbox_id_gen.get_next() as stream_id: |
|
|
|
async with self._to_device_msg_id_gen.get_next() as stream_id: |
|
|
|
now_ms = self._clock.time_msec() |
|
|
|
await self.db_pool.runInteraction( |
|
|
|
"add_messages_to_device_inbox", add_messages_txn, now_ms, stream_id |
|
|
@@ -813,7 +820,7 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
destination, stream_id |
|
|
|
) |
|
|
|
|
|
|
|
return self._device_inbox_id_gen.get_current_token() |
|
|
|
return self._to_device_msg_id_gen.get_current_token() |
|
|
|
|
|
|
|
async def add_messages_from_remote_to_device_inbox( |
|
|
|
self, |
|
|
@@ -857,7 +864,7 @@ class DeviceInboxWorkerStore(SQLBaseStore): |
|
|
|
txn, stream_id, local_messages_by_user_then_device |
|
|
|
) |
|
|
|
|
|
|
|
async with self._device_inbox_id_gen.get_next() as stream_id: |
|
|
|
async with self._to_device_msg_id_gen.get_next() as stream_id: |
|
|
|
now_ms = self._clock.time_msec() |
|
|
|
await self.db_pool.runInteraction( |
|
|
|
"add_messages_from_remote_to_device_inbox", |
|
|
|