derives Error trait for ClusterInfoError and core::result::Error (#27208)

This commit is contained in:
behzad nouri 2022-08-17 22:01:51 +00:00 committed by GitHub
parent 225cddcffb
commit fea66c8b63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 59 deletions

View File

@ -3,53 +3,42 @@
use { use {
solana_gossip::{cluster_info, gossip_error::GossipError}, solana_gossip::{cluster_info, gossip_error::GossipError},
solana_ledger::blockstore, solana_ledger::blockstore,
thiserror::Error,
}; };
#[derive(Debug)] #[derive(Debug, Error)]
pub enum Error { pub enum Error {
Io(std::io::Error), #[error(transparent)]
Recv(crossbeam_channel::RecvError), Blockstore(#[from] blockstore::BlockstoreError),
#[error(transparent)]
ClusterInfo(#[from] cluster_info::ClusterInfoError),
#[error(transparent)]
Gossip(#[from] GossipError),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("ReadyTimeout")]
ReadyTimeout, ReadyTimeout,
RecvTimeout(crossbeam_channel::RecvTimeoutError), #[error(transparent)]
TrySend, Recv(#[from] crossbeam_channel::RecvError),
Serialize(std::boxed::Box<bincode::ErrorKind>), #[error(transparent)]
ClusterInfo(cluster_info::ClusterInfoError), RecvTimeout(#[from] crossbeam_channel::RecvTimeoutError),
#[error("Send")]
Send, Send,
Blockstore(blockstore::BlockstoreError), #[error("TrySend")]
WeightedIndex(rand::distributions::weighted::WeightedError), TrySend,
Gossip(GossipError), #[error(transparent)]
Serialize(#[from] std::boxed::Box<bincode::ErrorKind>),
#[error(transparent)]
WeightedIndex(#[from] rand::distributions::weighted::WeightedError),
} }
pub type Result<T> = std::result::Result<T, Error>; pub type Result<T> = std::result::Result<T, Error>;
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "solana error")
}
}
impl std::error::Error for Error {}
impl std::convert::From<crossbeam_channel::RecvError> for Error {
fn from(e: crossbeam_channel::RecvError) -> Error {
Error::Recv(e)
}
}
impl std::convert::From<crossbeam_channel::ReadyTimeoutError> for Error { impl std::convert::From<crossbeam_channel::ReadyTimeoutError> for Error {
fn from(_e: crossbeam_channel::ReadyTimeoutError) -> Error { fn from(_e: crossbeam_channel::ReadyTimeoutError) -> Error {
Error::ReadyTimeout Error::ReadyTimeout
} }
} }
impl std::convert::From<crossbeam_channel::RecvTimeoutError> for Error {
fn from(e: crossbeam_channel::RecvTimeoutError) -> Error {
Error::RecvTimeout(e)
}
}
impl std::convert::From<cluster_info::ClusterInfoError> for Error {
fn from(e: cluster_info::ClusterInfoError) -> Error {
Error::ClusterInfo(e)
}
}
impl<T> std::convert::From<crossbeam_channel::TrySendError<T>> for Error { impl<T> std::convert::From<crossbeam_channel::TrySendError<T>> for Error {
fn from(_e: crossbeam_channel::TrySendError<T>) -> Error { fn from(_e: crossbeam_channel::TrySendError<T>) -> Error {
Error::TrySend Error::TrySend
@ -60,31 +49,6 @@ impl<T> std::convert::From<crossbeam_channel::SendError<T>> for Error {
Error::Send Error::Send
} }
} }
impl std::convert::From<std::io::Error> for Error {
fn from(e: std::io::Error) -> Error {
Error::Io(e)
}
}
impl std::convert::From<std::boxed::Box<bincode::ErrorKind>> for Error {
fn from(e: std::boxed::Box<bincode::ErrorKind>) -> Error {
Error::Serialize(e)
}
}
impl std::convert::From<blockstore::BlockstoreError> for Error {
fn from(e: blockstore::BlockstoreError) -> Error {
Error::Blockstore(e)
}
}
impl std::convert::From<rand::distributions::weighted::WeightedError> for Error {
fn from(e: rand::distributions::weighted::WeightedError) -> Error {
Error::WeightedIndex(e)
}
}
impl std::convert::From<GossipError> for Error {
fn from(e: GossipError) -> Error {
Error::Gossip(e)
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {

View File

@ -92,6 +92,7 @@ use {
thread::{sleep, Builder, JoinHandle}, thread::{sleep, Builder, JoinHandle},
time::{Duration, Instant}, time::{Duration, Instant},
}, },
thiserror::Error,
}; };
/// The Data plane fanout size, also used as the neighborhood size /// The Data plane fanout size, also used as the neighborhood size
@ -138,12 +139,17 @@ const MIN_STAKE_FOR_GOSSIP: u64 = solana_sdk::native_token::LAMPORTS_PER_SOL;
/// Minimum number of staked nodes for enforcing stakes in gossip. /// Minimum number of staked nodes for enforcing stakes in gossip.
const MIN_NUM_STAKED_NODES: usize = 500; const MIN_NUM_STAKED_NODES: usize = 500;
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq, Error)]
pub enum ClusterInfoError { pub enum ClusterInfoError {
#[error("NoPeers")]
NoPeers, NoPeers,
#[error("NoLeader")]
NoLeader, NoLeader,
#[error("BadContactInfo")]
BadContactInfo, BadContactInfo,
#[error("BadGossipAddress")]
BadGossipAddress, BadGossipAddress,
#[error("TooManyIncrementalSnapshotHashes")]
TooManyIncrementalSnapshotHashes, TooManyIncrementalSnapshotHashes,
} }