Add limit and shrink policy for recycler (#15320)

This commit is contained in:
carllin
2021-02-24 00:15:58 -08:00
committed by GitHub
parent 2f46da346d
commit c2e8814dce
24 changed files with 515 additions and 127 deletions

View File

@ -42,7 +42,10 @@ fn recv_loop(
let mut now = Instant::now();
let mut num_max_received = 0; // Number of times maximum packets were received
loop {
let mut msgs = Packets::new_with_recycler(recycler.clone(), PACKETS_PER_BATCH, name);
let (mut msgs, should_send) =
Packets::new_with_recycler(recycler.clone(), PACKETS_PER_BATCH)
.map(|allocated| (allocated, true))
.unwrap_or((Packets::with_capacity(PACKETS_PER_BATCH), false));
loop {
// Check for exit signal, even if socket is busy
// (for instance the leader transaction socket)
@ -55,7 +58,7 @@ fn recv_loop(
}
recv_count += len;
call_count += 1;
if len > 0 {
if len > 0 && should_send {
channel.send(msgs)?;
}
break;
@ -198,7 +201,13 @@ mod test {
let send = UdpSocket::bind("127.0.0.1:0").expect("bind");
let exit = Arc::new(AtomicBool::new(false));
let (s_reader, r_reader) = channel();
let t_receiver = receiver(Arc::new(read), &exit, s_reader, Recycler::default(), "test");
let t_receiver = receiver(
Arc::new(read),
&exit,
s_reader,
Recycler::new_without_limit(""),
"test",
);
let t_responder = {
let (s_responder, r_responder) = channel();
let t_responder = responder("streamer_send_test", Arc::new(send), r_responder);