diff --git a/walkeeper/src/receive_wal.rs b/walkeeper/src/receive_wal.rs index 9483a2c6cb..0ca2d2252c 100644 --- a/walkeeper/src/receive_wal.rs +++ b/walkeeper/src/receive_wal.rs @@ -2,7 +2,7 @@ //! //! FIXME: better description needed here -use anyhow::{bail, Result}; +use anyhow::{bail, Context, Result}; use bincode::config::Options; use bytes::{Buf, Bytes}; use log::*; @@ -236,7 +236,9 @@ impl<'pg> ReceiveWalConn<'pg> { .write_message(&BeMessage::CopyBothResponse)?; // Receive information about server - let server_info = self.read_msg::()?; + let server_info = self + .read_msg::() + .context("Failed to receive server info")?; info!( "Start handshake with wal_proposer {} sysid {} timeline {} tenant {}", self.peer_addr, server_info.system_id, server_info.timeline_id, server_info.tenant_id, @@ -284,7 +286,9 @@ impl<'pg> ReceiveWalConn<'pg> { self.write_msg(&my_info)?; /* Wait for vote request */ - let prop = self.read_msg::()?; + let prop = self + .read_msg::() + .context("Failed to read vote request")?; /* This is Paxos check which should ensure that only one master can perform commits */ if prop.node_id < my_info.server.node_id { /* Send my node-id to inform proposer that it's candidate was rejected */ @@ -330,7 +334,8 @@ impl<'pg> ReceiveWalConn<'pg> { let msg_bytes = self.read_msg_bytes()?; let mut msg_reader = msg_bytes.reader(); - let req = SafeKeeperRequest::des_from(&mut msg_reader)?; + let req = SafeKeeperRequest::des_from(&mut msg_reader) + .context("Failed to get WAL message header")?; if req.sender_id != my_info.server.node_id { bail!("Sender NodeId is changed"); } diff --git a/zenith_utils/src/postgres_backend.rs b/zenith_utils/src/postgres_backend.rs index d4de084442..e730178823 100644 --- a/zenith_utils/src/postgres_backend.rs +++ b/zenith_utils/src/postgres_backend.rs @@ -301,8 +301,9 @@ impl PostgresBackend { FeMessage::Query(m) => { trace!("got query {:?}", m.body); // xxx distinguish fatal and recoverable errors? - if let Err(e) = handler.process_query(self, m.body) { + if let Err(e) = handler.process_query(self, m.body.clone()) { let errmsg = format!("{}", e); + warn!("query handler for {:?} failed: {}", m.body, errmsg); self.write_message_noflush(&BeMessage::ErrorResponse(errmsg))?; } self.write_message(&BeMessage::ReadyForQuery)?;