Improve logging on various error conditions

This commit is contained in:
Michael Vines 2018-10-23 10:59:43 -07:00
parent bbb38ac106
commit 4f34822900
3 changed files with 22 additions and 13 deletions

View File

@ -174,8 +174,10 @@ impl RpcSol for RpcSolImpl {
let mut drone_addr = get_leader_addr(&meta.cluster_info)?;
drone_addr.set_port(DRONE_PORT);
let signature =
request_airdrop(&drone_addr, &pubkey, tokens).map_err(|_| Error::internal_error())?;
let signature = request_airdrop(&drone_addr, &pubkey, tokens).map_err(|err| {
info!("request_airdrop failed: {:?}", err);
Error::internal_error()
})?;;
let now = Instant::now();
let mut signature_status;
@ -185,6 +187,7 @@ impl RpcSol for RpcSolImpl {
if signature_status.is_ok() {
return Ok(bs58::encode(signature).into_string());
} else if now.elapsed().as_secs() > 5 {
info!("airdrop signature timeout");
return Err(Error::internal_error());
}
sleep(Duration::from_millis(100));
@ -192,7 +195,7 @@ impl RpcSol for RpcSolImpl {
}
fn send_transaction(&self, meta: Self::Metadata, data: Vec<u8>) -> Result<String> {
let tx: Transaction = deserialize(&data).map_err(|err| {
debug!("send_transaction: deserialize error: {:?}", err);
info!("send_transaction: deserialize error: {:?}", err);
Error::invalid_request()
})?;
let transactions_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
@ -200,7 +203,7 @@ impl RpcSol for RpcSolImpl {
transactions_socket
.send_to(&data, transactions_addr)
.map_err(|err| {
debug!("send_transaction: send_to error: {:?}", err);
info!("send_transaction: send_to error: {:?}", err);
Error::internal_error()
})?;
Ok(bs58::encode(tx.signature).into_string())
@ -254,9 +257,10 @@ fn get_leader_addr(cluster_info: &Arc<RwLock<ClusterInfo>>) -> Result<SocketAddr
}
fn verify_pubkey(input: String) -> Result<Pubkey> {
let pubkey_vec = bs58::decode(input)
.into_vec()
.map_err(|_| Error::invalid_request())?;
let pubkey_vec = bs58::decode(input).into_vec().map_err(|err| {
info!("verify_pubkey: invalid input: {:?}", err);
Error::invalid_request()
})?;
if pubkey_vec.len() != mem::size_of::<Pubkey>() {
Err(Error::invalid_request())
} else {
@ -265,9 +269,10 @@ fn verify_pubkey(input: String) -> Result<Pubkey> {
}
fn verify_signature(input: String) -> Result<Signature> {
let signature_vec = bs58::decode(input)
.into_vec()
.map_err(|_| Error::invalid_request())?;
let signature_vec = bs58::decode(input).into_vec().map_err(|err| {
info!("verify_signature: invalid input: {:?}", err);
Error::invalid_request()
})?;
if signature_vec.len() != mem::size_of::<Signature>() {
Err(Error::invalid_request())
} else {

View File

@ -73,12 +73,15 @@ impl SystemProgram {
program_id,
} => {
if !Self::check_id(&accounts[0].program_id) {
info!("Invalid account[0] program_id");
Err(Error::InvalidArgument)?;
}
if space > 0
&& (!accounts[1].userdata.is_empty()
|| !Self::check_id(&accounts[1].program_id))
{
info!("Invalid account[1]");
Err(Error::InvalidArgument)?;
}
accounts[0].tokens -= tokens;

View File

@ -551,9 +551,10 @@ pub fn request_airdrop(
let tx = serialize(&req).expect("serialize drone request");
stream.write_all(&tx)?;
let mut buffer = [0; size_of::<Signature>()];
stream
.read_exact(&mut buffer)
.or_else(|_| Err(Error::new(ErrorKind::Other, "Airdrop failed")))?;
stream.read_exact(&mut buffer).or_else(|err| {
info!("request_airdrop: read_exact error: {:?}", err);
Err(Error::new(ErrorKind::Other, "Airdrop failed"))
})?;
let signature: Signature = deserialize(&buffer).or_else(|err| {
Err(Error::new(
ErrorKind::Other,