Add FullnodeConfig struct to Fullnode::new* functions
This avoids having to touch *every* Fullnode::new* call site when a new fullnode option is added
This commit is contained in:
parent
6da7a784f2
commit
ae7f169027
@ -2,7 +2,7 @@ use clap::{crate_version, App, Arg, ArgMatches};
|
|||||||
use log::*;
|
use log::*;
|
||||||
use solana::client::mk_client;
|
use solana::client::mk_client;
|
||||||
use solana::cluster_info::{Node, NodeInfo, FULLNODE_PORT_RANGE};
|
use solana::cluster_info::{Node, NodeInfo, FULLNODE_PORT_RANGE};
|
||||||
use solana::fullnode::Fullnode;
|
use solana::fullnode::{Fullnode, FullnodeConfig};
|
||||||
use solana::leader_scheduler::LeaderScheduler;
|
use solana::leader_scheduler::LeaderScheduler;
|
||||||
use solana::local_vote_signer_service::LocalVoteSignerService;
|
use solana::local_vote_signer_service::LocalVoteSignerService;
|
||||||
use solana::socketaddr;
|
use solana::socketaddr;
|
||||||
@ -204,7 +204,8 @@ fn main() {
|
|||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let no_sigverify = matches.is_present("no_sigverify");
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
|
fullnode_config.sigverify_disabled = matches.is_present("no_sigverify");
|
||||||
let no_signer = matches.is_present("no_signer");
|
let no_signer = matches.is_present("no_signer");
|
||||||
let use_only_bootstrap_leader = matches.is_present("no_leader_rotation");
|
let use_only_bootstrap_leader = matches.is_present("no_leader_rotation");
|
||||||
let (keypair, gossip) = parse_identity(&matches);
|
let (keypair, gossip) = parse_identity(&matches);
|
||||||
@ -233,12 +234,14 @@ fn main() {
|
|||||||
solana_netutil::find_available_port_in_range(FULLNODE_PORT_RANGE)
|
solana_netutil::find_available_port_in_range(FULLNODE_PORT_RANGE)
|
||||||
.expect("unable to allocate rpc port")
|
.expect("unable to allocate rpc port")
|
||||||
};
|
};
|
||||||
|
fullnode_config.rpc_port = Some(rpc_port);
|
||||||
let init_complete_file = matches.value_of("init_complete_file");
|
let init_complete_file = matches.value_of("init_complete_file");
|
||||||
let entry_stream = matches.value_of("entry_stream").map(|s| s.to_string());
|
fullnode_config.entry_stream = matches.value_of("entry_stream").map(|s| s.to_string());
|
||||||
|
|
||||||
let keypair = Arc::new(keypair);
|
let keypair = Arc::new(keypair);
|
||||||
let node = Node::new_with_external_ip(keypair.pubkey(), &gossip);
|
let node = Node::new_with_external_ip(keypair.pubkey(), &gossip);
|
||||||
let mut node_info = node.info.clone();
|
let mut node_info = node.info.clone();
|
||||||
|
|
||||||
node_info.rpc.set_port(rpc_port);
|
node_info.rpc.set_port(rpc_port);
|
||||||
node_info.rpc_pubsub.set_port(rpc_port + 1);
|
node_info.rpc_pubsub.set_port(rpc_port + 1);
|
||||||
|
|
||||||
@ -248,7 +251,7 @@ fn main() {
|
|||||||
info!("Node ID: {}", node.info.id);
|
info!("Node ID: {}", node.info.id);
|
||||||
|
|
||||||
let vote_account;
|
let vote_account;
|
||||||
let signer_option = if !no_signer {
|
let vote_signer_option = if !no_signer {
|
||||||
let vote_signer =
|
let vote_signer =
|
||||||
VoteSignerProxy::new(&keypair, Box::new(RemoteVoteSigner::new(signer_addr)));
|
VoteSignerProxy::new(&keypair, Box::new(RemoteVoteSigner::new(signer_addr)));
|
||||||
vote_account = vote_signer.vote_account;
|
vote_account = vote_signer.vote_account;
|
||||||
@ -265,13 +268,11 @@ fn main() {
|
|||||||
keypair.clone(),
|
keypair.clone(),
|
||||||
ledger_path,
|
ledger_path,
|
||||||
Arc::new(RwLock::new(leader_scheduler)),
|
Arc::new(RwLock::new(leader_scheduler)),
|
||||||
signer_option,
|
vote_signer_option,
|
||||||
cluster_entrypoint
|
cluster_entrypoint
|
||||||
.map(|i| NodeInfo::new_entry_point(&i))
|
.map(|i| NodeInfo::new_entry_point(&i))
|
||||||
.as_ref(),
|
.as_ref(),
|
||||||
no_sigverify,
|
fullnode_config,
|
||||||
Some(rpc_port),
|
|
||||||
entry_stream,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if !no_signer {
|
if !no_signer {
|
||||||
|
110
src/fullnode.rs
110
src/fullnode.rs
@ -65,6 +65,27 @@ pub enum FullnodeReturnType {
|
|||||||
ValidatorToLeaderRotation,
|
ValidatorToLeaderRotation,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct FullnodeConfig {
|
||||||
|
pub sigverify_disabled: bool,
|
||||||
|
pub rpc_port: Option<u16>,
|
||||||
|
pub entry_stream: Option<String>,
|
||||||
|
pub storage_rotate_count: u64,
|
||||||
|
}
|
||||||
|
impl Default for FullnodeConfig {
|
||||||
|
fn default() -> Self {
|
||||||
|
// TODO: remove this, temporary parameter to configure
|
||||||
|
// storage amount differently for test configurations
|
||||||
|
// so tests don't take forever to run.
|
||||||
|
const NUM_HASHES_FOR_STORAGE_ROTATE: u64 = 1024;
|
||||||
|
Self {
|
||||||
|
sigverify_disabled: false,
|
||||||
|
rpc_port: None,
|
||||||
|
entry_stream: None,
|
||||||
|
storage_rotate_count: NUM_HASHES_FOR_STORAGE_ROTATE,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Fullnode {
|
pub struct Fullnode {
|
||||||
keypair: Arc<Keypair>,
|
keypair: Arc<Keypair>,
|
||||||
exit: Arc<AtomicBool>,
|
exit: Arc<AtomicBool>,
|
||||||
@ -80,11 +101,6 @@ pub struct Fullnode {
|
|||||||
pub role_notifiers: (TvuRotationReceiver, TpuRotationReceiver),
|
pub role_notifiers: (TvuRotationReceiver, TpuRotationReceiver),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove this, temporary parameter to configure
|
|
||||||
// storage amount differently for test configurations
|
|
||||||
// so tests don't take forever to run.
|
|
||||||
const NUM_HASHES_FOR_STORAGE_ROTATE: u64 = 1024;
|
|
||||||
|
|
||||||
impl Fullnode {
|
impl Fullnode {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
node: Node,
|
node: Node,
|
||||||
@ -93,36 +109,7 @@ impl Fullnode {
|
|||||||
leader_scheduler: Arc<RwLock<LeaderScheduler>>,
|
leader_scheduler: Arc<RwLock<LeaderScheduler>>,
|
||||||
vote_signer: Option<Arc<VoteSignerProxy>>,
|
vote_signer: Option<Arc<VoteSignerProxy>>,
|
||||||
entrypoint_info_option: Option<&NodeInfo>,
|
entrypoint_info_option: Option<&NodeInfo>,
|
||||||
sigverify_disabled: bool,
|
config: FullnodeConfig,
|
||||||
rpc_port: Option<u16>,
|
|
||||||
entry_stream: Option<String>,
|
|
||||||
) -> Self {
|
|
||||||
Self::new_with_storage_rotate(
|
|
||||||
node,
|
|
||||||
keypair,
|
|
||||||
ledger_path,
|
|
||||||
vote_signer,
|
|
||||||
entrypoint_info_option,
|
|
||||||
sigverify_disabled,
|
|
||||||
leader_scheduler,
|
|
||||||
rpc_port,
|
|
||||||
NUM_HASHES_FOR_STORAGE_ROTATE,
|
|
||||||
entry_stream,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
|
||||||
pub fn new_with_storage_rotate(
|
|
||||||
node: Node,
|
|
||||||
keypair: Arc<Keypair>,
|
|
||||||
ledger_path: &str,
|
|
||||||
vote_signer: Option<Arc<VoteSignerProxy>>,
|
|
||||||
entrypoint_info_option: Option<&NodeInfo>,
|
|
||||||
sigverify_disabled: bool,
|
|
||||||
leader_scheduler: Arc<RwLock<LeaderScheduler>>,
|
|
||||||
rpc_port: Option<u16>,
|
|
||||||
storage_rotate_count: u64,
|
|
||||||
entry_stream: Option<String>,
|
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let (genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
|
let (genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
|
||||||
let (bank, entry_height, last_entry_id) =
|
let (bank, entry_height, last_entry_id) =
|
||||||
@ -136,10 +123,7 @@ impl Fullnode {
|
|||||||
&last_entry_id,
|
&last_entry_id,
|
||||||
vote_signer,
|
vote_signer,
|
||||||
entrypoint_info_option,
|
entrypoint_info_option,
|
||||||
sigverify_disabled,
|
config,
|
||||||
rpc_port,
|
|
||||||
storage_rotate_count,
|
|
||||||
entry_stream,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,9 +137,7 @@ impl Fullnode {
|
|||||||
last_entry_id: &Hash,
|
last_entry_id: &Hash,
|
||||||
vote_signer: Option<Arc<VoteSignerProxy>>,
|
vote_signer: Option<Arc<VoteSignerProxy>>,
|
||||||
entrypoint_info_option: Option<&NodeInfo>,
|
entrypoint_info_option: Option<&NodeInfo>,
|
||||||
sigverify_disabled: bool,
|
config: FullnodeConfig,
|
||||||
rpc_port: Option<u16>,
|
|
||||||
entry_stream: Option<String>,
|
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let (_genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
|
let (_genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
|
||||||
Self::new_with_bank_and_db_ledger(
|
Self::new_with_bank_and_db_ledger(
|
||||||
@ -167,10 +149,7 @@ impl Fullnode {
|
|||||||
&last_entry_id,
|
&last_entry_id,
|
||||||
vote_signer,
|
vote_signer,
|
||||||
entrypoint_info_option,
|
entrypoint_info_option,
|
||||||
sigverify_disabled,
|
config,
|
||||||
rpc_port,
|
|
||||||
NUM_HASHES_FOR_STORAGE_ROTATE,
|
|
||||||
entry_stream,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,15 +163,12 @@ impl Fullnode {
|
|||||||
last_entry_id: &Hash,
|
last_entry_id: &Hash,
|
||||||
vote_signer: Option<Arc<VoteSignerProxy>>,
|
vote_signer: Option<Arc<VoteSignerProxy>>,
|
||||||
entrypoint_info_option: Option<&NodeInfo>,
|
entrypoint_info_option: Option<&NodeInfo>,
|
||||||
sigverify_disabled: bool,
|
config: FullnodeConfig,
|
||||||
rpc_port: Option<u16>,
|
|
||||||
storage_rotate_count: u64,
|
|
||||||
entry_stream: Option<String>,
|
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let mut rpc_addr = node.info.rpc;
|
let mut rpc_addr = node.info.rpc;
|
||||||
let mut rpc_pubsub_addr = node.info.rpc_pubsub;
|
let mut rpc_pubsub_addr = node.info.rpc_pubsub;
|
||||||
// If rpc_port == `None`, node will listen on the ports set in NodeInfo
|
// If rpc_port == `None`, node will listen on the ports set in NodeInfo
|
||||||
if let Some(port) = rpc_port {
|
if let Some(port) = config.rpc_port {
|
||||||
rpc_addr.set_port(port);
|
rpc_addr.set_port(port);
|
||||||
node.info.rpc = rpc_addr;
|
node.info.rpc = rpc_addr;
|
||||||
rpc_pubsub_addr.set_port(port + 1);
|
rpc_pubsub_addr.set_port(port + 1);
|
||||||
@ -304,10 +280,10 @@ impl Fullnode {
|
|||||||
&cluster_info,
|
&cluster_info,
|
||||||
sockets,
|
sockets,
|
||||||
db_ledger.clone(),
|
db_ledger.clone(),
|
||||||
storage_rotate_count,
|
config.storage_rotate_count,
|
||||||
to_leader_sender,
|
to_leader_sender,
|
||||||
&storage_state,
|
&storage_state,
|
||||||
entry_stream,
|
config.entry_stream,
|
||||||
);
|
);
|
||||||
let max_tick_height = {
|
let max_tick_height = {
|
||||||
let ls_lock = bank.leader_scheduler.read().unwrap();
|
let ls_lock = bank.leader_scheduler.read().unwrap();
|
||||||
@ -328,7 +304,7 @@ impl Fullnode {
|
|||||||
.expect("Failed to clone broadcast socket"),
|
.expect("Failed to clone broadcast socket"),
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
entry_height,
|
entry_height,
|
||||||
sigverify_disabled,
|
config.sigverify_disabled,
|
||||||
max_tick_height,
|
max_tick_height,
|
||||||
last_entry_id,
|
last_entry_id,
|
||||||
keypair.pubkey(),
|
keypair.pubkey(),
|
||||||
@ -342,7 +318,7 @@ impl Fullnode {
|
|||||||
keypair,
|
keypair,
|
||||||
cluster_info,
|
cluster_info,
|
||||||
bank,
|
bank,
|
||||||
sigverify_disabled,
|
sigverify_disabled: config.sigverify_disabled,
|
||||||
gossip_service,
|
gossip_service,
|
||||||
rpc_service: Some(rpc_service),
|
rpc_service: Some(rpc_service),
|
||||||
rpc_pubsub_service: Some(rpc_pubsub_service),
|
rpc_pubsub_service: Some(rpc_pubsub_service),
|
||||||
@ -571,9 +547,7 @@ mod tests {
|
|||||||
&last_id,
|
&last_id,
|
||||||
Some(Arc::new(signer)),
|
Some(Arc::new(signer)),
|
||||||
Some(&entry),
|
Some(&entry),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
v.close().unwrap();
|
v.close().unwrap();
|
||||||
remove_dir_all(validator_ledger_path).unwrap();
|
remove_dir_all(validator_ledger_path).unwrap();
|
||||||
@ -614,9 +588,7 @@ mod tests {
|
|||||||
&last_id,
|
&last_id,
|
||||||
Some(Arc::new(signer)),
|
Some(Arc::new(signer)),
|
||||||
Some(&entry),
|
Some(&entry),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
@ -686,9 +658,7 @@ mod tests {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer)),
|
Some(Arc::new(signer)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Wait for the leader to transition, ticks should cause the leader to
|
// Wait for the leader to transition, ticks should cause the leader to
|
||||||
@ -791,9 +761,7 @@ mod tests {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(vote_signer)),
|
Some(Arc::new(vote_signer)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
assert!(!bootstrap_leader.node_services.tpu.is_leader());
|
assert!(!bootstrap_leader.node_services.tpu.is_leader());
|
||||||
@ -806,9 +774,7 @@ mod tests {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(validator_vote_account_id)),
|
Some(Arc::new(validator_vote_account_id)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
assert!(validator.node_services.tpu.is_leader());
|
assert!(validator.node_services.tpu.is_leader());
|
||||||
@ -902,9 +868,7 @@ mod tests {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(vote_signer)),
|
Some(Arc::new(vote_signer)),
|
||||||
Some(&leader_node.info),
|
Some(&leader_node.info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Send blobs to the validator from our mock leader
|
// Send blobs to the validator from our mock leader
|
||||||
|
@ -44,7 +44,6 @@ pub struct ThinClient {
|
|||||||
balances: HashMap<Pubkey, Account>,
|
balances: HashMap<Pubkey, Account>,
|
||||||
signature_status: bool,
|
signature_status: bool,
|
||||||
confirmation: Option<usize>,
|
confirmation: Option<usize>,
|
||||||
|
|
||||||
rpc_client: RpcClient,
|
rpc_client: RpcClient,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,9 +471,7 @@ pub fn new_fullnode(
|
|||||||
&last_id,
|
&last_id,
|
||||||
Some(Arc::new(vote_signer)),
|
Some(Arc::new(vote_signer)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
(server, leader_data, genesis_block, alice, ledger_path)
|
(server, leader_data, genesis_block, alice, ledger_path)
|
||||||
|
@ -163,9 +163,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// start up another validator from zero, converge and then check
|
// start up another validator from zero, converge and then check
|
||||||
@ -184,9 +182,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Send validator some tokens to vote
|
// Send validator some tokens to vote
|
||||||
@ -269,9 +265,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut nodes = vec![server];
|
let mut nodes = vec![server];
|
||||||
@ -304,9 +298,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
nodes.push(val);
|
nodes.push(val);
|
||||||
}
|
}
|
||||||
@ -368,9 +360,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
nodes.push(val);
|
nodes.push(val);
|
||||||
let servers = converge(&leader_data, N + 2); // contains the leader and new node
|
let servers = converge(&leader_data, N + 2); // contains the leader and new node
|
||||||
@ -459,9 +449,7 @@ fn test_multi_node_basic() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut nodes = vec![server];
|
let mut nodes = vec![server];
|
||||||
@ -490,9 +478,7 @@ fn test_multi_node_basic() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
nodes.push(val);
|
nodes.push(val);
|
||||||
}
|
}
|
||||||
@ -571,9 +557,7 @@ fn test_boot_validator_from_file() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
let leader_balance =
|
let leader_balance =
|
||||||
send_tx_and_retry_get_balance(&leader_data, &alice, &bob_pubkey, 500, Some(500)).unwrap();
|
send_tx_and_retry_get_balance(&leader_data, &alice, &bob_pubkey, 500, Some(500)).unwrap();
|
||||||
@ -597,9 +581,7 @@ fn test_boot_validator_from_file() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
let mut client = mk_client(&validator_data);
|
let mut client = mk_client(&validator_data);
|
||||||
let getbal = retry_get_balance(&mut client, &bob_pubkey, Some(leader_balance));
|
let getbal = retry_get_balance(&mut client, &bob_pubkey, Some(leader_balance));
|
||||||
@ -631,9 +613,7 @@ fn create_leader(
|
|||||||
))),
|
))),
|
||||||
Some(signer),
|
Some(signer),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
(leader_data, leader_fullnode)
|
(leader_data, leader_fullnode)
|
||||||
}
|
}
|
||||||
@ -709,9 +689,7 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// trigger broadcast, validator should catch up from leader, whose window contains
|
// trigger broadcast, validator should catch up from leader, whose window contains
|
||||||
@ -779,9 +757,7 @@ fn test_multi_node_dynamic_network() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
true,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
info!(
|
info!(
|
||||||
"found leader: {:?}",
|
"found leader: {:?}",
|
||||||
@ -855,9 +831,7 @@ fn test_multi_node_dynamic_network() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_data),
|
Some(&leader_data),
|
||||||
true,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
(rd, val)
|
(rd, val)
|
||||||
})
|
})
|
||||||
@ -1037,9 +1011,7 @@ fn test_leader_to_validator_transition() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_info),
|
Some(&leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Make an extra node for our leader to broadcast to,
|
// Make an extra node for our leader to broadcast to,
|
||||||
@ -1193,9 +1165,7 @@ fn test_leader_validator_basic() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_info),
|
Some(&leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Start the leader fullnode
|
// Start the leader fullnode
|
||||||
@ -1207,9 +1177,7 @@ fn test_leader_validator_basic() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_info),
|
Some(&leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Wait for convergence
|
// Wait for convergence
|
||||||
@ -1403,9 +1371,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut nodes = vec![bootstrap_leader];
|
let mut nodes = vec![bootstrap_leader];
|
||||||
@ -1427,9 +1393,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
nodes.push(validator);
|
nodes.push(validator);
|
||||||
@ -1455,9 +1419,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
info!("Wait for 'next leader' to assume leader role");
|
info!("Wait for 'next leader' to assume leader role");
|
||||||
@ -1606,9 +1568,7 @@ fn test_full_leader_validator_network() {
|
|||||||
leader_scheduler.clone(),
|
leader_scheduler.clone(),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
schedules.push(leader_scheduler);
|
schedules.push(leader_scheduler);
|
||||||
@ -1625,9 +1585,7 @@ fn test_full_leader_validator_network() {
|
|||||||
leader_scheduler.clone(),
|
leader_scheduler.clone(),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
schedules.push(leader_scheduler);
|
schedules.push(leader_scheduler);
|
||||||
@ -1804,9 +1762,7 @@ fn test_broadcast_last_tick() {
|
|||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Wait for convergence
|
// Wait for convergence
|
||||||
|
@ -11,7 +11,7 @@ use solana::cluster_info::{ClusterInfo, Node, NodeInfo};
|
|||||||
use solana::db_ledger::DbLedger;
|
use solana::db_ledger::DbLedger;
|
||||||
use solana::db_ledger::{create_tmp_genesis, get_tmp_ledger_path, tmp_copy_ledger};
|
use solana::db_ledger::{create_tmp_genesis, get_tmp_ledger_path, tmp_copy_ledger};
|
||||||
use solana::entry::Entry;
|
use solana::entry::Entry;
|
||||||
use solana::fullnode::Fullnode;
|
use solana::fullnode::{Fullnode, FullnodeConfig};
|
||||||
use solana::leader_scheduler::LeaderScheduler;
|
use solana::leader_scheduler::LeaderScheduler;
|
||||||
use solana::replicator::Replicator;
|
use solana::replicator::Replicator;
|
||||||
use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT;
|
use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT;
|
||||||
@ -49,19 +49,18 @@ fn test_replicator_startup() {
|
|||||||
{
|
{
|
||||||
let signer_proxy = VoteSignerProxy::new_local(&leader_keypair);
|
let signer_proxy = VoteSignerProxy::new_local(&leader_keypair);
|
||||||
|
|
||||||
let leader = Fullnode::new_with_storage_rotate(
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
|
fullnode_config.storage_rotate_count = STORAGE_ROTATE_TEST_COUNT;
|
||||||
|
let leader = Fullnode::new(
|
||||||
leader_node,
|
leader_node,
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
&leader_ledger_path,
|
&leader_ledger_path,
|
||||||
Some(Arc::new(signer_proxy)),
|
|
||||||
None,
|
|
||||||
false,
|
|
||||||
Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader(
|
Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader(
|
||||||
leader_info.id.clone(),
|
leader_info.id.clone(),
|
||||||
))),
|
))),
|
||||||
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
STORAGE_ROTATE_TEST_COUNT,
|
fullnode_config,
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let validator_keypair = Arc::new(Keypair::new());
|
let validator_keypair = Arc::new(Keypair::new());
|
||||||
@ -80,19 +79,18 @@ fn test_replicator_startup() {
|
|||||||
#[cfg(feature = "chacha")]
|
#[cfg(feature = "chacha")]
|
||||||
let validator_node_info = validator_node.info.clone();
|
let validator_node_info = validator_node.info.clone();
|
||||||
|
|
||||||
let validator = Fullnode::new_with_storage_rotate(
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
|
fullnode_config.storage_rotate_count = STORAGE_ROTATE_TEST_COUNT;
|
||||||
|
let validator = Fullnode::new(
|
||||||
validator_node,
|
validator_node,
|
||||||
validator_keypair,
|
validator_keypair,
|
||||||
&validator_ledger_path,
|
&validator_ledger_path,
|
||||||
Some(Arc::new(signer_proxy)),
|
|
||||||
Some(&leader_info),
|
|
||||||
false,
|
|
||||||
Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader(
|
Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader(
|
||||||
leader_info.id,
|
leader_info.id,
|
||||||
))),
|
))),
|
||||||
None,
|
Some(Arc::new(signer_proxy)),
|
||||||
STORAGE_ROTATE_TEST_COUNT,
|
Some(&leader_info),
|
||||||
None,
|
fullnode_config,
|
||||||
);
|
);
|
||||||
|
|
||||||
let bob = Keypair::new();
|
let bob = Keypair::new();
|
||||||
@ -287,9 +285,7 @@ fn test_replicator_startup_ledger_hang() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
None,
|
None,
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let validator_keypair = Arc::new(Keypair::new());
|
let validator_keypair = Arc::new(Keypair::new());
|
||||||
@ -305,9 +301,7 @@ fn test_replicator_startup_ledger_hang() {
|
|||||||
))),
|
))),
|
||||||
Some(Arc::new(signer_proxy)),
|
Some(Arc::new(signer_proxy)),
|
||||||
Some(&leader_info),
|
Some(&leader_info),
|
||||||
false,
|
Default::default(),
|
||||||
None,
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
info!("starting replicator node");
|
info!("starting replicator node");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user