cluster.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. use {
  2. solana_commitment_config::CommitmentConfig,
  3. solana_core::validator::{Validator, ValidatorConfig},
  4. solana_gossip::{contact_info::ContactInfo, node::Node},
  5. solana_keypair::Keypair,
  6. solana_ledger::shred::Shred,
  7. solana_net_utils::SocketAddrSpace,
  8. solana_pubkey::Pubkey,
  9. solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
  10. solana_tpu_client::tpu_client::TpuClient,
  11. std::{io::Result, path::PathBuf, sync::Arc},
  12. };
  13. pub type QuicTpuClient = TpuClient<QuicPool, QuicConnectionManager, QuicConfig>;
  14. pub struct ValidatorInfo {
  15. pub keypair: Arc<Keypair>,
  16. pub voting_keypair: Arc<Keypair>,
  17. pub ledger_path: PathBuf,
  18. pub contact_info: ContactInfo,
  19. }
  20. pub struct ClusterValidatorInfo {
  21. pub info: ValidatorInfo,
  22. pub config: ValidatorConfig,
  23. pub validator: Option<Validator>,
  24. }
  25. impl ClusterValidatorInfo {
  26. pub fn new(
  27. validator_info: ValidatorInfo,
  28. config: ValidatorConfig,
  29. validator: Validator,
  30. ) -> Self {
  31. Self {
  32. info: validator_info,
  33. config,
  34. validator: Some(validator),
  35. }
  36. }
  37. }
  38. pub trait Cluster {
  39. fn get_node_pubkeys(&self) -> Vec<Pubkey>;
  40. fn build_validator_tpu_quic_client(&self, pubkey: &Pubkey) -> Result<QuicTpuClient>;
  41. fn build_validator_tpu_quic_client_with_commitment(
  42. &self,
  43. pubkey: &Pubkey,
  44. commitment_config: CommitmentConfig,
  45. ) -> Result<QuicTpuClient>;
  46. fn get_contact_info(&self, pubkey: &Pubkey) -> Option<&ContactInfo>;
  47. fn exit_node(&mut self, pubkey: &Pubkey) -> ClusterValidatorInfo;
  48. fn restart_node(
  49. &mut self,
  50. pubkey: &Pubkey,
  51. cluster_validator_info: ClusterValidatorInfo,
  52. socket_addr_space: SocketAddrSpace,
  53. );
  54. fn create_restart_context(
  55. &mut self,
  56. pubkey: &Pubkey,
  57. cluster_validator_info: &mut ClusterValidatorInfo,
  58. ) -> (Node, Vec<ContactInfo>);
  59. fn restart_node_with_context(
  60. cluster_validator_info: ClusterValidatorInfo,
  61. restart_context: (Node, Vec<ContactInfo>),
  62. socket_addr_space: SocketAddrSpace,
  63. ) -> ClusterValidatorInfo;
  64. fn add_node(&mut self, pubkey: &Pubkey, cluster_validator_info: ClusterValidatorInfo);
  65. fn exit_restart_node(
  66. &mut self,
  67. pubkey: &Pubkey,
  68. config: ValidatorConfig,
  69. socket_addr_space: SocketAddrSpace,
  70. );
  71. fn set_entry_point(&mut self, entry_point_info: ContactInfo);
  72. fn send_shreds_to_validator(&self, dup_shreds: Vec<&Shred>, validator_key: &Pubkey);
  73. }