From 288ed7a8ea161dbe88ce10dff23e221b30a3b787 Mon Sep 17 00:00:00 2001 From: anatoly yakovenko Date: Sun, 12 Aug 2018 18:19:54 -0700 Subject: [PATCH] Vote should be valid (#945) * test that fails * fix for test * rename --- src/vote_stage.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/vote_stage.rs b/src/vote_stage.rs index 7f1415b2d1..223bbc7c32 100644 --- a/src/vote_stage.rs +++ b/src/vote_stage.rs @@ -33,12 +33,12 @@ enum VoteError { NoValidLastIdsToVoteOn, } -pub fn create_vote_tx_and_blob( +pub fn create_new_signed_vote_blob( last_id: &Hash, keypair: &Keypair, crdt: &Arc>, blob_recycler: &BlobRecycler, -) -> Result<(Transaction, SharedBlob)> { +) -> Result { let shared_blob = blob_recycler.allocate(); let (vote, addr) = { let mut wcrdt = crdt.write().unwrap(); @@ -55,7 +55,7 @@ pub fn create_vote_tx_and_blob( blob.meta.set_addr(&addr); blob.meta.size = len; } - Ok((tx, shared_blob)) + Ok(shared_blob) } fn get_last_id_to_vote_on( @@ -139,10 +139,9 @@ pub fn send_leader_vote( last_vote, last_valid_validator_timestamp, ) { - if let Ok((tx, shared_blob)) = - create_vote_tx_and_blob(&last_id, keypair, crdt, blob_recycler) + if let Ok(shared_blob) = + create_new_signed_vote_blob(&last_id, keypair, crdt, blob_recycler) { - bank.process_transaction(&tx)?; vote_blob_sender.send(VecDeque::from(vec![shared_blob]))?; let finality_ms = now - super_majority_timestamp; @@ -172,7 +171,7 @@ fn send_validator_vote( vote_blob_sender: &BlobSender, ) -> Result<()> { let last_id = bank.last_id(); - if let Ok((_, shared_blob)) = create_vote_tx_and_blob(&last_id, keypair, crdt, blob_recycler) { + if let Ok(shared_blob) = create_new_signed_vote_blob(&last_id, keypair, crdt, blob_recycler) { inc_new_counter_info!("replicate-vote_sent", 1); vote_blob_sender.send(VecDeque::from(vec![shared_blob]))?; @@ -236,6 +235,7 @@ impl Service for VoteStage { pub mod tests { use super::*; use bank::Bank; + use bincode::deserialize; use crdt::{Crdt, NodeInfo, TestNode}; use entry::next_entry; use hash::{hash, Hash}; @@ -390,6 +390,11 @@ pub mod tests { // leader should vote now assert!(vote_blob.is_ok()); + + // vote should be valid + let blob = vote_blob.unwrap().pop_front().unwrap(); + let tx = deserialize(&(blob.read().unwrap().data)).unwrap(); + assert!(bank.process_transaction(&tx).is_ok()); } #[test]