misc tracing span tweaks

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-12-08 20:31:16 +00:00
parent 5fc8e90e02
commit aba88ccead
16 changed files with 96 additions and 24 deletions

View file

@ -39,7 +39,12 @@ pub(crate) async fn get_media_config_route(
/// ///
/// - Some metadata will be saved in the database /// - Some metadata will be saved in the database
/// - Media will be saved in the media/ directory /// - Media will be saved in the media/ directory
#[tracing::instrument(skip_all, fields(%client), name = "media_upload")] #[tracing::instrument(
name = "media_upload",
level = "debug",
skip_all,
fields(%client),
)]
pub(crate) async fn create_content_route( pub(crate) async fn create_content_route(
State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp, State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp,
body: Ruma<create_content::v3::Request>, body: Ruma<create_content::v3::Request>,
@ -67,7 +72,12 @@ pub(crate) async fn create_content_route(
/// # `GET /_matrix/client/v1/media/thumbnail/{serverName}/{mediaId}` /// # `GET /_matrix/client/v1/media/thumbnail/{serverName}/{mediaId}`
/// ///
/// Load media thumbnail from our server or over federation. /// Load media thumbnail from our server or over federation.
#[tracing::instrument(skip_all, fields(%client), name = "media_thumbnail_get")] #[tracing::instrument(
name = "media_thumbnail_get",
level = "debug",
skip_all,
fields(%client),
)]
pub(crate) async fn get_content_thumbnail_route( pub(crate) async fn get_content_thumbnail_route(
State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp, State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp,
body: Ruma<get_content_thumbnail::v1::Request>, body: Ruma<get_content_thumbnail::v1::Request>,
@ -98,7 +108,12 @@ pub(crate) async fn get_content_thumbnail_route(
/// # `GET /_matrix/client/v1/media/download/{serverName}/{mediaId}` /// # `GET /_matrix/client/v1/media/download/{serverName}/{mediaId}`
/// ///
/// Load media from our server or over federation. /// Load media from our server or over federation.
#[tracing::instrument(skip_all, fields(%client), name = "media_get")] #[tracing::instrument(
name = "media_get",
level = "debug",
skip_all,
fields(%client),
)]
pub(crate) async fn get_content_route( pub(crate) async fn get_content_route(
State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp, State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp,
body: Ruma<get_content::v1::Request>, body: Ruma<get_content::v1::Request>,
@ -128,7 +143,12 @@ pub(crate) async fn get_content_route(
/// # `GET /_matrix/client/v1/media/download/{serverName}/{mediaId}/{fileName}` /// # `GET /_matrix/client/v1/media/download/{serverName}/{mediaId}/{fileName}`
/// ///
/// Load media from our server or over federation as fileName. /// Load media from our server or over federation as fileName.
#[tracing::instrument(skip_all, fields(%client), name = "media_get_af")] #[tracing::instrument(
name = "media_get_af",
level = "debug",
skip_all,
fields(%client),
)]
pub(crate) async fn get_content_as_filename_route( pub(crate) async fn get_content_as_filename_route(
State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp, State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp,
body: Ruma<get_content_as_filename::v1::Request>, body: Ruma<get_content_as_filename::v1::Request>,
@ -158,7 +178,12 @@ pub(crate) async fn get_content_as_filename_route(
/// # `GET /_matrix/client/v1/media/preview_url` /// # `GET /_matrix/client/v1/media/preview_url`
/// ///
/// Returns URL preview. /// Returns URL preview.
#[tracing::instrument(skip_all, fields(%client), name = "url_preview")] #[tracing::instrument(
name = "url_preview",
level = "debug",
skip_all,
fields(%client),
)]
pub(crate) async fn get_media_preview_route( pub(crate) async fn get_media_preview_route(
State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp, State(services): State<crate::State>, InsecureClientIp(client): InsecureClientIp,
body: Ruma<get_media_preview::v1::Request>, body: Ruma<get_media_preview::v1::Request>,

View file

@ -97,6 +97,14 @@ type PresenceUpdates = HashMap<OwnedUserId, PresenceEvent>;
/// For left rooms: /// For left rooms:
/// - If the user left after `since`: `prev_batch` token, empty state (TODO: /// - If the user left after `since`: `prev_batch` token, empty state (TODO:
/// subset of the state at the point of the leave) /// subset of the state at the point of the leave)
#[tracing::instrument(
name = "sync",
level = "debug",
skip_all,
fields(
since = %body.body.since.as_deref().unwrap_or_default(),
)
)]
pub(crate) async fn sync_events_route( pub(crate) async fn sync_events_route(
State(services): State<crate::State>, body: Ruma<sync_events::v3::Request>, State(services): State<crate::State>, body: Ruma<sync_events::v3::Request>,
) -> Result<sync_events::v3::Response, RumaResponse<UiaaResponse>> { ) -> Result<sync_events::v3::Response, RumaResponse<UiaaResponse>> {
@ -391,8 +399,17 @@ async fn process_presence_updates(services: &Services, since: u64, syncing_user:
.await .await
} }
#[tracing::instrument(
name = "left",
level = "debug",
skip_all,
fields(
room_id = %room_id,
full = %full_state,
ll = %lazy_load_enabled,
),
)]
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
#[tracing::instrument(skip_all, fields(user_id = %sender_user, room_id = %room_id), name = "left_room")]
async fn handle_left_room( async fn handle_left_room(
services: &Services, since: u64, room_id: OwnedRoomId, sender_user: &UserId, next_batch_string: &str, services: &Services, since: u64, room_id: OwnedRoomId, sender_user: &UserId, next_batch_string: &str,
full_state: bool, lazy_load_enabled: bool, full_state: bool, lazy_load_enabled: bool,

View file

@ -307,7 +307,12 @@ pub(crate) fn repair(db_opts: &Options, path: &PathBuf) -> Result<()> {
Ok(()) Ok(())
} }
#[tracing::instrument(skip(msg), name = "rocksdb", level = "trace")] #[tracing::instrument(
parent = None,
name = "rocksdb",
level = "trace"
skip(msg),
)]
pub(crate) fn handle_log(level: LogLevel, msg: &str) { pub(crate) fn handle_log(level: LogLevel, msg: &str) {
let msg = msg.trim(); let msg = msg.trim();
if msg.starts_with("Options") { if msg.starts_with("Options") {

View file

@ -33,7 +33,7 @@ where
} }
#[implement(super::Map)] #[implement(super::Map)]
#[tracing::instrument(skip(self, keys), name = "batch_blocking", level = "trace")] #[tracing::instrument(name = "batch_blocking", level = "trace", skip_all)]
pub(crate) fn get_batch_blocking<'a, I, K>(&self, keys: I) -> impl Iterator<Item = Result<Handle<'_>>> + Send pub(crate) fn get_batch_blocking<'a, I, K>(&self, keys: I) -> impl Iterator<Item = Result<Handle<'_>>> + Send
where where
I: Iterator<Item = &'a K> + ExactSizeIterator + Debug + Send, I: Iterator<Item = &'a K> + ExactSizeIterator + Debug + Send,

View file

@ -10,7 +10,7 @@ pub(crate) type MapsKey = String;
pub(crate) fn open(db: &Arc<Engine>) -> Result<Maps> { open_list(db, MAPS) } pub(crate) fn open(db: &Arc<Engine>) -> Result<Maps> { open_list(db, MAPS) }
#[tracing::instrument(skip_all, level = "debug")] #[tracing::instrument(name = "maps", level = "debug", skip_all)]
pub(crate) fn open_list(db: &Arc<Engine>, maps: &[&str]) -> Result<Maps> { pub(crate) fn open_list(db: &Arc<Engine>, maps: &[&str]) -> Result<Maps> {
Ok(maps Ok(maps
.iter() .iter()

View file

@ -113,10 +113,14 @@ async fn spawn_until(self: &Arc<Self>, recv: Receiver<Cmd>, max: usize) -> Resul
} }
#[implement(Pool)] #[implement(Pool)]
#[tracing::instrument(
name = "spawn",
level = "trace",
skip_all,
fields(id = %workers.len())
)]
fn spawn_one(self: &Arc<Self>, workers: &mut JoinSet<()>, recv: Receiver<Cmd>) -> Result { fn spawn_one(self: &Arc<Self>, workers: &mut JoinSet<()>, recv: Receiver<Cmd>) -> Result {
let id = workers.len(); let id = workers.len();
debug!(?id, "spawning");
let self_ = self.clone(); let self_ = self.clone();
let _abort = workers.spawn_blocking_on(move || self_.worker(id, recv), self.server.runtime()); let _abort = workers.spawn_blocking_on(move || self_.worker(id, recv), self.server.runtime());
@ -181,7 +185,14 @@ async fn execute(&self, cmd: Cmd) -> Result {
} }
#[implement(Pool)] #[implement(Pool)]
#[tracing::instrument(skip(self, recv))] #[tracing::instrument(
parent = None,
level = "debug",
skip(self, recv),
fields(
tid = ?std::thread::current().id(),
),
)]
fn worker(self: Arc<Self>, id: usize, recv: Receiver<Cmd>) { fn worker(self: Arc<Self>, id: usize, recv: Receiver<Cmd>) {
debug!("worker spawned"); debug!("worker spawned");
defer! {{ debug!("worker finished"); }} defer! {{ debug!("worker finished"); }}

View file

@ -59,6 +59,11 @@ fn main() -> Result<(), Error> {
/// Operate the server normally in release-mode static builds. This will start, /// Operate the server normally in release-mode static builds. This will start,
/// run and stop the server within the asynchronous runtime. /// run and stop the server within the asynchronous runtime.
#[cfg(not(conduit_mods))] #[cfg(not(conduit_mods))]
#[tracing::instrument(
name = "main",
parent = None,
skip_all
)]
async fn async_main(server: &Arc<Server>) -> Result<(), Error> { async fn async_main(server: &Arc<Server>) -> Result<(), Error> {
extern crate conduit_router as router; extern crate conduit_router as router;

View file

@ -150,8 +150,8 @@ fn cors_layer(_server: &Server) -> CorsLayer {
fn body_limit_layer(server: &Server) -> DefaultBodyLimit { DefaultBodyLimit::max(server.config.max_request_size) } fn body_limit_layer(server: &Server) -> DefaultBodyLimit { DefaultBodyLimit::max(server.config.max_request_size) }
#[tracing::instrument(name = "panic", level = "error", skip_all)]
#[allow(clippy::needless_pass_by_value)] #[allow(clippy::needless_pass_by_value)]
#[tracing::instrument(skip_all, name = "panic")]
fn catch_panic(err: Box<dyn Any + Send + 'static>) -> http::Response<http_body_util::Full<bytes::Bytes>> { fn catch_panic(err: Box<dyn Any + Send + 'static>) -> http::Response<http_body_util::Full<bytes::Bytes>> {
//TODO: XXX //TODO: XXX
/* /*
@ -197,7 +197,7 @@ fn tracing_span<T>(request: &http::Request<T>) -> tracing::Span {
let method = request.method(); let method = request.method();
tracing::info_span!("router:", %method, %path) tracing::debug_span!(parent: None, "router", %method, %path)
} }
fn truncated_matched_path(path: &MatchedPath) -> &str { fn truncated_matched_path(path: &MatchedPath) -> &str {

View file

@ -8,7 +8,11 @@ use conduit::{debug, debug_error, debug_warn, defer, err, error, trace, Result};
use conduit_service::Services; use conduit_service::Services;
use http::{Method, StatusCode, Uri}; use http::{Method, StatusCode, Uri};
#[tracing::instrument(skip_all, level = "debug")] #[tracing::instrument(
parent = None,
level = "trace",
skip_all,
)]
pub(crate) async fn spawn( pub(crate) async fn spawn(
State(services): State<Arc<Services>>, req: http::Request<axum::body::Body>, next: axum::middleware::Next, State(services): State<Arc<Services>>, req: http::Request<axum::body::Body>, next: axum::middleware::Next,
) -> Result<Response, StatusCode> { ) -> Result<Response, StatusCode> {
@ -34,7 +38,7 @@ pub(crate) async fn spawn(
task.await.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR) task.await.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)
} }
#[tracing::instrument(skip_all, name = "handle")] #[tracing::instrument(level = "debug", skip_all)]
pub(crate) async fn handle( pub(crate) async fn handle(
State(services): State<Arc<Services>>, req: http::Request<axum::body::Body>, next: axum::middleware::Next, State(services): State<Arc<Services>>, req: http::Request<axum::body::Body>, next: axum::middleware::Next,
) -> Result<Response, StatusCode> { ) -> Result<Response, StatusCode> {

View file

@ -30,7 +30,7 @@ type MakeService = IntoMakeServiceWithConnectInfo<Router, net::SocketAddr>;
const NULL_ADDR: net::SocketAddr = net::SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0); const NULL_ADDR: net::SocketAddr = net::SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0);
const FINI_POLL_INTERVAL: Duration = Duration::from_millis(750); const FINI_POLL_INTERVAL: Duration = Duration::from_millis(750);
#[tracing::instrument(skip_all)] #[tracing::instrument(skip_all, level = "debug")]
pub(super) async fn serve(server: &Arc<Server>, app: Router, mut shutdown: broadcast::Receiver<()>) -> Result<()> { pub(super) async fn serve(server: &Arc<Server>, app: Router, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
let mut tasks = JoinSet::<()>::new(); let mut tasks = JoinSet::<()>::new();
let executor = TokioExecutor::new(); let executor = TokioExecutor::new();

View file

@ -155,6 +155,12 @@ impl Manager {
/// should never error with a panic, and if so it should propagate, but it may /// should never error with a panic, and if so it should propagate, but it may
/// error with an Abort which the manager should handle along with results to /// error with an Abort which the manager should handle along with results to
/// determine if the worker should be restarted. /// determine if the worker should be restarted.
#[tracing::instrument(
parent = None,
level = "trace",
skip_all,
fields(service = %service.name()),
)]
async fn worker(service: Arc<dyn Service>) -> WorkerResult { async fn worker(service: Arc<dyn Service>) -> WorkerResult {
let service_ = Arc::clone(&service); let service_ = Arc::clone(&service);
let result = AssertUnwindSafe(service_.worker()) let result = AssertUnwindSafe(service_.worker())

View file

@ -26,7 +26,7 @@ impl ActualDest {
} }
impl super::Service { impl super::Service {
#[tracing::instrument(skip_all, name = "resolve")] #[tracing::instrument(skip_all, level = "debug", name = "resolve")]
pub(crate) async fn get_actual_dest(&self, server_name: &ServerName) -> Result<ActualDest> { pub(crate) async fn get_actual_dest(&self, server_name: &ServerName) -> Result<ActualDest> {
let (result, cached) = if let Some(result) = self.get_cached_destination(server_name) { let (result, cached) = if let Some(result) = self.get_cached_destination(server_name) {
(result, true) (result, true)

View file

@ -184,7 +184,7 @@ impl Service {
/// Whether a server is allowed to see an event through federation, based on /// Whether a server is allowed to see an event through federation, based on
/// the room's history_visibility at that event's state. /// the room's history_visibility at that event's state.
#[tracing::instrument(skip(self, origin, room_id, event_id))] #[tracing::instrument(skip_all, level = "trace")]
pub async fn server_can_see_event(&self, origin: &ServerName, room_id: &RoomId, event_id: &EventId) -> bool { pub async fn server_can_see_event(&self, origin: &ServerName, room_id: &RoomId, event_id: &EventId) -> bool {
let Ok(shortstatehash) = self.pdu_shortstatehash(event_id).await else { let Ok(shortstatehash) = self.pdu_shortstatehash(event_id).await else {
return true; return true;
@ -242,7 +242,7 @@ impl Service {
/// Whether a user is allowed to see an event, based on /// Whether a user is allowed to see an event, based on
/// the room's history_visibility at that event's state. /// the room's history_visibility at that event's state.
#[tracing::instrument(skip(self, user_id, room_id, event_id))] #[tracing::instrument(skip_all, level = "trace")]
pub async fn user_can_see_event(&self, user_id: &UserId, room_id: &RoomId, event_id: &EventId) -> bool { pub async fn user_can_see_event(&self, user_id: &UserId, room_id: &RoomId, event_id: &EventId) -> bool {
let Ok(shortstatehash) = self.pdu_shortstatehash(event_id).await else { let Ok(shortstatehash) = self.pdu_shortstatehash(event_id).await else {
return true; return true;
@ -293,7 +293,7 @@ impl Service {
/// Whether a user is allowed to see an event, based on /// Whether a user is allowed to see an event, based on
/// the room's history_visibility at that event's state. /// the room's history_visibility at that event's state.
#[tracing::instrument(skip(self, user_id, room_id))] #[tracing::instrument(skip_all, level = "trace")]
pub async fn user_can_see_state_events(&self, user_id: &UserId, room_id: &RoomId) -> bool { pub async fn user_can_see_state_events(&self, user_id: &UserId, room_id: &RoomId) -> bool {
if self.services.state_cache.is_joined(user_id, room_id).await { if self.services.state_cache.is_joined(user_id, room_id).await {
return true; return true;

View file

@ -176,7 +176,6 @@ impl Data {
} }
} }
#[tracing::instrument(skip(key), level = "debug")]
fn parse_servercurrentevent(key: &[u8], value: &[u8]) -> Result<(Destination, SendingEvent)> { fn parse_servercurrentevent(key: &[u8], value: &[u8]) -> Result<(Destination, SendingEvent)> {
// Appservices start with a plus // Appservices start with a plus
Ok::<_, Error>(if key.starts_with(b"+") { Ok::<_, Error>(if key.starts_with(b"+") {

View file

@ -24,7 +24,7 @@ use crate::{
}; };
impl super::Service { impl super::Service {
#[tracing::instrument(skip(self, client, request), name = "send")] #[tracing::instrument(skip_all, level = "debug")]
pub async fn send<T>(&self, client: &Client, dest: &ServerName, request: T) -> Result<T::IncomingResponse> pub async fn send<T>(&self, client: &Client, dest: &ServerName, request: T) -> Result<T::IncomingResponse>
where where
T: OutgoingRequest + Send, T: OutgoingRequest + Send,

View file

@ -62,7 +62,7 @@ pub const PDU_LIMIT: usize = 50;
pub const EDU_LIMIT: usize = 100; pub const EDU_LIMIT: usize = 100;
impl Service { impl Service {
#[tracing::instrument(skip_all, name = "sender")] #[tracing::instrument(skip_all, level = "debug")]
pub(super) async fn sender(&self) -> Result<()> { pub(super) async fn sender(&self) -> Result<()> {
let mut statuses: CurTransactionStatus = CurTransactionStatus::new(); let mut statuses: CurTransactionStatus = CurTransactionStatus::new();
let mut futures: SendingFutures<'_> = FuturesUnordered::new(); let mut futures: SendingFutures<'_> = FuturesUnordered::new();