Files
solana/src/server.rs

78 lines
2.1 KiB
Rust
Raw Normal View History

2018-05-15 11:00:01 -06:00
//! The `server` module hosts all the server microservices.
use bank::Bank;
use crdt::ReplicatedData;
use hash::Hash;
use rpu::Rpu;
use std::io::Write;
use std::net::UdpSocket;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use std::thread::JoinHandle;
use std::time::Duration;
2018-05-15 11:33:43 -06:00
use tpu::Tpu;
2018-05-23 08:29:24 -07:00
use tvu::Tvu;
2018-05-15 11:00:01 -06:00
pub struct Server {
pub thread_hdls: Vec<JoinHandle<()>>,
}
impl Server {
2018-05-23 11:06:18 -07:00
pub fn new_leader<W: Write + Send + 'static>(
2018-05-15 11:00:01 -06:00
bank: Bank,
start_hash: Hash,
tick_duration: Option<Duration>,
me: ReplicatedData,
requests_socket: UdpSocket,
2018-05-15 11:33:43 -06:00
events_socket: UdpSocket,
2018-05-15 11:00:01 -06:00
broadcast_socket: UdpSocket,
respond_socket: UdpSocket,
2018-05-23 07:44:01 -07:00
gossip_socket: UdpSocket,
2018-05-15 11:00:01 -06:00
exit: Arc<AtomicBool>,
writer: W,
) -> Self {
2018-05-15 11:21:40 -06:00
let bank = Arc::new(bank);
let mut thread_hdls = vec![];
2018-05-15 11:33:43 -06:00
let rpu = Rpu::new(bank.clone(), requests_socket, respond_socket, exit.clone());
thread_hdls.extend(rpu.thread_hdls);
let tpu = Tpu::new(
2018-05-15 11:21:40 -06:00
bank.clone(),
2018-05-15 11:00:01 -06:00
start_hash,
tick_duration,
me,
2018-05-15 11:33:43 -06:00
events_socket,
2018-05-15 11:00:01 -06:00
broadcast_socket,
2018-05-23 07:44:01 -07:00
gossip_socket,
exit.clone(),
2018-05-15 11:00:01 -06:00
writer,
);
2018-05-15 11:33:43 -06:00
thread_hdls.extend(tpu.thread_hdls);
2018-05-23 07:44:01 -07:00
Server { thread_hdls }
}
2018-05-23 11:06:18 -07:00
pub fn new_validator(
2018-05-23 07:44:01 -07:00
bank: Bank,
me: ReplicatedData,
requests_socket: UdpSocket,
respond_socket: UdpSocket,
replicate_socket: UdpSocket,
gossip_socket: UdpSocket,
leader_repl_data: ReplicatedData,
exit: Arc<AtomicBool>,
) -> Self {
let bank = Arc::new(bank);
let mut thread_hdls = vec![];
let rpu = Rpu::new(bank.clone(), requests_socket, respond_socket, exit.clone());
thread_hdls.extend(rpu.thread_hdls);
let tvu = Tvu::new(
bank.clone(),
me,
gossip_socket,
replicate_socket,
leader_repl_data,
exit.clone(),
);
2018-05-23 08:29:24 -07:00
thread_hdls.extend(tvu.thread_hdls);
Server { thread_hdls }
2018-05-15 11:00:01 -06:00
}
}