Browse Source

Match Go VolumeTailSender: send needle_header on every chunk

rust-volume-server
Chris Lu 4 days ago
parent
commit
5405179b2d
  1. 6
      seaweed-volume/src/server/grpc_server.rs

6
seaweed-volume/src/server/grpc_server.rs

@ -1622,19 +1622,17 @@ impl VolumeServer for VolumeGrpcService {
} }
sent_any = true; sent_any = true;
// Send body in chunks of BUFFER_SIZE_LIMIT // Send body in chunks of BUFFER_SIZE_LIMIT
// Go sends needle_header only in the first chunk per needle
// Go sends needle_header on every chunk
let mut i = 0; let mut i = 0;
let mut first_chunk = true;
while i < body.len() { while i < body.len() {
let end = std::cmp::min(i + BUFFER_SIZE_LIMIT, body.len()); let end = std::cmp::min(i + BUFFER_SIZE_LIMIT, body.len());
let is_last_chunk = end >= body.len(); let is_last_chunk = end >= body.len();
let msg = volume_server_pb::VolumeTailSenderResponse { let msg = volume_server_pb::VolumeTailSenderResponse {
needle_header: if first_chunk { header.clone() } else { vec![] },
needle_header: header.clone(),
needle_body: body[i..end].to_vec(), needle_body: body[i..end].to_vec(),
is_last_chunk, is_last_chunk,
version, version,
}; };
first_chunk = false;
if tx.send(Ok(msg)).await.is_err() { if tx.send(Ok(msg)).await.is_err() {
return; return;
} }

Loading…
Cancel
Save