mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-03 19:04:51 -04:00
parent
36f34e6f3d
commit
a90d16dabc
8 changed files with 118 additions and 58 deletions
|
@ -19,6 +19,7 @@ from canonicaljson import json
|
|||
|
||||
from twisted.internet import defer
|
||||
|
||||
from synapse.logging.opentracing import log_kv, set_tag, trace
|
||||
from synapse.storage._base import SQLBaseStore
|
||||
from synapse.storage.background_updates import BackgroundUpdateStore
|
||||
from synapse.util.caches.expiringcache import ExpiringCache
|
||||
|
@ -72,6 +73,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
"get_new_messages_for_device", get_new_messages_for_device_txn
|
||||
)
|
||||
|
||||
@trace
|
||||
@defer.inlineCallbacks
|
||||
def delete_messages_for_device(self, user_id, device_id, up_to_stream_id):
|
||||
"""
|
||||
|
@ -87,11 +89,15 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
last_deleted_stream_id = self._last_device_delete_cache.get(
|
||||
(user_id, device_id), None
|
||||
)
|
||||
|
||||
set_tag("last_deleted_stream_id", last_deleted_stream_id)
|
||||
|
||||
if last_deleted_stream_id:
|
||||
has_changed = self._device_inbox_stream_cache.has_entity_changed(
|
||||
user_id, last_deleted_stream_id
|
||||
)
|
||||
if not has_changed:
|
||||
log_kv({"message": "No changes in cache since last check"})
|
||||
return 0
|
||||
|
||||
def delete_messages_for_device_txn(txn):
|
||||
|
@ -107,6 +113,10 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
"delete_messages_for_device", delete_messages_for_device_txn
|
||||
)
|
||||
|
||||
log_kv(
|
||||
{"message": "deleted {} messages for device".format(count), "count": count}
|
||||
)
|
||||
|
||||
# Update the cache, ensuring that we only ever increase the value
|
||||
last_deleted_stream_id = self._last_device_delete_cache.get(
|
||||
(user_id, device_id), 0
|
||||
|
@ -117,6 +127,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
|
||||
return count
|
||||
|
||||
@trace
|
||||
def get_new_device_msgs_for_remote(
|
||||
self, destination, last_stream_id, current_stream_id, limit
|
||||
):
|
||||
|
@ -132,16 +143,23 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
in the stream the messages got to.
|
||||
"""
|
||||
|
||||
set_tag("destination", destination)
|
||||
set_tag("last_stream_id", last_stream_id)
|
||||
set_tag("current_stream_id", current_stream_id)
|
||||
set_tag("limit", limit)
|
||||
|
||||
has_changed = self._device_federation_outbox_stream_cache.has_entity_changed(
|
||||
destination, last_stream_id
|
||||
)
|
||||
if not has_changed or last_stream_id == current_stream_id:
|
||||
log_kv({"message": "No new messages in stream"})
|
||||
return defer.succeed(([], current_stream_id))
|
||||
|
||||
if limit <= 0:
|
||||
# This can happen if we run out of room for EDUs in the transaction.
|
||||
return defer.succeed(([], last_stream_id))
|
||||
|
||||
@trace
|
||||
def get_new_messages_for_remote_destination_txn(txn):
|
||||
sql = (
|
||||
"SELECT stream_id, messages_json FROM device_federation_outbox"
|
||||
|
@ -156,6 +174,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
stream_pos = row[0]
|
||||
messages.append(json.loads(row[1]))
|
||||
if len(messages) < limit:
|
||||
log_kv({"message": "Set stream position to current position"})
|
||||
stream_pos = current_stream_id
|
||||
return messages, stream_pos
|
||||
|
||||
|
@ -164,6 +183,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
|||
get_new_messages_for_remote_destination_txn,
|
||||
)
|
||||
|
||||
@trace
|
||||
def delete_device_msgs_for_remote(self, destination, up_to_stream_id):
|
||||
"""Used to delete messages when the remote destination acknowledges
|
||||
their receipt.
|
||||
|
@ -214,6 +234,7 @@ class DeviceInboxStore(DeviceInboxWorkerStore, BackgroundUpdateStore):
|
|||
expiry_ms=30 * 60 * 1000,
|
||||
)
|
||||
|
||||
@trace
|
||||
@defer.inlineCallbacks
|
||||
def add_messages_to_device_inbox(
|
||||
self, local_messages_by_user_then_device, remote_messages_by_destination
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue