correct arithmetic adjustments
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
16a98b0683
commit
321e197d8c
12 changed files with 24 additions and 53 deletions
|
@ -340,13 +340,7 @@ pub(crate) async fn get_keys_helper<F: Fn(&UserId) -> bool>(
|
||||||
e.insert((Instant::now(), 1));
|
e.insert((Instant::now(), 1));
|
||||||
},
|
},
|
||||||
hash_map::Entry::Occupied(mut e) => {
|
hash_map::Entry::Occupied(mut e) => {
|
||||||
*e.get_mut() = (
|
*e.get_mut() = (Instant::now(), e.get().1.saturating_add(1));
|
||||||
Instant::now(),
|
|
||||||
e.get()
|
|
||||||
.1
|
|
||||||
.checked_add(1)
|
|
||||||
.expect("bad_query_ratelimiter attempt/try count should not ever get this high"),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1395,13 +1395,7 @@ async fn validate_and_add_event_id(
|
||||||
e.insert((Instant::now(), 1));
|
e.insert((Instant::now(), 1));
|
||||||
},
|
},
|
||||||
Entry::Occupied(mut e) => {
|
Entry::Occupied(mut e) => {
|
||||||
*e.get_mut() = (
|
*e.get_mut() = (Instant::now(), e.get().1.saturating_add(1));
|
||||||
Instant::now(),
|
|
||||||
e.get()
|
|
||||||
.1
|
|
||||||
.checked_add(1)
|
|
||||||
.expect("bad_event_ratelimiter attempt/try count should not ever get this high"),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -806,7 +806,9 @@ pub(crate) async fn upgrade_room_route(body: Ruma<upgrade_room::v3::Request>) ->
|
||||||
power_levels_event_content
|
power_levels_event_content
|
||||||
.users_default
|
.users_default
|
||||||
.checked_add(int!(1))
|
.checked_add(int!(1))
|
||||||
.expect("user power level should not be this high"),
|
.ok_or_else(|| {
|
||||||
|
Error::BadRequest(ErrorKind::BadJson, "users_default power levels event content is not valid")
|
||||||
|
})?,
|
||||||
);
|
);
|
||||||
power_levels_event_content.events_default = new_level;
|
power_levels_event_content.events_default = new_level;
|
||||||
power_levels_event_content.invite = new_level;
|
power_levels_event_content.invite = new_level;
|
||||||
|
|
|
@ -557,7 +557,7 @@ async fn handle_left_room(
|
||||||
|
|
||||||
left_state_events.push(pdu.to_sync_state_event());
|
left_state_events.push(pdu.to_sync_state_event());
|
||||||
|
|
||||||
i = i.saturating_add(1);
|
i = i.wrapping_add(1);
|
||||||
if i % 100 == 0 {
|
if i % 100 == 0 {
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
}
|
}
|
||||||
|
@ -705,11 +705,7 @@ async fn load_joined_room(
|
||||||
// Recalculate heroes (first 5 members)
|
// Recalculate heroes (first 5 members)
|
||||||
let mut heroes = Vec::new();
|
let mut heroes = Vec::new();
|
||||||
|
|
||||||
if joined_member_count
|
if joined_member_count.saturating_add(invited_member_count) <= 5 {
|
||||||
.checked_add(invited_member_count)
|
|
||||||
.expect("joined/invite member count should not be this high")
|
|
||||||
<= 5
|
|
||||||
{
|
|
||||||
// Go through all PDUs and for each member event, check if the user is still
|
// Go through all PDUs and for each member event, check if the user is still
|
||||||
// joined or invited until we have 5 or we reach the end
|
// joined or invited until we have 5 or we reach the end
|
||||||
|
|
||||||
|
@ -802,7 +798,7 @@ async fn load_joined_room(
|
||||||
};
|
};
|
||||||
state_events.push(pdu);
|
state_events.push(pdu);
|
||||||
|
|
||||||
i = i.saturating_add(1);
|
i = i.wrapping_add(1);
|
||||||
if i % 100 == 0 {
|
if i % 100 == 0 {
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
}
|
}
|
||||||
|
@ -823,7 +819,7 @@ async fn load_joined_room(
|
||||||
}
|
}
|
||||||
state_events.push(pdu);
|
state_events.push(pdu);
|
||||||
|
|
||||||
i = i.saturating_add(1);
|
i = i.wrapping_add(1);
|
||||||
if i % 100 == 0 {
|
if i % 100 == 0 {
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ impl service::rooms::state_accessor::Data for KeyValueDatabase {
|
||||||
.parse_compressed_state_event(compressed)?;
|
.parse_compressed_state_event(compressed)?;
|
||||||
result.insert(parsed.0, parsed.1);
|
result.insert(parsed.0, parsed.1);
|
||||||
|
|
||||||
i = i.saturating_add(1);
|
i = i.wrapping_add(1);
|
||||||
if i % 100 == 0 {
|
if i % 100 == 0 {
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ impl service::rooms::state_accessor::Data for KeyValueDatabase {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = i.saturating_add(1);
|
i = i.wrapping_add(1);
|
||||||
if i % 100 == 0 {
|
if i % 100 == 0 {
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
}
|
}
|
||||||
|
|
|
@ -284,11 +284,7 @@ fn count_to_id(room_id: &RoomId, count: PduCount, offset: u64, subtract: bool) -
|
||||||
pdu_id.extend_from_slice(&0_u64.to_be_bytes());
|
pdu_id.extend_from_slice(&0_u64.to_be_bytes());
|
||||||
let num = u64::MAX.saturating_sub(x);
|
let num = u64::MAX.saturating_sub(x);
|
||||||
if subtract {
|
if subtract {
|
||||||
if num > 0 {
|
|
||||||
num.saturating_sub(offset)
|
num.saturating_sub(offset)
|
||||||
} else {
|
|
||||||
num
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
num.saturating_add(offset)
|
num.saturating_add(offset)
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,13 +173,11 @@ pub(crate) async fn migrations(db: &KeyValueDatabase, config: &Config) -> Result
|
||||||
let mut current_sstatehash: Option<u64> = None;
|
let mut current_sstatehash: Option<u64> = None;
|
||||||
let mut current_room = None;
|
let mut current_room = None;
|
||||||
let mut current_state = HashSet::new();
|
let mut current_state = HashSet::new();
|
||||||
let mut counter: u32 = 0;
|
|
||||||
|
|
||||||
let mut handle_state = |current_sstatehash: u64,
|
let handle_state = |current_sstatehash: u64,
|
||||||
current_room: &RoomId,
|
current_room: &RoomId,
|
||||||
current_state: HashSet<_>,
|
current_state: HashSet<_>,
|
||||||
last_roomstates: &mut HashMap<_, _>| {
|
last_roomstates: &mut HashMap<_, _>| {
|
||||||
counter = counter.saturating_add(1);
|
|
||||||
let last_roomsstatehash = last_roomstates.get(current_room);
|
let last_roomsstatehash = last_roomstates.get(current_room);
|
||||||
|
|
||||||
let states_parents = last_roomsstatehash.map_or_else(
|
let states_parents = last_roomsstatehash.map_or_else(
|
||||||
|
|
|
@ -402,19 +402,8 @@ impl KeyValueDatabase {
|
||||||
let sqlite_exists = path.join("conduit.db").exists();
|
let sqlite_exists = path.join("conduit.db").exists();
|
||||||
let rocksdb_exists = path.join("IDENTITY").exists();
|
let rocksdb_exists = path.join("IDENTITY").exists();
|
||||||
|
|
||||||
let mut count: u8 = 0;
|
if sqlite_exists && rocksdb_exists {
|
||||||
|
return Err(Error::bad_config("Multiple databases at database_path detected."));
|
||||||
if sqlite_exists {
|
|
||||||
count = count.saturating_add(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if rocksdb_exists {
|
|
||||||
count = count.saturating_add(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if count > 1 {
|
|
||||||
error!("Multiple databases at database_path detected");
|
|
||||||
return Ok(());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if sqlite_exists && config.database_backend != "sqlite" {
|
if sqlite_exists && config.database_backend != "sqlite" {
|
||||||
|
|
|
@ -144,7 +144,7 @@ pub(crate) async fn delete_list(body: Vec<&str>) -> Result<RoomMessageEventConte
|
||||||
.drain(1..body.len().checked_sub(1).unwrap())
|
.drain(1..body.len().checked_sub(1).unwrap())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mut mxc_deletion_count: u32 = 0;
|
let mut mxc_deletion_count: usize = 0;
|
||||||
|
|
||||||
for mxc in mxc_list {
|
for mxc in mxc_list {
|
||||||
debug!("Deleting MXC {mxc} in bulk");
|
debug!("Deleting MXC {mxc} in bulk");
|
||||||
|
|
|
@ -22,7 +22,7 @@ pub(crate) async fn list(_body: Vec<&str>, page: Option<usize>) -> Result<RoomMe
|
||||||
|
|
||||||
let rooms = rooms
|
let rooms = rooms
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.skip(page.saturating_sub(1) * PAGE_SIZE)
|
.skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE))
|
||||||
.take(PAGE_SIZE)
|
.take(PAGE_SIZE)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ pub(crate) async fn process(command: RoomDirectoryCommand, _body: Vec<&str>) ->
|
||||||
|
|
||||||
let rooms = rooms
|
let rooms = rooms
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.skip(page.checked_sub(1).unwrap().checked_mul(PAGE_SIZE).unwrap())
|
.skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE))
|
||||||
.take(PAGE_SIZE)
|
.take(PAGE_SIZE)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,9 @@ impl Service {
|
||||||
Ok(duration) => {
|
Ok(duration) => {
|
||||||
debug!("Parsed duration: {:?}", duration);
|
debug!("Parsed duration: {:?}", duration);
|
||||||
debug!("System time now: {:?}", SystemTime::now());
|
debug!("System time now: {:?}", SystemTime::now());
|
||||||
SystemTime::now().checked_sub(duration).unwrap()
|
SystemTime::now().checked_sub(duration).ok_or_else(|| {
|
||||||
|
Error::bad_database("Duration specified is not valid against the current system time")
|
||||||
|
})?
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Failed to parse user-specified time duration: {}", e);
|
error!("Failed to parse user-specified time duration: {}", e);
|
||||||
|
|
Loading…
Add table
Reference in a new issue