Try removing delay between acks
This commit is contained in:
parent
28d55aa64a
commit
f0c76b9af2
31
src/ack.rs
31
src/ack.rs
@ -32,29 +32,26 @@ impl AckBatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(mut self) -> lapin::Result<()> {
|
pub async fn run(mut self) -> lapin::Result<()> {
|
||||||
let mut not_before = Instant::now();
|
|
||||||
let mut buffer = Vec::with_capacity(ACK_BUFFER_LEN);
|
let mut buffer = Vec::with_capacity(ACK_BUFFER_LEN);
|
||||||
|
let mut ack_sizes = vec![];
|
||||||
|
|
||||||
let mut time_good = true;
|
|
||||||
loop {
|
loop {
|
||||||
let mut data_good = false;
|
let mut data_good = false;
|
||||||
while !(time_good && data_good) {
|
while !data_good {
|
||||||
select! {
|
let num_received = self.recv.recv_many(&mut buffer, ACK_BUFFER_LEN).await;
|
||||||
num_received = self.recv.recv_many(&mut buffer, ACK_BUFFER_LEN) => {
|
if num_received == 0 {
|
||||||
if num_received == 0 { println!("ack done"); return Ok(()); }
|
println!("ack done {} {} {}", ack_sizes.iter().sum::<u64>(), ack_sizes.len(), (ack_sizes.iter().sum::<u64>() as f64) / (ack_sizes.len() as f64));
|
||||||
for (tag, result) in buffer.drain(..) {
|
return Ok(());
|
||||||
//println!("rm.insert({}..{}+1, {:?}); rm.check_invariants();", tag, tag, &result);
|
}
|
||||||
self.enqueue(tag, result);
|
for (tag, result) in buffer.drain(..) {
|
||||||
data_good = data_good || tag == self.acked + 1;
|
//println!("rm.insert({}..{}+1, {:?}); rm.check_invariants();", tag, tag, &result);
|
||||||
}
|
self.enqueue(tag, result);
|
||||||
}
|
data_good = data_good || tag == self.acked + 1;
|
||||||
_ = sleep_until(not_before), if !time_good => time_good = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//println!("ack status {:?}", self.pending);
|
//println!("ack status {:?}", self.pending);
|
||||||
let mut ack_count = 0;
|
let mut ack_count = 0;
|
||||||
let mut max_ack_size = 0;
|
|
||||||
loop {
|
loop {
|
||||||
ack_count += 1;
|
ack_count += 1;
|
||||||
let (ack_range, res) = self.pending.peek_first().unwrap();
|
let (ack_range, res) = self.pending.peek_first().unwrap();
|
||||||
@ -69,13 +66,11 @@ impl AckBatcher {
|
|||||||
Err(requeue) => self.chan.basic_nack(ack_to, BasicNackOptions { multiple: true, requeue }).await,
|
Err(requeue) => self.chan.basic_nack(ack_to, BasicNackOptions { multiple: true, requeue }).await,
|
||||||
}?;
|
}?;
|
||||||
|
|
||||||
max_ack_size = max_ack_size.max(ack_to - self.acked);
|
ack_sizes.push(ack_to - self.acked);
|
||||||
self.acked = ack_to;
|
self.acked = ack_to;
|
||||||
if !self.ready() { break; }
|
if !self.ready() { break; }
|
||||||
}
|
}
|
||||||
println!("ack sleep {} {}", ack_count, max_ack_size);
|
println!("ack sleep {}", ack_count);
|
||||||
not_before = Instant::now() + self.max_wait;
|
|
||||||
time_good = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
10
src/main.rs
10
src/main.rs
@ -43,18 +43,18 @@ async fn main() -> Result<()> {
|
|||||||
}).await?;
|
}).await?;
|
||||||
|
|
||||||
tokio::try_join!(
|
tokio::try_join!(
|
||||||
async {
|
tokio::spawn(async {
|
||||||
let mut proc = Processor::new(broker_connect().await?, 10_000).await?;
|
let mut proc = Processor::new(broker_connect().await?, 65_535).await?;
|
||||||
for i in 0..QUEUE_COUNT {
|
for i in 0..QUEUE_COUNT {
|
||||||
proc.listen(&format!("hello-{}", i), &format!("processor-{}", i), move |data| process(data, i)).await?;
|
proc.listen(&format!("hello-{}", i), &format!("processor-{}", i), move |data| process(data, i)).await?;
|
||||||
}
|
}
|
||||||
quit_signal.await.unwrap();
|
quit_signal.await.unwrap();
|
||||||
proc.shutdown().await
|
proc.shutdown().await
|
||||||
},
|
}),
|
||||||
async {
|
tokio::spawn(async {
|
||||||
let chan = conn.create_channel().await?;
|
let chan = conn.create_channel().await?;
|
||||||
sender(conn, chan).await
|
sender(conn, chan).await
|
||||||
},
|
}),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user