quic: Fix prune_oldest table size calculation (#25431)

This commit is contained in:
sakridge 2022-05-21 16:06:05 -06:00 committed by GitHub
parent 09ea899a2d
commit a56ce8283a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 6 deletions

View File

@ -279,9 +279,10 @@ impl ConnectionTable {
} }
} }
} }
self.table.remove(&oldest_ip.unwrap()); if let Some(removed) = self.table.remove(&oldest_ip.unwrap()) {
self.total_size -= 1; self.total_size -= removed.len();
num_pruned += 1; num_pruned += removed.len();
}
} }
num_pruned num_pruned
} }
@ -872,7 +873,7 @@ mod test {
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
solana_logger::setup(); solana_logger::setup();
let mut table = ConnectionTable::default(); let mut table = ConnectionTable::default();
let num_entries = 5; let mut num_entries = 5;
let max_connections_per_ip = 10; let max_connections_per_ip = 10;
let sockets: Vec<_> = (0..num_entries) let sockets: Vec<_> = (0..num_entries)
.into_iter() .into_iter()
@ -883,12 +884,17 @@ mod test {
.try_add_connection(socket, i as u64, max_connections_per_ip) .try_add_connection(socket, i as u64, max_connections_per_ip)
.unwrap(); .unwrap();
} }
num_entries += 1;
table
.try_add_connection(&sockets[0], 5, max_connections_per_ip)
.unwrap();
let new_size = 3; let new_size = 3;
let pruned = table.prune_oldest(new_size); let pruned = table.prune_oldest(new_size);
assert_eq!(pruned, num_entries as usize - new_size); assert_eq!(pruned, num_entries as usize - new_size);
for v in table.table.values() { for v in table.table.values() {
for x in v { for x in v {
assert!(x.last_update() >= (num_entries as u64 - new_size as u64)); assert!((x.last_update() + 1) >= (num_entries as u64 - new_size as u64));
} }
} }
assert_eq!(table.table.len(), new_size); assert_eq!(table.table.len(), new_size);
@ -896,7 +902,6 @@ mod test {
for socket in sockets.iter().take(num_entries as usize).skip(new_size - 1) { for socket in sockets.iter().take(num_entries as usize).skip(new_size - 1) {
table.remove_connection(socket); table.remove_connection(socket);
} }
info!("{:?}", table);
assert_eq!(table.total_size, 0); assert_eq!(table.total_size, 0);
} }
} }