mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
fix: Don't hard fail on events which depend on soft-failed events
This commit is contained in:
@@ -215,6 +215,17 @@ pub async fn handle_incoming_pdu<'a>(
|
|||||||
.get_room_create_event(room_id)
|
.get_room_create_event(room_id)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
let start_time = Instant::now();
|
||||||
|
self.federation_handletime
|
||||||
|
.write()
|
||||||
|
.insert(room_id.into(), (event_id.to_owned(), start_time));
|
||||||
|
|
||||||
|
defer! {{
|
||||||
|
self.federation_handletime
|
||||||
|
.write()
|
||||||
|
.remove(room_id);
|
||||||
|
}};
|
||||||
|
|
||||||
let (incoming_pdu, val) = self
|
let (incoming_pdu, val) = self
|
||||||
.handle_outlier_pdu(origin, create_event, event_id, room_id, value, false)
|
.handle_outlier_pdu(origin, create_event, event_id, room_id, value, false)
|
||||||
.await?;
|
.await?;
|
||||||
@@ -281,17 +292,6 @@ pub async fn handle_incoming_pdu<'a>(
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Done with prev events, now handling the incoming event
|
// Done with prev events, now handling the incoming event
|
||||||
let start_time = Instant::now();
|
|
||||||
self.federation_handletime
|
|
||||||
.write()
|
|
||||||
.insert(room_id.into(), (event_id.to_owned(), start_time));
|
|
||||||
|
|
||||||
defer! {{
|
|
||||||
self.federation_handletime
|
|
||||||
.write()
|
|
||||||
.remove(room_id);
|
|
||||||
}};
|
|
||||||
|
|
||||||
self.upgrade_outlier_to_timeline_pdu(incoming_pdu, val, create_event, origin, room_id)
|
self.upgrade_outlier_to_timeline_pdu(incoming_pdu, val, create_event, origin, room_id)
|
||||||
.boxed()
|
.boxed()
|
||||||
.await
|
.await
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::{borrow::Borrow, collections::BTreeMap, sync::Arc, time::Instant};
|
use std::{borrow::Borrow, collections::BTreeMap, sync::Arc, time::Instant};
|
||||||
|
|
||||||
use conduwuit::{
|
use conduwuit::{
|
||||||
Err, Result, debug, debug_info, err, implement, is_equal_to,
|
Err, Result, debug, debug_info, debug_warn, err, implement, is_equal_to,
|
||||||
matrix::{Event, EventTypeExt, PduEvent, StateKey, state_res},
|
matrix::{Event, EventTypeExt, PduEvent, StateKey, state_res},
|
||||||
trace,
|
trace,
|
||||||
utils::{
|
utils::{
|
||||||
@@ -50,10 +50,10 @@ where
|
|||||||
.pdu_metadata
|
.pdu_metadata
|
||||||
.is_event_soft_failed(incoming_pdu.event_id())
|
.is_event_soft_failed(incoming_pdu.event_id())
|
||||||
);
|
);
|
||||||
if rejected || soft_failed {
|
if rejected {
|
||||||
// TODO: debug_warn instead of warn
|
return Err!(Request(InvalidParam("Event has been rejected")));
|
||||||
warn!(%rejected, %soft_failed, "Event is not accepted");
|
} else if soft_failed {
|
||||||
return Err!(Request(InvalidParam("Event has been rejected or soft-failed")));
|
return Err!(Request(InvalidParam("Event has been soft-failed")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If any of the auth events are rejected, this event is also rejected.
|
// If any of the auth events are rejected, this event is also rejected.
|
||||||
@@ -376,15 +376,19 @@ where
|
|||||||
self.services
|
self.services
|
||||||
.pdu_metadata
|
.pdu_metadata
|
||||||
.mark_event_soft_failed(incoming_pdu.event_id());
|
.mark_event_soft_failed(incoming_pdu.event_id());
|
||||||
return Err!(Request(InvalidParam("Event has been soft failed")));
|
debug_warn!(
|
||||||
|
elapsed = ?timer.elapsed(),
|
||||||
|
"Event has been soft-failed",
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
debug_info!(
|
||||||
|
elapsed = ?timer.elapsed(),
|
||||||
|
"Accepted",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Event has passed all auth/stateres checks
|
// Event has passed all auth/stateres checks
|
||||||
drop(state_lock);
|
drop(state_lock);
|
||||||
debug_info!(
|
|
||||||
elapsed = ?timer.elapsed(),
|
|
||||||
"Accepted",
|
|
||||||
);
|
|
||||||
|
|
||||||
Ok(pdu_id)
|
Ok(pdu_id)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user