Admin RPC Service: move post-init activation to before wait-for-supermajority (#30544)
* Move AdminRpcRequestMetadataPostInit to solana-core * Move AdminRpcRequestMetadataPostInit write to just before wait_for_supermajority * Pass AdminRpcRequestMetadataPostInit in TestValidatorGenesis * Fixup local-cluster
This commit is contained in:
parent
fbcb82dcf8
commit
7b1d446001
|
@ -0,0 +1,17 @@
|
|||
use {
|
||||
solana_gossip::cluster_info::ClusterInfo,
|
||||
solana_runtime::bank_forks::BankForks,
|
||||
solana_sdk::pubkey::Pubkey,
|
||||
std::{
|
||||
collections::HashSet,
|
||||
sync::{Arc, RwLock},
|
||||
},
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AdminRpcRequestMetadataPostInit {
|
||||
pub cluster_info: Arc<ClusterInfo>,
|
||||
pub bank_forks: Arc<RwLock<BankForks>>,
|
||||
pub vote_account: Pubkey,
|
||||
pub repair_whitelist: Arc<RwLock<HashSet<Pubkey>>>,
|
||||
}
|
|
@ -9,6 +9,7 @@
|
|||
//!
|
||||
|
||||
pub mod accounts_hash_verifier;
|
||||
pub mod admin_rpc_post_init;
|
||||
pub mod ancestor_hashes_service;
|
||||
pub mod banking_stage;
|
||||
pub mod banking_trace;
|
||||
|
|
|
@ -4,6 +4,7 @@ pub use solana_perf::report_target_features;
|
|||
use {
|
||||
crate::{
|
||||
accounts_hash_verifier::AccountsHashVerifier,
|
||||
admin_rpc_post_init::AdminRpcRequestMetadataPostInit,
|
||||
banking_trace::{self, BankingTracer},
|
||||
broadcast_stage::BroadcastStageType,
|
||||
cache_block_meta_service::{CacheBlockMetaSender, CacheBlockMetaService},
|
||||
|
@ -395,6 +396,7 @@ impl Validator {
|
|||
use_quic: bool,
|
||||
tpu_connection_pool_size: usize,
|
||||
tpu_enable_udp: bool,
|
||||
admin_rpc_service_post_init: Arc<RwLock<Option<AdminRpcRequestMetadataPostInit>>>,
|
||||
) -> Result<Self, String> {
|
||||
let id = identity_keypair.pubkey();
|
||||
assert_eq!(&id, node.info.pubkey());
|
||||
|
@ -908,6 +910,13 @@ impl Validator {
|
|||
exit.clone(),
|
||||
);
|
||||
|
||||
*admin_rpc_service_post_init.write().unwrap() = Some(AdminRpcRequestMetadataPostInit {
|
||||
bank_forks: bank_forks.clone(),
|
||||
cluster_info: cluster_info.clone(),
|
||||
vote_account: *vote_account,
|
||||
repair_whitelist: config.repair_whitelist.clone(),
|
||||
});
|
||||
|
||||
let waited_for_supermajority = match wait_for_supermajority(
|
||||
config,
|
||||
Some(&mut process_blockstore),
|
||||
|
@ -2147,6 +2156,7 @@ mod tests {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
DEFAULT_TPU_ENABLE_UDP,
|
||||
Arc::new(RwLock::new(None)),
|
||||
)
|
||||
.expect("assume successful validator start");
|
||||
assert_eq!(
|
||||
|
@ -2242,6 +2252,7 @@ mod tests {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
DEFAULT_TPU_ENABLE_UDP,
|
||||
Arc::new(RwLock::new(None)),
|
||||
)
|
||||
.expect("assume successful validator start")
|
||||
})
|
||||
|
|
|
@ -288,6 +288,7 @@ impl LocalCluster {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
DEFAULT_TPU_ENABLE_UDP,
|
||||
Arc::new(RwLock::new(None)),
|
||||
)
|
||||
.expect("assume successful validator start");
|
||||
|
||||
|
@ -493,6 +494,7 @@ impl LocalCluster {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
DEFAULT_TPU_ENABLE_UDP,
|
||||
Arc::new(RwLock::new(None)),
|
||||
)
|
||||
.expect("assume successful validator start");
|
||||
|
||||
|
@ -865,6 +867,7 @@ impl Cluster for LocalCluster {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
DEFAULT_TPU_ENABLE_UDP,
|
||||
Arc::new(RwLock::new(None)),
|
||||
)
|
||||
.expect("assume successful validator start");
|
||||
cluster_validator_info.validator = Some(restarted_node);
|
||||
|
|
|
@ -5,6 +5,7 @@ use {
|
|||
solana_cli_output::CliAccount,
|
||||
solana_client::rpc_request::MAX_MULTIPLE_ACCOUNTS,
|
||||
solana_core::{
|
||||
admin_rpc_post_init::AdminRpcRequestMetadataPostInit,
|
||||
tower_storage::TowerStorage,
|
||||
validator::{Validator, ValidatorConfig, ValidatorStartProgress},
|
||||
},
|
||||
|
@ -137,6 +138,7 @@ pub struct TestValidatorGenesis {
|
|||
pub log_messages_bytes_limit: Option<usize>,
|
||||
pub transaction_account_lock_limit: Option<usize>,
|
||||
pub tpu_enable_udp: bool,
|
||||
admin_rpc_service_post_init: Arc<RwLock<Option<AdminRpcRequestMetadataPostInit>>>,
|
||||
}
|
||||
|
||||
impl Default for TestValidatorGenesis {
|
||||
|
@ -170,6 +172,8 @@ impl Default for TestValidatorGenesis {
|
|||
log_messages_bytes_limit: Option::<usize>::default(),
|
||||
transaction_account_lock_limit: Option::<usize>::default(),
|
||||
tpu_enable_udp: DEFAULT_TPU_ENABLE_UDP,
|
||||
admin_rpc_service_post_init:
|
||||
Arc::<RwLock<Option<AdminRpcRequestMetadataPostInit>>>::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -950,6 +954,7 @@ impl TestValidator {
|
|||
DEFAULT_TPU_USE_QUIC,
|
||||
DEFAULT_TPU_CONNECTION_POOL_SIZE,
|
||||
config.tpu_enable_udp,
|
||||
config.admin_rpc_service_post_init.clone(),
|
||||
)?);
|
||||
|
||||
// Needed to avoid panics in `solana-responder-gossip` in tests that create a number of
|
||||
|
|
|
@ -7,12 +7,13 @@ use {
|
|||
log::*,
|
||||
serde::{de::Deserializer, Deserialize, Serialize},
|
||||
solana_core::{
|
||||
consensus::Tower, tower_storage::TowerStorage, validator::ValidatorStartProgress,
|
||||
admin_rpc_post_init::AdminRpcRequestMetadataPostInit, consensus::Tower,
|
||||
tower_storage::TowerStorage, validator::ValidatorStartProgress,
|
||||
},
|
||||
solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo},
|
||||
solana_gossip::contact_info::ContactInfo,
|
||||
solana_rpc::rpc::verify_pubkey,
|
||||
solana_rpc_client_api::{config::RpcAccountIndex, custom_error::RpcCustomError},
|
||||
solana_runtime::{accounts_index::AccountIndex, bank_forks::BankForks},
|
||||
solana_runtime::accounts_index::AccountIndex,
|
||||
solana_sdk::{
|
||||
exit::Exit,
|
||||
pubkey::Pubkey,
|
||||
|
@ -30,14 +31,6 @@ use {
|
|||
},
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AdminRpcRequestMetadataPostInit {
|
||||
pub cluster_info: Arc<ClusterInfo>,
|
||||
pub bank_forks: Arc<RwLock<BankForks>>,
|
||||
pub vote_account: Pubkey,
|
||||
pub repair_whitelist: Arc<RwLock<HashSet<Pubkey>>>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AdminRpcRequestMetadata {
|
||||
pub rpc_addr: Option<SocketAddr>,
|
||||
|
@ -643,11 +636,13 @@ mod tests {
|
|||
serde_json::Value,
|
||||
solana_account_decoder::parse_token::spl_token_pubkey,
|
||||
solana_core::tower_storage::NullTowerStorage,
|
||||
solana_gossip::cluster_info::ClusterInfo,
|
||||
solana_ledger::genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
||||
solana_rpc::rpc::create_validator_exit,
|
||||
solana_runtime::{
|
||||
accounts_index::AccountSecondaryIndexes,
|
||||
bank::{Bank, BankTestConfig},
|
||||
bank_forks::BankForks,
|
||||
inline_spl_token,
|
||||
secondary_index::MAX_NUM_LARGEST_INDEX_KEYS_RETURNED,
|
||||
},
|
||||
|
|
|
@ -407,7 +407,7 @@ fn main() {
|
|||
validator_exit: genesis.validator_exit.clone(),
|
||||
authorized_voter_keypairs: genesis.authorized_voter_keypairs.clone(),
|
||||
staked_nodes_overrides: genesis.staked_nodes_overrides.clone(),
|
||||
post_init: admin_service_post_init.clone(),
|
||||
post_init: admin_service_post_init,
|
||||
tower_storage: tower_storage.clone(),
|
||||
},
|
||||
);
|
||||
|
@ -561,13 +561,6 @@ fn main() {
|
|||
|
||||
match genesis.start_with_mint_address(mint_address, socket_addr_space) {
|
||||
Ok(test_validator) => {
|
||||
*admin_service_post_init.write().unwrap() =
|
||||
Some(admin_rpc_service::AdminRpcRequestMetadataPostInit {
|
||||
bank_forks: test_validator.bank_forks(),
|
||||
cluster_info: test_validator.cluster_info(),
|
||||
vote_account: test_validator.vote_account_address(),
|
||||
repair_whitelist: test_validator.repair_whitelist(),
|
||||
});
|
||||
if let Some(dashboard) = dashboard {
|
||||
dashboard.run(Duration::from_millis(250));
|
||||
}
|
||||
|
|
|
@ -1194,7 +1194,7 @@ pub fn main() {
|
|||
wait_for_supermajority: value_t!(matches, "wait_for_supermajority", Slot).ok(),
|
||||
known_validators,
|
||||
repair_validators,
|
||||
repair_whitelist: repair_whitelist.clone(),
|
||||
repair_whitelist,
|
||||
gossip_validators,
|
||||
wal_recovery_mode,
|
||||
poh_verify: !matches.is_present("skip_poh_verify"),
|
||||
|
@ -1687,18 +1687,12 @@ pub fn main() {
|
|||
tpu_use_quic,
|
||||
tpu_connection_pool_size,
|
||||
tpu_enable_udp,
|
||||
admin_service_post_init,
|
||||
)
|
||||
.unwrap_or_else(|e| {
|
||||
error!("Failed to start validator: {:?}", e);
|
||||
exit(1);
|
||||
});
|
||||
*admin_service_post_init.write().unwrap() =
|
||||
Some(admin_rpc_service::AdminRpcRequestMetadataPostInit {
|
||||
bank_forks: validator.bank_forks.clone(),
|
||||
cluster_info: validator.cluster_info.clone(),
|
||||
vote_account,
|
||||
repair_whitelist,
|
||||
});
|
||||
|
||||
if let Some(filename) = init_complete_file {
|
||||
File::create(filename).unwrap_or_else(|_| {
|
||||
|
|
Loading…
Reference in New Issue