builds
This commit is contained in:
		@@ -15,6 +15,8 @@ pub mod mint;
 | 
				
			|||||||
pub mod packet;
 | 
					pub mod packet;
 | 
				
			||||||
pub mod plan;
 | 
					pub mod plan;
 | 
				
			||||||
pub mod record_stage;
 | 
					pub mod record_stage;
 | 
				
			||||||
 | 
					pub mod request_replicator;
 | 
				
			||||||
 | 
					pub mod replicate_stage;
 | 
				
			||||||
pub mod recorder;
 | 
					pub mod recorder;
 | 
				
			||||||
pub mod request;
 | 
					pub mod request;
 | 
				
			||||||
pub mod request_processor;
 | 
					pub mod request_processor;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,22 +1,11 @@
 | 
				
			|||||||
//! The `replicate_stage` replicates transactions broadcast by the leader.
 | 
					//! The `replicate_stage` replicates transactions broadcast by the leader.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use bank::Bank;
 | 
					 | 
				
			||||||
use banking_stage::BankingStage;
 | 
					 | 
				
			||||||
use crdt::{Crdt, ReplicatedData};
 | 
					 | 
				
			||||||
use hash::Hash;
 | 
					 | 
				
			||||||
use ledger;
 | 
					 | 
				
			||||||
use packet;
 | 
					use packet;
 | 
				
			||||||
use record_stage::RecordStage;
 | 
					use request_replicator::RequestReplicator;
 | 
				
			||||||
use result::Result;
 | 
					 | 
				
			||||||
use sig_verify_stage::SigVerifyStage;
 | 
					 | 
				
			||||||
use std::net::UdpSocket;
 | 
					 | 
				
			||||||
use std::sync::atomic::{AtomicBool, Ordering};
 | 
					use std::sync::atomic::{AtomicBool, Ordering};
 | 
				
			||||||
use std::sync::mpsc::channel;
 | 
					use std::sync::Arc;
 | 
				
			||||||
use std::sync::{Arc, RwLock};
 | 
					 | 
				
			||||||
use std::thread::{spawn, JoinHandle};
 | 
					use std::thread::{spawn, JoinHandle};
 | 
				
			||||||
use std::time::Duration;
 | 
					 | 
				
			||||||
use streamer;
 | 
					use streamer;
 | 
				
			||||||
use write_stage::WriteStage;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct ReplicateStage {
 | 
					pub struct ReplicateStage {
 | 
				
			||||||
    pub thread_hdl: JoinHandle<()>,
 | 
					    pub thread_hdl: JoinHandle<()>,
 | 
				
			||||||
@@ -24,13 +13,13 @@ pub struct ReplicateStage {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
impl ReplicateStage {
 | 
					impl ReplicateStage {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn new(request_replicator: RequestReplicator, exit: Arc<AtomicBool>, window_receiver: streamer::BlobReceiver, blob_recycler: &packet::BlobRecycler) -> Self {
 | 
					    pub fn new(request_replicator: RequestReplicator, exit: Arc<AtomicBool>, window_receiver: streamer::BlobReceiver, blob_recycler: packet::BlobRecycler) -> Self {
 | 
				
			||||||
        let thread_hdl = spawn(move || loop {
 | 
					        let thread_hdl = spawn(move || loop {
 | 
				
			||||||
            let e = request_replicator.replicate_requests(&window_receiver, &blob_recycler);
 | 
					            let e = request_replicator.replicate_requests(&window_receiver, &blob_recycler);
 | 
				
			||||||
            if e.is_err() && s_exit.load(Ordering::Relaxed) {
 | 
					            if e.is_err() && exit.load(Ordering::Relaxed) {
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        ReplicateStage{thread_hdl};
 | 
					        ReplicateStage{thread_hdl}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,32 +2,22 @@
 | 
				
			|||||||
//! by the leader.
 | 
					//! by the leader.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use bank::Bank;
 | 
					use bank::Bank;
 | 
				
			||||||
use banking_stage::BankingStage;
 | 
					 | 
				
			||||||
use crdt::{Crdt, ReplicatedData};
 | 
					 | 
				
			||||||
use hash::Hash;
 | 
					 | 
				
			||||||
use ledger;
 | 
					use ledger;
 | 
				
			||||||
use packet;
 | 
					use packet;
 | 
				
			||||||
use record_stage::RecordStage;
 | 
					 | 
				
			||||||
use result::Result;
 | 
					use result::Result;
 | 
				
			||||||
use sig_verify_stage::SigVerifyStage;
 | 
					 | 
				
			||||||
use std::net::UdpSocket;
 | 
					 | 
				
			||||||
use std::sync::atomic::{AtomicBool, Ordering};
 | 
					 | 
				
			||||||
use std::sync::mpsc::channel;
 | 
					 | 
				
			||||||
use std::sync::{Arc, RwLock};
 | 
					 | 
				
			||||||
use std::thread::{spawn, JoinHandle};
 | 
					 | 
				
			||||||
use std::time::Duration;
 | 
					use std::time::Duration;
 | 
				
			||||||
use streamer;
 | 
					use streamer;
 | 
				
			||||||
use write_stage::WriteStage;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct RequestReplicator {
 | 
					pub struct RequestReplicator {
 | 
				
			||||||
    bank: Arc<Bank>,
 | 
					    bank: Arc<Bank>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Tvu {
 | 
					impl RequestReplicator {
 | 
				
			||||||
    /// Create a new Tvu that wraps the given Bank.
 | 
					    /// Create a new Tvu that wraps the given Bank.
 | 
				
			||||||
    pub fn new(bank: Bank) -> Self {
 | 
					    pub fn new(bank: Arc<Bank>) -> Self {
 | 
				
			||||||
        RequestReplicator {
 | 
					        RequestReplicator {
 | 
				
			||||||
            bank: Arc::new(bank),
 | 
					            bank: bank,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										46
									
								
								src/tvu.rs
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								src/tvu.rs
									
									
									
									
									
								
							@@ -5,16 +5,17 @@ use bank::Bank;
 | 
				
			|||||||
use banking_stage::BankingStage;
 | 
					use banking_stage::BankingStage;
 | 
				
			||||||
use crdt::{Crdt, ReplicatedData};
 | 
					use crdt::{Crdt, ReplicatedData};
 | 
				
			||||||
use hash::Hash;
 | 
					use hash::Hash;
 | 
				
			||||||
use ledger;
 | 
					 | 
				
			||||||
use packet;
 | 
					use packet;
 | 
				
			||||||
use record_stage::RecordStage;
 | 
					use record_stage::RecordStage;
 | 
				
			||||||
 | 
					use request_replicator::RequestReplicator;
 | 
				
			||||||
 | 
					use replicate_stage::ReplicateStage;
 | 
				
			||||||
use result::Result;
 | 
					use result::Result;
 | 
				
			||||||
use sig_verify_stage::SigVerifyStage;
 | 
					use sig_verify_stage::SigVerifyStage;
 | 
				
			||||||
use std::net::UdpSocket;
 | 
					use std::net::UdpSocket;
 | 
				
			||||||
use std::sync::atomic::{AtomicBool, Ordering};
 | 
					use std::sync::atomic::AtomicBool;
 | 
				
			||||||
use std::sync::mpsc::channel;
 | 
					use std::sync::mpsc::channel;
 | 
				
			||||||
use std::sync::{Arc, RwLock};
 | 
					use std::sync::{Arc, RwLock};
 | 
				
			||||||
use std::thread::{spawn, JoinHandle};
 | 
					use std::thread::JoinHandle;
 | 
				
			||||||
use std::time::Duration;
 | 
					use std::time::Duration;
 | 
				
			||||||
use streamer;
 | 
					use streamer;
 | 
				
			||||||
use write_stage::WriteStage;
 | 
					use write_stage::WriteStage;
 | 
				
			||||||
@@ -35,27 +36,6 @@ impl Tvu {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Process verified blobs, already in order
 | 
					 | 
				
			||||||
    /// Respond with a signed hash of the state
 | 
					 | 
				
			||||||
    fn replicate_state(
 | 
					 | 
				
			||||||
        obj: &Tvu,
 | 
					 | 
				
			||||||
        verified_receiver: &streamer::BlobReceiver,
 | 
					 | 
				
			||||||
        blob_recycler: &packet::BlobRecycler,
 | 
					 | 
				
			||||||
    ) -> Result<()> {
 | 
					 | 
				
			||||||
        let timer = Duration::new(1, 0);
 | 
					 | 
				
			||||||
        let blobs = verified_receiver.recv_timeout(timer)?;
 | 
					 | 
				
			||||||
        let entries = ledger::reconstruct_entries_from_blobs(&blobs);
 | 
					 | 
				
			||||||
        let res = obj.bank.process_verified_entries(entries);
 | 
					 | 
				
			||||||
        if res.is_err() {
 | 
					 | 
				
			||||||
            error!("process_verified_entries {} {:?}", blobs.len(), res);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        res?;
 | 
					 | 
				
			||||||
        for blob in blobs {
 | 
					 | 
				
			||||||
            blob_recycler.recycle(blob);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        Ok(())
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// This service receives messages from a leader in the network and processes the transactions
 | 
					    /// This service receives messages from a leader in the network and processes the transactions
 | 
				
			||||||
    /// on the bank state.
 | 
					    /// on the bank state.
 | 
				
			||||||
    /// # Arguments
 | 
					    /// # Arguments
 | 
				
			||||||
@@ -132,14 +112,13 @@ impl Tvu {
 | 
				
			|||||||
            retransmit_sender,
 | 
					            retransmit_sender,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let tvu = obj.clone();
 | 
					        let request_replicator = RequestReplicator::new(obj.bank.clone());
 | 
				
			||||||
        let s_exit = exit.clone();
 | 
					        let replicate_stage = ReplicateStage::new(
 | 
				
			||||||
        let t_replicator = spawn(move || loop {
 | 
					            request_replicator,
 | 
				
			||||||
            let e = Self::replicate_state(&tvu, &window_receiver, &blob_recycler);
 | 
					            exit.clone(),
 | 
				
			||||||
            if e.is_err() && s_exit.load(Ordering::Relaxed) {
 | 
					            window_receiver,
 | 
				
			||||||
                break;
 | 
					            blob_recycler.clone(),
 | 
				
			||||||
            }
 | 
					        );
 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //serve pipeline
 | 
					        //serve pipeline
 | 
				
			||||||
        // make sure we are on the same interface
 | 
					        // make sure we are on the same interface
 | 
				
			||||||
@@ -178,7 +157,7 @@ impl Tvu {
 | 
				
			|||||||
            t_blob_receiver,
 | 
					            t_blob_receiver,
 | 
				
			||||||
            t_retransmit,
 | 
					            t_retransmit,
 | 
				
			||||||
            t_window,
 | 
					            t_window,
 | 
				
			||||||
            t_replicator,
 | 
					            replicate_stage.thread_hdl,
 | 
				
			||||||
            t_gossip,
 | 
					            t_gossip,
 | 
				
			||||||
            t_listen,
 | 
					            t_listen,
 | 
				
			||||||
            //serve threads
 | 
					            //serve threads
 | 
				
			||||||
@@ -375,5 +354,4 @@ mod tests {
 | 
				
			|||||||
        t_l_gossip.join().expect("join");
 | 
					        t_l_gossip.join().expect("join");
 | 
				
			||||||
        t_l_listen.join().expect("join");
 | 
					        t_l_listen.join().expect("join");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user