Only send a vote once a second

This commit is contained in:
Greg Fitzgerald
2018-09-26 21:58:06 -06:00
parent 9c47e022dc
commit 4172bde081

View File

@ -17,6 +17,7 @@ use std::sync::mpsc::RecvTimeoutError;
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use std::thread::{self, Builder, JoinHandle}; use std::thread::{self, Builder, JoinHandle};
use std::time::Duration; use std::time::Duration;
use std::time::Instant;
use streamer::{responder, BlobSender}; use streamer::{responder, BlobSender};
use vote_stage::send_validator_vote; use vote_stage::send_validator_vote;
@ -51,7 +52,7 @@ impl ReplicateStage {
window_receiver: &EntryReceiver, window_receiver: &EntryReceiver,
ledger_writer: Option<&mut LedgerWriter>, ledger_writer: Option<&mut LedgerWriter>,
keypair: &Arc<Keypair>, keypair: &Arc<Keypair>,
vote_blob_sender: &BlobSender, vote_blob_sender: Option<&BlobSender>,
) -> Result<()> { ) -> Result<()> {
let timer = Duration::new(1, 0); let timer = Duration::new(1, 0);
//coalesce all the available entries into a single vote //coalesce all the available entries into a single vote
@ -61,7 +62,10 @@ impl ReplicateStage {
} }
let res = bank.process_entries(&entries); let res = bank.process_entries(&entries);
send_validator_vote(bank, keypair, crdt, blob_recycler, vote_blob_sender)?;
if let Some(sender) = vote_blob_sender {
send_validator_vote(bank, keypair, crdt, blob_recycler, sender)?;
}
{ {
let mut wcrdt = crdt.write().unwrap(); let mut wcrdt = crdt.write().unwrap();
@ -102,7 +106,17 @@ impl ReplicateStage {
.name("solana-replicate-stage".to_string()) .name("solana-replicate-stage".to_string())
.spawn(move || { .spawn(move || {
let _exit = Finalizer::new(exit);; let _exit = Finalizer::new(exit);;
let now = Instant::now();
let mut next_vote_secs = 1;
loop { loop {
// Only vote once a second.
let vote_sender = if now.elapsed().as_secs() > next_vote_secs {
next_vote_secs += 1;
Some(&vote_blob_sender)
} else {
None
};
if let Err(e) = Self::replicate_requests( if let Err(e) = Self::replicate_requests(
&bank, &bank,
&crdt, &crdt,
@ -110,7 +124,7 @@ impl ReplicateStage {
&window_receiver, &window_receiver,
ledger_writer.as_mut(), ledger_writer.as_mut(),
&keypair, &keypair,
&vote_blob_sender, vote_sender,
) { ) {
match e { match e {
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break, Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break,