log noise, chunk size 32MB

This commit is contained in:
2025-11-13 21:23:50 +01:00
parent 4d38f6640a
commit 157c8ab68d
+49 -7
View File
@@ -563,10 +563,12 @@ pub enum PeerCommand {
} }
async fn initial_peer_alive_check(conn: &mut Connection) -> bool { async fn initial_peer_alive_check(conn: &mut Connection) -> bool {
let remote_addr = conn.remote_addr().ok();
let stream = match conn.open_bidirectional_stream().await { let stream = match conn.open_bidirectional_stream().await {
Ok(stream) => stream, Ok(stream) => stream,
Err(e) => { Err(e) => {
log::error!("failed to open stream: {e}"); log::error!("{remote_addr:?} failed to open stream: {e}");
return false; return false;
} }
}; };
@@ -575,7 +577,7 @@ async fn initial_peer_alive_check(conn: &mut Connection) -> bool {
// send ping // send ping
if let Err(e) = tx.send(Request::Ping.encode()).await { if let Err(e) = tx.send(Request::Ping.encode()).await {
log::error!("failed to send ping to peer: {e}"); log::error!("{remote_addr:?} failed to send ping to peer: {e}");
return false; return false;
} }
let _ = tx.close().await; let _ = tx.close().await;
@@ -585,11 +587,11 @@ async fn initial_peer_alive_check(conn: &mut Connection) -> bool {
let response = Response::decode(response); let response = Response::decode(response);
match response { match response {
Response::Pong => { Response::Pong => {
log::info!("peer is alive"); log::trace!("{remote_addr:?} peer is alive");
return true; return true;
} }
_ => { _ => {
log::error!("peer sent invalid response to ping: {response:?}"); log::error!("{remote_addr:?} peer sent invalid response to ping: {response:?}");
} }
} }
} }
@@ -597,7 +599,7 @@ async fn initial_peer_alive_check(conn: &mut Connection) -> bool {
false false
} }
const CHUNK_SIZE: u64 = 512 * 1024; const CHUNK_SIZE: u64 = 32 * 1024 * 1024;
const MAX_RETRY_COUNT: usize = 3; const MAX_RETRY_COUNT: usize = 3;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@@ -1644,8 +1646,8 @@ async fn handle_peer_stream(
offset, offset,
length, length,
} => { } => {
log::info!( log::trace!(
"Received GetGameFileChunk request for {relative_path} from peer" "{remote_addr:?} received GetGameFileChunk request for {relative_path} (offset {offset}, length {length})"
); );
let maybe_game_dir = ctx.game_dir.read().await.clone(); let maybe_game_dir = ctx.game_dir.read().await.clone();
@@ -2103,3 +2105,43 @@ async fn get_game_file_descriptions(
Ok(file_descriptions) Ok(file_descriptions)
} }
#[cfg(test)]
mod tests {
use std::net::SocketAddr;
use super::*;
fn loopback_addr(port: u16) -> SocketAddr {
SocketAddr::from(([127, 0, 0, 1], port))
}
#[test]
fn build_peer_plans_handles_partial_final_chunk() {
let peers = vec![loopback_addr(12000), loopback_addr(12001)];
let file_size = CHUNK_SIZE * 2 + CHUNK_SIZE / 4;
let file_descs = vec![GameFileDescription {
game_id: "test".to_string(),
relative_path: "game/file.dat".to_string(),
is_dir: false,
size: file_size,
}];
let plans = build_peer_plans(&peers, &file_descs);
let mut chunks: Vec<_> = plans.values().flat_map(|plan| plan.chunks.iter()).collect();
assert_eq!(chunks.len(), 3, "expected three chunks for 2.25 blocks");
chunks.sort_by_key(|chunk| chunk.offset);
let last_chunk = chunks.last().expect("last chunk exists");
assert_eq!(last_chunk.offset, CHUNK_SIZE * 2);
assert_eq!(last_chunk.length, file_size - last_chunk.offset);
assert_eq!(last_chunk.length, CHUNK_SIZE / 4);
assert_eq!(
last_chunk.offset + last_chunk.length,
file_size,
"last chunk should finish the file"
);
}
}