node: downgrade `error!` logs
Evaluate the `error!` logging in `radicle-node`. The majority of cases, the `error!` is downgraded to `warn!`. These cases are generally useful to know if there's an issue, but the operator cannon necessarily do anything about it. In a few cases, `debug!` was chosen. These are generally when an error means that a result is not part of an accumulation, or the system will eventually correct itself during another event or restart.
This commit is contained in:
parent
b020543c4b
commit
6d1abd2833
|
|
@ -50,7 +50,7 @@ where
|
||||||
|
|
||||||
thread::spawn(&nid, "control", move || {
|
thread::spawn(&nid, "control", move || {
|
||||||
if let Err((e, mut stream)) = command(stream, handle) {
|
if let Err((e, mut stream)) = command(stream, handle) {
|
||||||
log::error!(target: "control", "Command returned error: {e}");
|
log::debug!(target: "control", "Command returned error: {e}");
|
||||||
|
|
||||||
CommandResult::error(e).to_writer(&mut stream).ok();
|
CommandResult::error(e).to_writer(&mut stream).ok();
|
||||||
|
|
||||||
|
|
@ -59,7 +59,7 @@ where
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Err(e) => log::error!(target: "control", "Failed to accept incoming connection: {e}"),
|
Err(e) => log::warn!(target: "control", "Failed to accept incoming connection: {e}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log::debug!(target: "control", "Exiting control loop..");
|
log::debug!(target: "control", "Exiting control loop..");
|
||||||
|
|
|
||||||
|
|
@ -399,7 +399,7 @@ impl<H: ReactionHandler> Runtime<H> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(err) = res {
|
if let Err(err) = res {
|
||||||
log::error!(target: "reactor", "Error during polling: {err}");
|
log::warn!(target: "reactor", "Failure during polling: {err}");
|
||||||
self.service.handle_error(Error::Poll(err));
|
self.service.handle_error(Error::Poll(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -497,7 +497,7 @@ impl<H: ReactionHandler> Runtime<H> {
|
||||||
// Deadlock may happen here if the service will generate events over and over
|
// Deadlock may happen here if the service will generate events over and over
|
||||||
// in the handle_* calls we may never get out of this loop
|
// in the handle_* calls we may never get out of this loop
|
||||||
if let Err(err) = self.handle_action(action, instant) {
|
if let Err(err) = self.handle_action(action, instant) {
|
||||||
log::error!(target: "reactor", "Error: {err}");
|
log::warn!(target: "reactor", "Failure: {err}");
|
||||||
self.service.handle_error(err);
|
self.service.handle_error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -558,7 +558,7 @@ impl<H: ReactionHandler> Runtime<H> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log::error!(target: "reactor", token=token.0; "No transport with token {token:?} is known!");
|
log::debug!(target: "reactor", token=token.0; "No transport with token {token:?} is known!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Action::SetTimer(duration) => {
|
Action::SetTimer(duration) => {
|
||||||
|
|
|
||||||
|
|
@ -265,7 +265,7 @@ impl<S: Session> Transport<S> {
|
||||||
Ok(0)
|
Ok(0)
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
log::error!(target: "transport", "Resource {} failed write operation with message '{err}'", self.display());
|
log::warn!(target: "transport", "Resource {} failed write operation with message '{err}'", self.display());
|
||||||
Err(err)
|
Err(err)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@ where
|
||||||
}
|
}
|
||||||
Entry::Occupied(mut e) => match e.get_mut() {
|
Entry::Occupied(mut e) => match e.get_mut() {
|
||||||
Peer::Disconnecting { nid, link, .. } => {
|
Peer::Disconnecting { nid, link, .. } => {
|
||||||
log::error!(target: "wire", token=token.0; "Peer is already disconnecting");
|
log::debug!(target: "wire", token=token.0; "Peer is already disconnecting");
|
||||||
|
|
||||||
nid.map(|n| (n, *link))
|
nid.map(|n| (n, *link))
|
||||||
}
|
}
|
||||||
|
|
@ -528,7 +528,7 @@ where
|
||||||
Ok((connection, peer)) => {
|
Ok((connection, peer)) => {
|
||||||
let remote = NetAddr::from(peer);
|
let remote = NetAddr::from(peer);
|
||||||
let InetHost::Ip(ip) = remote.host else {
|
let InetHost::Ip(ip) = remote.host else {
|
||||||
log::error!(target: "wire", "Unexpected host type for inbound connection {remote}; dropping..");
|
log::debug!(target: "wire", "Unexpected host type for inbound connection {remote}; dropping..");
|
||||||
drop(connection);
|
drop(connection);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
@ -552,7 +552,7 @@ where
|
||||||
let transport = match Transport::with_session(session, Link::Inbound) {
|
let transport = match Transport::with_session(session, Link::Inbound) {
|
||||||
Ok(transport) => transport,
|
Ok(transport) => transport,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
log::error!(target: "wire", "Failed to create transport for accepted connection: {err}");
|
log::warn!(target: "wire", "Failed to create transport for accepted connection: {err}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -593,7 +593,7 @@ where
|
||||||
let nid: NodeId = state.remote_static_key.unwrap();
|
let nid: NodeId = state.remote_static_key.unwrap();
|
||||||
// Make sure we don't try to connect to ourselves by mistake.
|
// Make sure we don't try to connect to ourselves by mistake.
|
||||||
if &nid == self.signer.public_key() {
|
if &nid == self.signer.public_key() {
|
||||||
log::error!(target: "wire", "Self-connection detected, disconnecting..");
|
log::warn!(target: "wire", "Self-connection detected, disconnecting..");
|
||||||
self.disconnect(token, DisconnectReason::SelfConnection);
|
self.disconnect(token, DisconnectReason::SelfConnection);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
@ -607,7 +607,7 @@ where
|
||||||
assert_eq!(nid, peer.nid);
|
assert_eq!(nid, peer.nid);
|
||||||
(peer.addr, Link::Outbound)
|
(peer.addr, Link::Outbound)
|
||||||
} else {
|
} else {
|
||||||
log::error!(target: "wire", token=token.0; "Session for {nid} not found");
|
log::debug!(target: "wire", token=token.0; "Session for {nid} not found");
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
log::debug!(
|
log::debug!(
|
||||||
|
|
@ -702,8 +702,8 @@ where
|
||||||
metrics.received_bytes += data.len();
|
metrics.received_bytes += data.len();
|
||||||
|
|
||||||
if inbox.input(&data).is_err() {
|
if inbox.input(&data).is_err() {
|
||||||
log::error!(target: "wire", "Maximum inbox size ({MAX_INBOX_SIZE}) reached for peer {nid}");
|
log::warn!(target: "wire", "Maximum inbox size ({MAX_INBOX_SIZE}) reached for peer {nid}");
|
||||||
log::error!(target: "wire", "Unable to process messages fast enough for peer {nid}; disconnecting..");
|
log::warn!(target: "wire", "Unable to process messages fast enough for peer {nid}; disconnecting..");
|
||||||
self.disconnect(
|
self.disconnect(
|
||||||
token,
|
token,
|
||||||
DisconnectReason::Session(session::Error::Misbehavior),
|
DisconnectReason::Session(session::Error::Misbehavior),
|
||||||
|
|
@ -740,7 +740,7 @@ where
|
||||||
channels,
|
channels,
|
||||||
};
|
};
|
||||||
if let Err(e) = self.worker.try_send(task) {
|
if let Err(e) = self.worker.try_send(task) {
|
||||||
log::error!(
|
log::warn!(
|
||||||
target: "wire",
|
target: "wire",
|
||||||
"Worker pool failed to accept incoming fetch request: {e}"
|
"Worker pool failed to accept incoming fetch request: {e}"
|
||||||
);
|
);
|
||||||
|
|
@ -754,7 +754,7 @@ where
|
||||||
log::debug!(target: "wire", "Received `end-of-file` on stream {stream} from {nid}");
|
log::debug!(target: "wire", "Received `end-of-file` on stream {stream} from {nid}");
|
||||||
|
|
||||||
if s.channels.send(ChannelEvent::Eof).is_err() {
|
if s.channels.send(ChannelEvent::Eof).is_err() {
|
||||||
log::error!(target: "wire", "Worker is disconnected; cannot send `EOF`");
|
log::debug!(target: "wire", "Worker is disconnected; cannot send `EOF`");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log::debug!(target: "wire", "Ignoring frame on closed or unknown stream {stream}");
|
log::debug!(target: "wire", "Ignoring frame on closed or unknown stream {stream}");
|
||||||
|
|
@ -791,7 +791,7 @@ where
|
||||||
metrics.received_git_bytes += data.len();
|
metrics.received_git_bytes += data.len();
|
||||||
|
|
||||||
if s.channels.send(ChannelEvent::Data(data)).is_err() {
|
if s.channels.send(ChannelEvent::Data(data)).is_err() {
|
||||||
log::error!(target: "wire", "Worker is disconnected; cannot send data");
|
log::warn!(target: "wire", "Worker is disconnected; cannot send data");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log::debug!(target: "wire", "Ignoring frame on closed or unknown stream {stream}");
|
log::debug!(target: "wire", "Ignoring frame on closed or unknown stream {stream}");
|
||||||
|
|
@ -802,7 +802,7 @@ where
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!(target: "wire", "Invalid gossip message from {nid}: {e}");
|
log::warn!(target: "wire", "Invalid gossip message from {nid}: {e}");
|
||||||
|
|
||||||
if !inbox.is_empty() {
|
if !inbox.is_empty() {
|
||||||
log::debug!(target: "wire", "Dropping read buffer for {nid} with {} bytes", inbox.len());
|
log::debug!(target: "wire", "Dropping read buffer for {nid} with {} bytes", inbox.len());
|
||||||
|
|
@ -875,7 +875,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handover_listener(&mut self, token: Token, _listener: Self::Listener) {
|
fn handover_listener(&mut self, token: Token, _listener: Self::Listener) {
|
||||||
log::error!(target: "wire", token=token.0; "Listener handover is not supported");
|
log::warn!(target: "wire", token=token.0; "Listener handover is not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handover_transport(&mut self, token: Token, transport: Self::Transport) {
|
fn handover_transport(&mut self, token: Token, transport: Self::Transport) {
|
||||||
|
|
@ -933,7 +933,7 @@ where
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
log::error!(target: "wire", "Dropping {} message(s) to {node_id}: unknown peer", msgs.len());
|
log::debug!(target: "wire", "Dropping {} message(s) to {node_id}: unknown peer", msgs.len());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -953,7 +953,7 @@ where
|
||||||
}
|
}
|
||||||
Io::Connect(node_id, addr) => {
|
Io::Connect(node_id, addr) => {
|
||||||
if self.peers.connected().any(|(_, id)| id == &node_id) {
|
if self.peers.connected().any(|(_, id)| id == &node_id) {
|
||||||
log::error!(
|
log::debug!(
|
||||||
target: "wire",
|
target: "wire",
|
||||||
"Attempt to connect to already connected peer {node_id}"
|
"Attempt to connect to already connected peer {node_id}"
|
||||||
);
|
);
|
||||||
|
|
@ -1029,7 +1029,7 @@ where
|
||||||
// is in the service's i/o buffer. Since the service may not purge the
|
// is in the service's i/o buffer. Since the service may not purge the
|
||||||
// buffer on disconnect, we should just ignore i/o actions that don't
|
// buffer on disconnect, we should just ignore i/o actions that don't
|
||||||
// have a connected peer.
|
// have a connected peer.
|
||||||
log::error!(target: "wire", "Peer {remote} is not connected: dropping fetch");
|
log::debug!(target: "wire", "Peer {remote} is not connected: dropping fetch");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
let (stream, channels) =
|
let (stream, channels) =
|
||||||
|
|
@ -1055,7 +1055,7 @@ where
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if let Err(e) = self.worker.try_send(task) {
|
if let Err(e) = self.worker.try_send(task) {
|
||||||
log::error!(
|
log::warn!(
|
||||||
target: "wire",
|
target: "wire",
|
||||||
"Worker pool failed to accept outgoing fetch request: {e}"
|
"Worker pool failed to accept outgoing fetch request: {e}"
|
||||||
);
|
);
|
||||||
|
|
@ -1232,7 +1232,7 @@ mod logger {
|
||||||
| NotConnected => {
|
| NotConnected => {
|
||||||
log::info!(target: "wire", "Could not establish connection to {addr}: {err}")
|
log::info!(target: "wire", "Could not establish connection to {addr}: {err}")
|
||||||
}
|
}
|
||||||
_ => log::error!(target: "wire", "Error establishing connection to {addr}: {err}"),
|
_ => log::warn!(target: "wire", "Failed to establish connection to {addr}: {err}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ impl Handle {
|
||||||
validations,
|
validations,
|
||||||
} => {
|
} => {
|
||||||
for fail in validations.iter() {
|
for fail in validations.iter() {
|
||||||
log::error!(target: "worker", "Validation error: {fail}");
|
log::warn!(target: "worker", "Validation error: {fail}");
|
||||||
}
|
}
|
||||||
Err(error::Fetch::Validation {
|
Err(error::Fetch::Validation {
|
||||||
threshold,
|
threshold,
|
||||||
|
|
@ -207,7 +207,7 @@ fn notify(
|
||||||
if let RefUpdate::Skipped { .. } = update {
|
if let RefUpdate::Skipped { .. } = update {
|
||||||
// Don't notify about skipped refs.
|
// Don't notify about skipped refs.
|
||||||
} else if let Err(e) = store.insert(rid, update, now) {
|
} else if let Err(e) = store.insert(rid, update, now) {
|
||||||
log::error!(
|
log::debug!(
|
||||||
target: "worker",
|
target: "worker",
|
||||||
"Failed to update notification store for {rid}: {e}"
|
"Failed to update notification store for {rid}: {e}"
|
||||||
);
|
);
|
||||||
|
|
@ -227,7 +227,7 @@ where
|
||||||
let name = r.name();
|
let name = r.name();
|
||||||
let (namespace, qualified) = match radicle::git::parse_ref_namespaced(name) {
|
let (namespace, qualified) = match radicle::git::parse_ref_namespaced(name) {
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!(target: "worker", "Git reference is invalid: {name:?}: {e}");
|
log::debug!(target: "worker", "Git reference is invalid: {name:?}: {e}");
|
||||||
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
|
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -247,7 +247,7 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Err(e) = result {
|
if let Err(e) = result {
|
||||||
log::error!(target: "worker", "Error updating git refs cache for {name:?}: {e}");
|
log::debug!(target: "worker", "Failed to update git refs cache for {name:?}: {e}");
|
||||||
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
|
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -326,7 +326,7 @@ where
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// Object was found, but failed to load. Fall-through.
|
// Object was found, but failed to load. Fall-through.
|
||||||
log::error!(target: "fetch", "Error loading COB {tid} from storage: {e}");
|
log::debug!(target: "fetch", "Failed to load COB {tid} from storage: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// The object has either been removed entirely from the repository,
|
// The object has either been removed entirely from the repository,
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!(target: "worker", "Error on upload-pack channel read for {}: {e}", header.repo);
|
log::debug!(target: "worker", "Failure on upload-pack channel read for {}: {e}", header.repo);
|
||||||
emitter.emit(events::UploadPack::error(header.repo, remote, e).into());
|
emitter.emit(events::UploadPack::error(header.repo, remote, e).into());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue