improvement: don't fetch event multiple times
This commit is contained in:
parent
b1d9ec3efc
commit
54f4d39e3e
2 changed files with 16 additions and 5 deletions
|
@ -27,7 +27,9 @@ impl DatabaseEngine for Engine {
|
||||||
db_opts.set_num_levels(8);
|
db_opts.set_num_levels(8);
|
||||||
db_opts.set_write_buffer_size(2 << 27);
|
db_opts.set_write_buffer_size(2 << 27);
|
||||||
|
|
||||||
let rocksdb_cache = rocksdb::Cache::new_lru_cache((config.db_cache_capacity_mb * 1024.0 * 1024.0) as usize).unwrap();
|
let rocksdb_cache =
|
||||||
|
rocksdb::Cache::new_lru_cache((config.db_cache_capacity_mb * 1024.0 * 1024.0) as usize)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let mut block_based_options = rocksdb::BlockBasedOptions::default();
|
let mut block_based_options = rocksdb::BlockBasedOptions::default();
|
||||||
block_based_options.set_block_size(2 << 19);
|
block_based_options.set_block_size(2 << 19);
|
||||||
|
|
|
@ -1867,7 +1867,12 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
|
||||||
// handle_outlier_pdu.
|
// handle_outlier_pdu.
|
||||||
let mut todo_auth_events = vec![Arc::clone(id)];
|
let mut todo_auth_events = vec![Arc::clone(id)];
|
||||||
let mut events_in_reverse_order = Vec::new();
|
let mut events_in_reverse_order = Vec::new();
|
||||||
|
let mut events_all = HashSet::new();
|
||||||
while let Some(next_id) = todo_auth_events.pop() {
|
while let Some(next_id) = todo_auth_events.pop() {
|
||||||
|
if events_all.contains(&next_id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if let Ok(Some(_)) = db.rooms.get_pdu(&next_id) {
|
if let Ok(Some(_)) = db.rooms.get_pdu(&next_id) {
|
||||||
trace!("Found {} in db", id);
|
trace!("Found {} in db", id);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1899,10 +1904,13 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
|
||||||
next_id, calculated_event_id, &res.pdu);
|
next_id, calculated_event_id, &res.pdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(auth_events) =
|
||||||
if let Some(auth_events) = value.get("auth_events").and_then(|c| c.as_array()) {
|
value.get("auth_events").and_then(|c| c.as_array())
|
||||||
|
{
|
||||||
for auth_event in auth_events {
|
for auth_event in auth_events {
|
||||||
if let Ok(auth_event) = serde_json::from_value(auth_event.clone().into()) {
|
if let Ok(auth_event) =
|
||||||
|
serde_json::from_value(auth_event.clone().into())
|
||||||
|
{
|
||||||
let a: Arc<EventId> = auth_event;
|
let a: Arc<EventId> = auth_event;
|
||||||
todo_auth_events.push(a);
|
todo_auth_events.push(a);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1913,7 +1921,8 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
|
||||||
warn!("Auth event list invalid");
|
warn!("Auth event list invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
events_in_reverse_order.push((next_id, value));
|
events_in_reverse_order.push((next_id.clone(), value));
|
||||||
|
events_all.insert(next_id);
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
warn!("Failed to fetch event: {}", next_id);
|
warn!("Failed to fetch event: {}", next_id);
|
||||||
|
|
Loading…
Add table
Reference in a new issue