2021-07-20 22:25:13 -07:00
|
|
|
use {
|
2022-03-09 18:33:05 -08:00
|
|
|
solana_client::{thin_client::ThinClient, udp_client::UdpTpuConnection},
|
2021-07-20 22:25:13 -07:00
|
|
|
solana_core::validator::{Validator, ValidatorConfig},
|
|
|
|
solana_gossip::{cluster_info::Node, contact_info::ContactInfo},
|
|
|
|
solana_sdk::{pubkey::Pubkey, signature::Keypair},
|
|
|
|
solana_streamer::socket::SocketAddrSpace,
|
|
|
|
std::{path::PathBuf, sync::Arc},
|
|
|
|
};
|
2019-09-08 17:53:34 -07:00
|
|
|
|
|
|
|
pub struct ValidatorInfo {
|
|
|
|
pub keypair: Arc<Keypair>,
|
|
|
|
pub voting_keypair: Arc<Keypair>,
|
|
|
|
pub ledger_path: PathBuf,
|
|
|
|
pub contact_info: ContactInfo,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct ClusterValidatorInfo {
|
|
|
|
pub info: ValidatorInfo,
|
|
|
|
pub config: ValidatorConfig,
|
2019-12-03 16:31:59 -08:00
|
|
|
pub validator: Option<Validator>,
|
2019-09-08 17:53:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
impl ClusterValidatorInfo {
|
2019-12-03 16:31:59 -08:00
|
|
|
pub fn new(
|
|
|
|
validator_info: ValidatorInfo,
|
|
|
|
config: ValidatorConfig,
|
|
|
|
validator: Validator,
|
|
|
|
) -> Self {
|
2019-09-08 17:53:34 -07:00
|
|
|
Self {
|
|
|
|
info: validator_info,
|
|
|
|
config,
|
2019-12-03 16:31:59 -08:00
|
|
|
validator: Some(validator),
|
2019-09-08 17:53:34 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait Cluster {
|
|
|
|
fn get_node_pubkeys(&self) -> Vec<Pubkey>;
|
2022-03-09 18:33:05 -08:00
|
|
|
fn get_validator_client(&self, pubkey: &Pubkey) -> Option<ThinClient<UdpTpuConnection>>;
|
2020-01-30 21:51:11 -08:00
|
|
|
fn get_contact_info(&self, pubkey: &Pubkey) -> Option<&ContactInfo>;
|
2019-09-08 17:53:34 -07:00
|
|
|
fn exit_node(&mut self, pubkey: &Pubkey) -> ClusterValidatorInfo;
|
2021-07-23 08:25:03 -07:00
|
|
|
fn restart_node(
|
|
|
|
&mut self,
|
|
|
|
pubkey: &Pubkey,
|
|
|
|
cluster_validator_info: ClusterValidatorInfo,
|
|
|
|
socket_addr_space: SocketAddrSpace,
|
|
|
|
);
|
2020-11-12 06:29:04 -08:00
|
|
|
fn create_restart_context(
|
|
|
|
&mut self,
|
|
|
|
pubkey: &Pubkey,
|
|
|
|
cluster_validator_info: &mut ClusterValidatorInfo,
|
2021-05-26 08:15:46 -07:00
|
|
|
) -> (Node, Option<ContactInfo>);
|
2020-11-12 06:29:04 -08:00
|
|
|
fn restart_node_with_context(
|
|
|
|
cluster_validator_info: ClusterValidatorInfo,
|
2021-05-26 08:15:46 -07:00
|
|
|
restart_context: (Node, Option<ContactInfo>),
|
2021-07-23 08:25:03 -07:00
|
|
|
socket_addr_space: SocketAddrSpace,
|
2020-11-12 06:29:04 -08:00
|
|
|
) -> ClusterValidatorInfo;
|
|
|
|
fn add_node(&mut self, pubkey: &Pubkey, cluster_validator_info: ClusterValidatorInfo);
|
2021-07-23 08:25:03 -07:00
|
|
|
fn exit_restart_node(
|
|
|
|
&mut self,
|
|
|
|
pubkey: &Pubkey,
|
|
|
|
config: ValidatorConfig,
|
|
|
|
socket_addr_space: SocketAddrSpace,
|
|
|
|
);
|
2019-09-08 17:53:34 -07:00
|
|
|
}
|