state-res: improve tracing spans and events
* Make use of tracing's structured logging features * Change some wording to align with the spec
This commit is contained in:
parent
35e459d86e
commit
c3fb396352
@ -18,7 +18,7 @@ use serde::{
|
|||||||
Deserialize,
|
Deserialize,
|
||||||
};
|
};
|
||||||
use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue};
|
use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue};
|
||||||
use tracing::{debug, error, warn};
|
use tracing::{debug, trace, error, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
power_levels::{
|
power_levels::{
|
||||||
@ -747,7 +747,12 @@ fn valid_membership_change(
|
|||||||
fn can_send_event(event: impl Event, ple: Option<impl Event>, user_level: Int) -> bool {
|
fn can_send_event(event: impl Event, ple: Option<impl Event>, user_level: Int) -> bool {
|
||||||
let event_type_power_level = get_send_level(event.event_type(), event.state_key(), ple);
|
let event_type_power_level = get_send_level(event.event_type(), event.state_key(), ple);
|
||||||
|
|
||||||
debug!("{} ev_type {event_type_power_level} usr {user_level}", event.event_id());
|
debug!(
|
||||||
|
required_level = %event_type_power_level,
|
||||||
|
user_level = %user_level,
|
||||||
|
state_key = ?event.state_key(),
|
||||||
|
"permissions factors",
|
||||||
|
);
|
||||||
|
|
||||||
if user_level < event_type_power_level {
|
if user_level < event_type_power_level {
|
||||||
return false;
|
return false;
|
||||||
@ -772,7 +777,7 @@ fn check_power_levels(
|
|||||||
match power_event.state_key() {
|
match power_event.state_key() {
|
||||||
Some("") => {}
|
Some("") => {}
|
||||||
Some(key) => {
|
Some(key) => {
|
||||||
error!("m.room.power_levels event has non-empty state key: {key}");
|
error!(state_key = key, "m.room.power_levels event has non-empty state key");
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
@ -810,7 +815,7 @@ fn check_power_levels(
|
|||||||
user_levels_to_check.insert(user);
|
user_levels_to_check.insert(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("users to check {user_levels_to_check:?}");
|
trace!(set = ?user_levels_to_check, "user levels to check");
|
||||||
|
|
||||||
let mut event_levels_to_check = BTreeSet::new();
|
let mut event_levels_to_check = BTreeSet::new();
|
||||||
let old_list = ¤t_content.events;
|
let old_list = ¤t_content.events;
|
||||||
@ -819,7 +824,7 @@ fn check_power_levels(
|
|||||||
event_levels_to_check.insert(ev_id);
|
event_levels_to_check.insert(ev_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("events to check {event_levels_to_check:?}");
|
trace!(set = ?event_levels_to_check, "event levels to check");
|
||||||
|
|
||||||
let old_state = ¤t_content;
|
let old_state = ¤t_content;
|
||||||
let new_state = &user_content;
|
let new_state = &user_content;
|
||||||
|
@ -75,16 +75,16 @@ where
|
|||||||
// Split non-conflicting and conflicting state
|
// Split non-conflicting and conflicting state
|
||||||
let (clean, conflicting) = separate(state_sets.into_iter());
|
let (clean, conflicting) = separate(state_sets.into_iter());
|
||||||
|
|
||||||
debug!("non conflicting events: {}", clean.len());
|
debug!(count = clean.len(), "non-conflicting events");
|
||||||
trace!("{clean:?}");
|
trace!(map = ?clean, "non-conflicting events");
|
||||||
|
|
||||||
if conflicting.is_empty() {
|
if conflicting.is_empty() {
|
||||||
debug!("no conflicting state found");
|
debug!("no conflicting state found");
|
||||||
return Ok(clean);
|
return Ok(clean);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("conflicting events: {}", conflicting.len());
|
debug!(count = conflicting.len(), "conflicting events");
|
||||||
debug!("{conflicting:?}");
|
trace!(map = ?conflicting, "conflicting events");
|
||||||
|
|
||||||
let auth_chain_diff =
|
let auth_chain_diff =
|
||||||
get_auth_chain_diff(&auth_chain_sets).chain(conflicting.into_values().flatten());
|
get_auth_chain_diff(&auth_chain_sets).chain(conflicting.into_values().flatten());
|
||||||
@ -97,8 +97,8 @@ where
|
|||||||
.collect()
|
.collect()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
debug!("full conflicted set: {}", all_conflicted.len());
|
debug!(count = all_conflicted.len(), "full conflicted set");
|
||||||
debug!("{all_conflicted:?}");
|
trace!(set = ?all_conflicted, "full conflicted set");
|
||||||
|
|
||||||
// We used to check that all events are events from the correct room
|
// We used to check that all events are events from the correct room
|
||||||
// this is now a check the caller of `resolve` must make.
|
// this is now a check the caller of `resolve` must make.
|
||||||
@ -114,8 +114,8 @@ where
|
|||||||
let sorted_control_levels =
|
let sorted_control_levels =
|
||||||
reverse_topological_power_sort(control_events, &all_conflicted, &event_fetch).await?;
|
reverse_topological_power_sort(control_events, &all_conflicted, &event_fetch).await?;
|
||||||
|
|
||||||
debug!("sorted control events: {}", sorted_control_levels.len());
|
debug!(count = sorted_control_levels.len(), "power events");
|
||||||
trace!("{sorted_control_levels:?}");
|
trace!(list = ?sorted_control_levels, "sorted power events");
|
||||||
|
|
||||||
let room_version = RoomVersion::new(room_version)?;
|
let room_version = RoomVersion::new(room_version)?;
|
||||||
// Sequentially auth check each control event.
|
// Sequentially auth check each control event.
|
||||||
@ -123,8 +123,8 @@ where
|
|||||||
iterative_auth_check(&room_version, &sorted_control_levels, clean.clone(), &event_fetch)
|
iterative_auth_check(&room_version, &sorted_control_levels, clean.clone(), &event_fetch)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
debug!("resolved control events: {}", resolved_control.len());
|
debug!(count = resolved_control.len(), "resolved power events");
|
||||||
trace!("{resolved_control:?}");
|
trace!(map = ?resolved_control, "resolved power events");
|
||||||
|
|
||||||
// At this point the control_events have been resolved we now have to
|
// At this point the control_events have been resolved we now have to
|
||||||
// sort the remaining events using the mainline of the resolved power level.
|
// sort the remaining events using the mainline of the resolved power level.
|
||||||
@ -138,18 +138,18 @@ where
|
|||||||
.cloned()
|
.cloned()
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
debug!("events left to resolve: {}", events_to_resolve.len());
|
debug!(count = events_to_resolve.len(), "events left to resolve");
|
||||||
trace!("{events_to_resolve:?}");
|
trace!(list = ?events_to_resolve, "events left to resolve");
|
||||||
|
|
||||||
// This "epochs" power level event
|
// This "epochs" power level event
|
||||||
let power_event = resolved_control.get(&(StateEventType::RoomPowerLevels, "".into()));
|
let power_event = resolved_control.get(&(StateEventType::RoomPowerLevels, "".into()));
|
||||||
|
|
||||||
debug!("power event: {power_event:?}");
|
debug!(event_id = ?power_event, "power event");
|
||||||
|
|
||||||
let sorted_left_events =
|
let sorted_left_events =
|
||||||
mainline_sort(&events_to_resolve, power_event.cloned(), &event_fetch).await?;
|
mainline_sort(&events_to_resolve, power_event.cloned(), &event_fetch).await?;
|
||||||
|
|
||||||
trace!("events left, sorted: {sorted_left_events:?}");
|
trace!(list = ?sorted_left_events, "events left, sorted");
|
||||||
|
|
||||||
let mut resolved_state = iterative_auth_check(
|
let mut resolved_state = iterative_auth_check(
|
||||||
&room_version,
|
&room_version,
|
||||||
@ -162,6 +162,9 @@ where
|
|||||||
// Add unconflicted state to the resolved state
|
// Add unconflicted state to the resolved state
|
||||||
// We priorities the unconflicting state
|
// We priorities the unconflicting state
|
||||||
resolved_state.extend(clean);
|
resolved_state.extend(clean);
|
||||||
|
|
||||||
|
debug!("state resolution finished");
|
||||||
|
|
||||||
Ok(resolved_state)
|
Ok(resolved_state)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +427,7 @@ where
|
|||||||
{
|
{
|
||||||
debug!("starting iterative auth check");
|
debug!("starting iterative auth check");
|
||||||
|
|
||||||
debug!("performing auth checks on {events_to_check:?}");
|
trace!(list = ?events_to_check, "events to check");
|
||||||
|
|
||||||
let mut resolved_state = unconflicted_state;
|
let mut resolved_state = unconflicted_state;
|
||||||
|
|
||||||
@ -448,7 +451,7 @@ where
|
|||||||
ev,
|
ev,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
warn!("auth event id for {aid} is missing {event_id}");
|
warn!(auth_event_id = %aid, "missing auth event");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user