mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-03 19:42:55 +00:00
Marginally improve walkeeper error visibility (#440)
Adds a warning if a postgres query fails, and some additional context to errors generated inside `ReceiveWalConn::run`
This commit is contained in:
@@ -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::<ServerInfo>()?;
|
||||
let server_info = self
|
||||
.read_msg::<ServerInfo>()
|
||||
.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::<RequestVote>()?;
|
||||
let prop = self
|
||||
.read_msg::<RequestVote>()
|
||||
.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");
|
||||
}
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
Reference in New Issue
Block a user