solana-test-validator now uses FileTowerStorage

This commit is contained in:
Michael Vines
2021-08-10 20:16:18 -07:00
parent e9722474eb
commit 7ddda30126
4 changed files with 25 additions and 9 deletions

View File

@ -1,5 +1,8 @@
use { use {
crate::validator::{Validator, ValidatorConfig, ValidatorStartProgress}, crate::{
tower_storage::TowerStorage,
validator::{Validator, ValidatorConfig, ValidatorStartProgress},
},
solana_client::rpc_client::RpcClient, solana_client::rpc_client::RpcClient,
solana_gossip::{ solana_gossip::{
cluster_info::{ClusterInfo, Node}, cluster_info::{ClusterInfo, Node},
@ -76,6 +79,7 @@ impl Default for TestValidatorNodeConfig {
pub struct TestValidatorGenesis { pub struct TestValidatorGenesis {
fee_rate_governor: FeeRateGovernor, fee_rate_governor: FeeRateGovernor,
ledger_path: Option<PathBuf>, ledger_path: Option<PathBuf>,
tower_storage: Option<Arc<dyn TowerStorage>>,
pub rent: Rent, pub rent: Rent,
rpc_config: JsonRpcConfig, rpc_config: JsonRpcConfig,
rpc_ports: Option<(u16, u16)>, // (JsonRpc, JsonRpcPubSub), None == random ports rpc_ports: Option<(u16, u16)>, // (JsonRpc, JsonRpcPubSub), None == random ports
@ -97,6 +101,11 @@ impl TestValidatorGenesis {
self self
} }
pub fn tower_storage(&mut self, tower_storage: Arc<dyn TowerStorage>) -> &mut Self {
self.tower_storage = Some(tower_storage);
self
}
/// Check if a given TestValidator ledger has already been initialized /// Check if a given TestValidator ledger has already been initialized
pub fn ledger_exists(ledger_path: &Path) -> bool { pub fn ledger_exists(ledger_path: &Path) -> bool {
ledger_path.join("vote-account-keypair.json").exists() ledger_path.join("vote-account-keypair.json").exists()
@ -484,7 +493,7 @@ impl TestValidator {
} }
} }
let validator_config = ValidatorConfig { let mut validator_config = ValidatorConfig {
rpc_addrs: Some(( rpc_addrs: Some((
SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), node.info.rpc.port()), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), node.info.rpc.port()),
SocketAddr::new( SocketAddr::new(
@ -514,6 +523,9 @@ impl TestValidator {
no_wait_for_vote_to_start_leader: true, no_wait_for_vote_to_start_leader: true,
..ValidatorConfig::default() ..ValidatorConfig::default()
}; };
if let Some(ref tower_storage) = config.tower_storage {
validator_config.tower_storage = tower_storage.clone();
}
let validator = Some(Validator::new( let validator = Some(Validator::new(
node, node,

View File

@ -6,7 +6,7 @@ use {
}, },
std::{ std::{
fs::{self, File}, fs::{self, File},
io::BufReader, io::{self, BufReader},
path::PathBuf, path::PathBuf,
}, },
}; };
@ -70,9 +70,10 @@ pub struct NullTowerStorage {}
impl TowerStorage for NullTowerStorage { impl TowerStorage for NullTowerStorage {
fn load(&self, _node_pubkey: &Pubkey) -> Result<SavedTower> { fn load(&self, _node_pubkey: &Pubkey) -> Result<SavedTower> {
Err(TowerError::WrongTower( Err(TowerError::IoError(io::Error::new(
"NullTowerStorage has no storage".into(), io::ErrorKind::Other,
)) "NullTowerStorage::load() not available",
)))
} }
fn store(&self, _saved_tower: &SavedTower) -> Result<()> { fn store(&self, _saved_tower: &SavedTower) -> Result<()> {

View File

@ -13,7 +13,7 @@ use crate::{
serve_repair_service::ServeRepairService, serve_repair_service::ServeRepairService,
sigverify, sigverify,
snapshot_packager_service::{PendingSnapshotPackage, SnapshotPackagerService}, snapshot_packager_service::{PendingSnapshotPackage, SnapshotPackagerService},
tower_storage::{FileTowerStorage, TowerStorage}, tower_storage::TowerStorage,
tpu::{Tpu, DEFAULT_TPU_COALESCE_MS}, tpu::{Tpu, DEFAULT_TPU_COALESCE_MS},
tvu::{Sockets, Tvu, TvuConfig}, tvu::{Sockets, Tvu, TvuConfig},
}; };
@ -183,7 +183,7 @@ impl Default for ValidatorConfig {
wal_recovery_mode: None, wal_recovery_mode: None,
poh_verify: true, poh_verify: true,
require_tower: false, require_tower: false,
tower_storage: Arc::new(FileTowerStorage::new(PathBuf::default())), tower_storage: Arc::new(crate::tower_storage::NullTowerStorage::default()),
debug_keys: None, debug_keys: None,
contact_debug_interval: DEFAULT_CONTACT_DEBUG_INTERVAL_MILLIS, contact_debug_interval: DEFAULT_CONTACT_DEBUG_INTERVAL_MILLIS,
contact_save_interval: DEFAULT_CONTACT_SAVE_INTERVAL_MILLIS, contact_save_interval: DEFAULT_CONTACT_SAVE_INTERVAL_MILLIS,

View File

@ -509,6 +509,8 @@ fn main() {
let mut genesis = TestValidatorGenesis::default(); let mut genesis = TestValidatorGenesis::default();
genesis.max_ledger_shreds = value_of(&matches, "limit_ledger_size"); genesis.max_ledger_shreds = value_of(&matches, "limit_ledger_size");
let tower_storage = Arc::new(FileTowerStorage::new(ledger_path.clone()));
let admin_service_cluster_info = Arc::new(RwLock::new(None)); let admin_service_cluster_info = Arc::new(RwLock::new(None));
admin_rpc_service::run( admin_rpc_service::run(
&ledger_path, &ledger_path,
@ -522,7 +524,7 @@ fn main() {
validator_exit: genesis.validator_exit.clone(), validator_exit: genesis.validator_exit.clone(),
authorized_voter_keypairs: genesis.authorized_voter_keypairs.clone(), authorized_voter_keypairs: genesis.authorized_voter_keypairs.clone(),
cluster_info: admin_service_cluster_info.clone(), cluster_info: admin_service_cluster_info.clone(),
tower_storage: Arc::new(FileTowerStorage::new(ledger_path.clone())), tower_storage: tower_storage.clone(),
}, },
); );
let dashboard = if output == Output::Dashboard { let dashboard = if output == Output::Dashboard {
@ -540,6 +542,7 @@ fn main() {
genesis genesis
.ledger_path(&ledger_path) .ledger_path(&ledger_path)
.tower_storage(tower_storage)
.add_account( .add_account(
faucet_pubkey, faucet_pubkey,
AccountSharedData::new(faucet_lamports, 0, &system_program::id()), AccountSharedData::new(faucet_lamports, 0, &system_program::id()),