solana-test-validator
now uses FileTowerStorage
This commit is contained in:
@ -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,
|
||||||
|
@ -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<()> {
|
||||||
|
@ -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,
|
||||||
|
@ -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()),
|
||||||
|
Reference in New Issue
Block a user