mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-22 12:44:30 +03:00
Trace device messages.
This commit is contained in:
parent
fd669e5e44
commit
c988c02c7c
3 changed files with 35 additions and 0 deletions
|
@ -20,6 +20,7 @@ from twisted.internet import defer
|
||||||
from synapse.api.errors import SynapseError
|
from synapse.api.errors import SynapseError
|
||||||
from synapse.types import UserID, get_domain_from_id
|
from synapse.types import UserID, get_domain_from_id
|
||||||
from synapse.util.stringutils import random_string
|
from synapse.util.stringutils import random_string
|
||||||
|
from synapse.util.tracerutils import TracerUtil, trace_defered_function
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ class DeviceMessageHandler(object):
|
||||||
"to_device_key", stream_id, users=local_messages.keys()
|
"to_device_key", stream_id, users=local_messages.keys()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@trace_defered_function
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def send_device_message(self, sender_user_id, message_type, messages):
|
def send_device_message(self, sender_user_id, message_type, messages):
|
||||||
|
|
||||||
|
@ -109,6 +111,7 @@ class DeviceMessageHandler(object):
|
||||||
"message_id": message_id,
|
"message_id": message_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TracerUtil.log_kv(local_messages)
|
||||||
stream_id = yield self.store.add_messages_to_device_inbox(
|
stream_id = yield self.store.add_messages_to_device_inbox(
|
||||||
local_messages, remote_edu_contents
|
local_messages, remote_edu_contents
|
||||||
)
|
)
|
||||||
|
@ -117,6 +120,7 @@ class DeviceMessageHandler(object):
|
||||||
"to_device_key", stream_id, users=local_messages.keys()
|
"to_device_key", stream_id, users=local_messages.keys()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
TracerUtil.log_kv(remote_messages)
|
||||||
for destination in remote_messages.keys():
|
for destination in remote_messages.keys():
|
||||||
# Enqueue a new federation transaction to send the new
|
# Enqueue a new federation transaction to send the new
|
||||||
# device messages to each remote destination.
|
# device messages to each remote destination.
|
||||||
|
|
|
@ -20,6 +20,11 @@ from twisted.internet import defer
|
||||||
from synapse.http import servlet
|
from synapse.http import servlet
|
||||||
from synapse.http.servlet import parse_json_object_from_request
|
from synapse.http.servlet import parse_json_object_from_request
|
||||||
from synapse.rest.client.transactions import HttpTransactionCache
|
from synapse.rest.client.transactions import HttpTransactionCache
|
||||||
|
from synapse.util.tracerutils import (
|
||||||
|
TracerUtil,
|
||||||
|
trace_defered_function_using_operation_name,
|
||||||
|
tag_args,
|
||||||
|
)
|
||||||
|
|
||||||
from ._base import client_patterns
|
from ._base import client_patterns
|
||||||
|
|
||||||
|
@ -42,7 +47,10 @@ class SendToDeviceRestServlet(servlet.RestServlet):
|
||||||
self.txns = HttpTransactionCache(hs)
|
self.txns = HttpTransactionCache(hs)
|
||||||
self.device_message_handler = hs.get_device_message_handler()
|
self.device_message_handler = hs.get_device_message_handler()
|
||||||
|
|
||||||
|
@trace_defered_function_using_operation_name("sendToDevice")
|
||||||
def on_PUT(self, request, message_type, txn_id):
|
def on_PUT(self, request, message_type, txn_id):
|
||||||
|
TracerUtil.set_tag("message_type", message_type)
|
||||||
|
TracerUtil.set_tag("txn_id", txn_id)
|
||||||
return self.txns.fetch_or_execute_request(
|
return self.txns.fetch_or_execute_request(
|
||||||
request, self._put, request, message_type, txn_id
|
request, self._put, request, message_type, txn_id
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,6 +22,7 @@ from twisted.internet import defer
|
||||||
from synapse.storage._base import SQLBaseStore
|
from synapse.storage._base import SQLBaseStore
|
||||||
from synapse.storage.background_updates import BackgroundUpdateStore
|
from synapse.storage.background_updates import BackgroundUpdateStore
|
||||||
from synapse.util.caches.expiringcache import ExpiringCache
|
from synapse.util.caches.expiringcache import ExpiringCache
|
||||||
|
from synapse.util.tracerutils import TracerUtil, trace_defered_function, trace_function
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -72,6 +73,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
"get_new_messages_for_device", get_new_messages_for_device_txn
|
"get_new_messages_for_device", get_new_messages_for_device_txn
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@trace_defered_function
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def delete_messages_for_device(self, user_id, device_id, up_to_stream_id):
|
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(
|
last_deleted_stream_id = self._last_device_delete_cache.get(
|
||||||
(user_id, device_id), None
|
(user_id, device_id), None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
TracerUtil.set_tag("last_deleted_stream_id", last_deleted_stream_id)
|
||||||
|
|
||||||
if last_deleted_stream_id:
|
if last_deleted_stream_id:
|
||||||
has_changed = self._device_inbox_stream_cache.has_entity_changed(
|
has_changed = self._device_inbox_stream_cache.has_entity_changed(
|
||||||
user_id, last_deleted_stream_id
|
user_id, last_deleted_stream_id
|
||||||
)
|
)
|
||||||
if not has_changed:
|
if not has_changed:
|
||||||
|
TracerUtil.log_kv({"message": "No changes in cache since last check"})
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def delete_messages_for_device_txn(txn):
|
def delete_messages_for_device_txn(txn):
|
||||||
|
@ -107,6 +113,10 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
"delete_messages_for_device", delete_messages_for_device_txn
|
"delete_messages_for_device", delete_messages_for_device_txn
|
||||||
)
|
)
|
||||||
|
|
||||||
|
TracerUtil.log_kv(
|
||||||
|
{"message": "deleted {} messages for device".format(count), "count": count}
|
||||||
|
)
|
||||||
|
|
||||||
# Update the cache, ensuring that we only ever increase the value
|
# Update the cache, ensuring that we only ever increase the value
|
||||||
last_deleted_stream_id = self._last_device_delete_cache.get(
|
last_deleted_stream_id = self._last_device_delete_cache.get(
|
||||||
(user_id, device_id), 0
|
(user_id, device_id), 0
|
||||||
|
@ -117,6 +127,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
|
|
||||||
return count
|
return count
|
||||||
|
|
||||||
|
@trace_defered_function
|
||||||
def get_new_device_msgs_for_remote(
|
def get_new_device_msgs_for_remote(
|
||||||
self, destination, last_stream_id, current_stream_id, limit
|
self, destination, last_stream_id, current_stream_id, limit
|
||||||
):
|
):
|
||||||
|
@ -132,16 +143,23 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
in the stream the messages got to.
|
in the stream the messages got to.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
TracerUtil.set_tag("destination", destination)
|
||||||
|
TracerUtil.set_tag("last_stream_id", last_stream_id)
|
||||||
|
TracerUtil.set_tag("current_stream_id", current_stream_id)
|
||||||
|
TracerUtil.set_tag("limit", limit)
|
||||||
|
|
||||||
has_changed = self._device_federation_outbox_stream_cache.has_entity_changed(
|
has_changed = self._device_federation_outbox_stream_cache.has_entity_changed(
|
||||||
destination, last_stream_id
|
destination, last_stream_id
|
||||||
)
|
)
|
||||||
if not has_changed or last_stream_id == current_stream_id:
|
if not has_changed or last_stream_id == current_stream_id:
|
||||||
|
TracerUtil.log_kv({"message": "No new messages in stream"})
|
||||||
return defer.succeed(([], current_stream_id))
|
return defer.succeed(([], current_stream_id))
|
||||||
|
|
||||||
if limit <= 0:
|
if limit <= 0:
|
||||||
# This can happen if we run out of room for EDUs in the transaction.
|
# This can happen if we run out of room for EDUs in the transaction.
|
||||||
return defer.succeed(([], last_stream_id))
|
return defer.succeed(([], last_stream_id))
|
||||||
|
|
||||||
|
@trace_function
|
||||||
def get_new_messages_for_remote_destination_txn(txn):
|
def get_new_messages_for_remote_destination_txn(txn):
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT stream_id, messages_json FROM device_federation_outbox"
|
"SELECT stream_id, messages_json FROM device_federation_outbox"
|
||||||
|
@ -156,6 +174,9 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
stream_pos = row[0]
|
stream_pos = row[0]
|
||||||
messages.append(json.loads(row[1]))
|
messages.append(json.loads(row[1]))
|
||||||
if len(messages) < limit:
|
if len(messages) < limit:
|
||||||
|
TracerUtil.log_kv(
|
||||||
|
{"message": "Set stream position to current position"}
|
||||||
|
)
|
||||||
stream_pos = current_stream_id
|
stream_pos = current_stream_id
|
||||||
return (messages, stream_pos)
|
return (messages, stream_pos)
|
||||||
|
|
||||||
|
@ -164,6 +185,7 @@ class DeviceInboxWorkerStore(SQLBaseStore):
|
||||||
get_new_messages_for_remote_destination_txn,
|
get_new_messages_for_remote_destination_txn,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@trace_defered_function
|
||||||
def delete_device_msgs_for_remote(self, destination, up_to_stream_id):
|
def delete_device_msgs_for_remote(self, destination, up_to_stream_id):
|
||||||
"""Used to delete messages when the remote destination acknowledges
|
"""Used to delete messages when the remote destination acknowledges
|
||||||
their receipt.
|
their receipt.
|
||||||
|
@ -214,6 +236,7 @@ class DeviceInboxStore(DeviceInboxWorkerStore, BackgroundUpdateStore):
|
||||||
expiry_ms=30 * 60 * 1000,
|
expiry_ms=30 * 60 * 1000,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@trace_defered_function
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def add_messages_to_device_inbox(
|
def add_messages_to_device_inbox(
|
||||||
self, local_messages_by_user_then_device, remote_messages_by_destination
|
self, local_messages_by_user_then_device, remote_messages_by_destination
|
||||||
|
|
Loading…
Reference in a new issue