Browse Source

Log more information when RPC requests' UTF8 parsing fails

Also don't panic in case of RPC errors
refactor-mempool
Roman Zeyde 7 years ago
parent
commit
16ee6f4dd1
No known key found for this signature in database GPG Key ID: 87CAE5FA46917CBB
  1. 29
      src/rpc.rs

29
src/rpc.rs

@ -311,17 +311,28 @@ impl Connection {
} }
} }
fn handle_requests(mut reader: BufReader<TcpStream>, tx: SyncSender<Message>) { fn handle_requests(mut reader: BufReader<TcpStream>, tx: SyncSender<Message>) -> Result<()> {
loop { loop {
let mut line = String::new(); let mut line = Vec::<u8>::new();
reader reader
.read_line(&mut line) // TODO: use .lines() iterator .read_until(b'\n', &mut line)
.expect("failed to read a request"); .chain_err(|| "failed to read a request")?;
if line.is_empty() { if line.is_empty() {
tx.send(Message::Done).expect("channel closed"); tx.send(Message::Done).chain_err(|| "channel closed")?;
break; return Ok(());
} else { } else {
tx.send(Message::Request(line)).expect("channel closed"); match String::from_utf8(line) {
Ok(req) => tx.send(Message::Request(req))
.chain_err(|| "channel closed")?,
Err(err) => {
let _ = tx.send(Message::Done);
bail!(
"invalid UTF8 {:?}: {:?}",
String::from_utf8_lossy(err.as_bytes()),
err
)
}
}
} }
} }
} }
@ -339,8 +350,8 @@ impl Connection {
} }
info!("[{}] shutting down connection", self.addr); info!("[{}] shutting down connection", self.addr);
let _ = self.stream.shutdown(Shutdown::Both); let _ = self.stream.shutdown(Shutdown::Both);
if child.join().is_err() { if let Err(err) = child.join().expect("receiver panicked") {
error!("[{}] receiver panicked", self.addr); error!("[{}] receiver failed: {}", self.addr, err);
} }
} }
} }

Loading…
Cancel
Save