Only send a vote once a second
This commit is contained in:
@ -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,
|
||||||
|
Reference in New Issue
Block a user