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 {
crate::validator::{Validator, ValidatorConfig, ValidatorStartProgress},
crate::{
tower_storage::TowerStorage,
validator::{Validator, ValidatorConfig, ValidatorStartProgress},
},
solana_client::rpc_client::RpcClient,
solana_gossip::{
cluster_info::{ClusterInfo, Node},
@ -76,6 +79,7 @@ impl Default for TestValidatorNodeConfig {
pub struct TestValidatorGenesis {
fee_rate_governor: FeeRateGovernor,
ledger_path: Option<PathBuf>,
tower_storage: Option<Arc<dyn TowerStorage>>,
pub rent: Rent,
rpc_config: JsonRpcConfig,
rpc_ports: Option<(u16, u16)>, // (JsonRpc, JsonRpcPubSub), None == random ports
@ -97,6 +101,11 @@ impl TestValidatorGenesis {
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
pub fn ledger_exists(ledger_path: &Path) -> bool {
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((
SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), node.info.rpc.port()),
SocketAddr::new(
@ -514,6 +523,9 @@ impl TestValidator {
no_wait_for_vote_to_start_leader: true,
..ValidatorConfig::default()
};
if let Some(ref tower_storage) = config.tower_storage {
validator_config.tower_storage = tower_storage.clone();
}
let validator = Some(Validator::new(
node,

View File

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

View File

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

View File

@ -509,6 +509,8 @@ fn main() {
let mut genesis = TestValidatorGenesis::default();
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));
admin_rpc_service::run(
&ledger_path,
@ -522,7 +524,7 @@ fn main() {
validator_exit: genesis.validator_exit.clone(),
authorized_voter_keypairs: genesis.authorized_voter_keypairs.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 {
@ -540,6 +542,7 @@ fn main() {
genesis
.ledger_path(&ledger_path)
.tower_storage(tower_storage)
.add_account(
faucet_pubkey,
AccountSharedData::new(faucet_lamports, 0, &system_program::id()),