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

View File

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

View File

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