split out files, fixed a bug @garious!
This commit is contained in:
parent
3a90f138b2
commit
fa70b3bf70
|
@ -8,7 +8,7 @@ extern crate solana;
|
||||||
use atty::{is, Stream};
|
use atty::{is, Stream};
|
||||||
use getopts::Options;
|
use getopts::Options;
|
||||||
use solana::crdt::{ReplicatedData, TestNode};
|
use solana::crdt::{ReplicatedData, TestNode};
|
||||||
use solana::fullnode::{FullNode, LedgerFile};
|
use solana::fullnode::{FullNode, InFile, OutFile};
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
||||||
|
@ -83,23 +83,16 @@ fn main() -> () {
|
||||||
let fullnode = if matches.opt_present("t") {
|
let fullnode = if matches.opt_present("t") {
|
||||||
let testnet_address_string = matches.opt_str("t").unwrap();
|
let testnet_address_string = matches.opt_str("t").unwrap();
|
||||||
let testnet_addr = testnet_address_string.parse().unwrap();
|
let testnet_addr = testnet_address_string.parse().unwrap();
|
||||||
FullNode::new(
|
FullNode::new(node, false, InFile::StdIn, Some(testnet_addr), None, exit)
|
||||||
node,
|
|
||||||
false,
|
|
||||||
LedgerFile::StdIn,
|
|
||||||
Some(testnet_addr),
|
|
||||||
LedgerFile::NoFile,
|
|
||||||
exit,
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
node.data.current_leader_id = node.data.id.clone();
|
node.data.current_leader_id = node.data.id.clone();
|
||||||
|
|
||||||
let outfile = if let Some(f) = matches.opt_str("o") {
|
let outfile = if let Some(f) = matches.opt_str("o") {
|
||||||
LedgerFile::Path(f)
|
OutFile::Path(f)
|
||||||
} else {
|
} else {
|
||||||
LedgerFile::StdIn
|
OutFile::StdOut
|
||||||
};
|
};
|
||||||
FullNode::new(node, true, LedgerFile::StdIn, None, outfile, exit)
|
FullNode::new(node, true, InFile::StdIn, None, Some(outfile), exit)
|
||||||
};
|
};
|
||||||
for t in fullnode.thread_hdls {
|
for t in fullnode.thread_hdls {
|
||||||
t.join().expect("join");
|
t.join().expect("join");
|
||||||
|
|
|
@ -23,11 +23,13 @@ pub struct FullNode {
|
||||||
pub thread_hdls: Vec<JoinHandle<()>>,
|
pub thread_hdls: Vec<JoinHandle<()>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum LedgerFile {
|
pub enum InFile {
|
||||||
NoFile,
|
|
||||||
StdIn,
|
StdIn,
|
||||||
|
Path(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum OutFile {
|
||||||
StdOut,
|
StdOut,
|
||||||
Sink,
|
|
||||||
Path(String),
|
Path(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,15 +37,15 @@ impl FullNode {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
mut node: TestNode,
|
mut node: TestNode,
|
||||||
leader: bool,
|
leader: bool,
|
||||||
infile: LedgerFile,
|
infile: InFile,
|
||||||
network_entry_for_validator: Option<SocketAddr>,
|
network_entry_for_validator: Option<SocketAddr>,
|
||||||
outfile_for_leader: LedgerFile,
|
outfile_for_leader: Option<OutFile>,
|
||||||
exit: Arc<AtomicBool>,
|
exit: Arc<AtomicBool>,
|
||||||
) -> FullNode {
|
) -> FullNode {
|
||||||
info!("creating bank...");
|
info!("creating bank...");
|
||||||
let bank = Bank::default();
|
let bank = Bank::default();
|
||||||
let entry_height = match infile {
|
let entry_height = match infile {
|
||||||
LedgerFile::Path(path) => {
|
InFile::Path(path) => {
|
||||||
let f = File::open(path).unwrap();
|
let f = File::open(path).unwrap();
|
||||||
let mut r = BufReader::new(f);
|
let mut r = BufReader::new(f);
|
||||||
let entries =
|
let entries =
|
||||||
|
@ -51,14 +53,13 @@ impl FullNode {
|
||||||
info!("processing ledger...");
|
info!("processing ledger...");
|
||||||
bank.process_ledger(entries).expect("process_ledger")
|
bank.process_ledger(entries).expect("process_ledger")
|
||||||
}
|
}
|
||||||
LedgerFile::StdIn => {
|
InFile::StdIn => {
|
||||||
let mut r = BufReader::new(stdin());
|
let mut r = BufReader::new(stdin());
|
||||||
let entries =
|
let entries =
|
||||||
entry_writer::read_entries(&mut r).map(|e| e.expect("failed to parse entry"));
|
entry_writer::read_entries(&mut r).map(|e| e.expect("failed to parse entry"));
|
||||||
info!("processing ledger...");
|
info!("processing ledger...");
|
||||||
bank.process_ledger(entries).expect("process_ledger")
|
bank.process_ledger(entries).expect("process_ledger")
|
||||||
}
|
}
|
||||||
_ => panic!("expected LedgerFile::StdIn or LedgerFile::Path for infile"),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// entry_height is the network-wide agreed height of the ledger.
|
// entry_height is the network-wide agreed height of the ledger.
|
||||||
|
@ -92,9 +93,8 @@ impl FullNode {
|
||||||
server
|
server
|
||||||
} else {
|
} else {
|
||||||
node.data.current_leader_id = node.data.id.clone();
|
node.data.current_leader_id = node.data.id.clone();
|
||||||
let server =
|
let server = match outfile_for_leader {
|
||||||
match outfile_for_leader {
|
Some(OutFile::Path(file)) => {
|
||||||
LedgerFile::Path(file) => {
|
|
||||||
FullNode::new_leader(
|
FullNode::new_leader(
|
||||||
bank,
|
bank,
|
||||||
entry_height,
|
entry_height,
|
||||||
|
@ -104,8 +104,8 @@ impl FullNode {
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
File::create(file).expect("opening ledger file"),
|
File::create(file).expect("opening ledger file"),
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
LedgerFile::StdOut => {
|
Some(OutFile::StdOut) => {
|
||||||
FullNode::new_leader(
|
FullNode::new_leader(
|
||||||
bank,
|
bank,
|
||||||
entry_height,
|
entry_height,
|
||||||
|
@ -115,8 +115,8 @@ impl FullNode {
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
stdout(),
|
stdout(),
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
LedgerFile::Sink => {
|
None => {
|
||||||
FullNode::new_leader(
|
FullNode::new_leader(
|
||||||
bank,
|
bank,
|
||||||
entry_height,
|
entry_height,
|
||||||
|
@ -126,8 +126,7 @@ impl FullNode {
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
sink(),
|
sink(),
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
_ => panic!("expected LedgerFile::StdOut, LedgerFile::Path, or LedgerFile::Sink, for infile"),
|
|
||||||
};
|
};
|
||||||
info!(
|
info!(
|
||||||
"leader ready... local request address: {} (advertising {})",
|
"leader ready... local request address: {} (advertising {})",
|
||||||
|
|
|
@ -7,7 +7,7 @@ extern crate solana;
|
||||||
use solana::crdt::TestNode;
|
use solana::crdt::TestNode;
|
||||||
use solana::crdt::{Crdt, ReplicatedData};
|
use solana::crdt::{Crdt, ReplicatedData};
|
||||||
use solana::entry_writer::EntryWriter;
|
use solana::entry_writer::EntryWriter;
|
||||||
use solana::fullnode::{FullNode, LedgerFile};
|
use solana::fullnode::{FullNode, InFile};
|
||||||
use solana::logger;
|
use solana::logger;
|
||||||
use solana::mint::Mint;
|
use solana::mint::Mint;
|
||||||
use solana::ncp::Ncp;
|
use solana::ncp::Ncp;
|
||||||
|
@ -98,9 +98,9 @@ fn test_multi_node_validator_catchup_from_zero() {
|
||||||
let server = FullNode::new(
|
let server = FullNode::new(
|
||||||
leader,
|
leader,
|
||||||
true,
|
true,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
|
None,
|
||||||
None,
|
None,
|
||||||
LedgerFile::Sink,
|
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
let mut threads = server.thread_hdls;
|
let mut threads = server.thread_hdls;
|
||||||
|
@ -109,9 +109,9 @@ fn test_multi_node_validator_catchup_from_zero() {
|
||||||
let mut val = FullNode::new(
|
let mut val = FullNode::new(
|
||||||
validator,
|
validator,
|
||||||
false,
|
false,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
Some(leader_data.gossip_addr),
|
Some(leader_data.gossip_addr),
|
||||||
LedgerFile::NoFile,
|
None,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
threads.append(&mut val.thread_hdls);
|
threads.append(&mut val.thread_hdls);
|
||||||
|
@ -142,9 +142,9 @@ fn test_multi_node_validator_catchup_from_zero() {
|
||||||
let mut val = FullNode::new(
|
let mut val = FullNode::new(
|
||||||
TestNode::new(),
|
TestNode::new(),
|
||||||
false,
|
false,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
Some(leader_data.gossip_addr),
|
Some(leader_data.gossip_addr),
|
||||||
LedgerFile::NoFile,
|
None,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
threads.append(&mut val.thread_hdls);
|
threads.append(&mut val.thread_hdls);
|
||||||
|
@ -199,9 +199,9 @@ fn test_multi_node_basic() {
|
||||||
let server = FullNode::new(
|
let server = FullNode::new(
|
||||||
leader,
|
leader,
|
||||||
true,
|
true,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
|
None,
|
||||||
None,
|
None,
|
||||||
LedgerFile::Sink,
|
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
let threads = server.thread_hdls;
|
let threads = server.thread_hdls;
|
||||||
|
@ -210,9 +210,9 @@ fn test_multi_node_basic() {
|
||||||
FullNode::new(
|
FullNode::new(
|
||||||
validator,
|
validator,
|
||||||
false,
|
false,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
Some(leader_data.gossip_addr),
|
Some(leader_data.gossip_addr),
|
||||||
LedgerFile::NoFile,
|
None,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -255,9 +255,9 @@ fn test_multi_node_dynamic_network() {
|
||||||
let server = FullNode::new(
|
let server = FullNode::new(
|
||||||
leader,
|
leader,
|
||||||
true,
|
true,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
|
None,
|
||||||
None,
|
None,
|
||||||
LedgerFile::Sink,
|
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
let threads = server.thread_hdls;
|
let threads = server.thread_hdls;
|
||||||
|
@ -277,9 +277,9 @@ fn test_multi_node_dynamic_network() {
|
||||||
let val = FullNode::new(
|
let val = FullNode::new(
|
||||||
validator,
|
validator,
|
||||||
false,
|
false,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
Some(leader_data.gossip_addr),
|
Some(leader_data.gossip_addr),
|
||||||
LedgerFile::NoFile,
|
None,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
(rd, exit, val)
|
(rd, exit, val)
|
||||||
|
@ -323,9 +323,9 @@ fn test_multi_node_dynamic_network() {
|
||||||
let val = FullNode::new(
|
let val = FullNode::new(
|
||||||
validator,
|
validator,
|
||||||
false,
|
false,
|
||||||
LedgerFile::Path(ledger_path.clone()),
|
InFile::Path(ledger_path.clone()),
|
||||||
Some(leader_data.gossip_addr),
|
Some(leader_data.gossip_addr),
|
||||||
LedgerFile::NoFile,
|
None,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
);
|
);
|
||||||
info!("{:x} ADDED", rd.debug_id());
|
info!("{:x} ADDED", rd.debug_id());
|
||||||
|
|
Loading…
Reference in New Issue