Shorten recv wait when there are buffered packets in banking stage (#3757)

- packets are buffered on leader rotation, when the next leader is
  unknown
- shortening the wait allows the banking stage to poll for next
  leader more frequently
This commit is contained in:
Pankaj Garg
2019-04-14 12:34:07 -07:00
committed by GitHub
parent f6aa90e193
commit 2c745ce108

View File

@ -254,7 +254,18 @@ impl BankingStage {
.unwrap_or_else(|_| buffered_packets.clear()); .unwrap_or_else(|_| buffered_packets.clear());
} }
match Self::process_packets(&verified_receiver, &poh_recorder, recv_start) { let recv_timeout = if !buffered_packets.is_empty() {
// If packets are buffered, let's wait for less time on recv from the channel.
// This helps detect the next leader faster, and processing the buffered
// packets quickly
Duration::from_millis(10)
} else {
// Default wait time
Duration::from_millis(100)
};
match Self::process_packets(&verified_receiver, &poh_recorder, recv_start, recv_timeout)
{
Err(Error::RecvTimeoutError(RecvTimeoutError::Timeout)) => (), Err(Error::RecvTimeoutError(RecvTimeoutError::Timeout)) => (),
Ok(unprocessed_packets) => { Ok(unprocessed_packets) => {
if Self::should_buffer_packets(poh_recorder, cluster_info) { if Self::should_buffer_packets(poh_recorder, cluster_info) {
@ -480,11 +491,12 @@ impl BankingStage {
verified_receiver: &Arc<Mutex<Receiver<VerifiedPackets>>>, verified_receiver: &Arc<Mutex<Receiver<VerifiedPackets>>>,
poh: &Arc<Mutex<PohRecorder>>, poh: &Arc<Mutex<PohRecorder>>,
recv_start: &mut Instant, recv_start: &mut Instant,
recv_timeout: Duration,
) -> Result<UnprocessedPackets> { ) -> Result<UnprocessedPackets> {
let mms = verified_receiver let mms = verified_receiver
.lock() .lock()
.unwrap() .unwrap()
.recv_timeout(Duration::from_millis(100))?; .recv_timeout(recv_timeout)?;
let mms_len = mms.len(); let mms_len = mms.len();
let count = mms.iter().map(|x| x.1.len()).sum(); let count = mms.iter().map(|x| x.1.len()).sum();