node: downgrade warn! logs

Evaluate the `warn!` logging in `radicle-node`.

If the event is a result of something being suspicious in the running
of the protocol, then it remains a `warn!`.

However, if the system ends up ignoring the event and can continue
without issues, the log level is reduced to `debug!`.
This commit is contained in:
Fintan Halpenny
2026-01-20 15:35:48 +00:00
parent a65fb8b60b
commit a3dda38996
7 changed files with 33 additions and 33 deletions
+1 -1
View File
@@ -327,7 +327,7 @@ fn execute(options: Options) -> Result<(), ExecutionError> {
#[cfg(windows)]
let signals = {
let (_, signals) = chan::bounded(1);
log::warn!(target: "node", "Signal handlers not installed.");
log::info!(target: "node", "No signal handlers were installed, because this is not available on Windows.");
signals
};
+5 -5
View File
@@ -483,7 +483,7 @@ impl<H: ReactionHandler> Runtime<H> {
deregistered.push(token);
}
} else if !deregistered.contains(&token) {
log::warn!(target: "reactor", token=token.0; "Event from unknown token {}: {:?}", token.0, event);
log::debug!(target: "reactor", token=token.0; "Event from unknown token {}: {:?}", token.0, event);
}
}
@@ -576,12 +576,12 @@ impl<H: ReactionHandler> Runtime<H> {
fn deregister_listener(&mut self, token: Token) -> Option<H::Listener> {
let Some(mut source) = self.listeners.remove(&token) else {
log::warn!(target: "reactor", token=token.0; "Deregistering non-registered listener with token {}", token.0);
log::debug!(target: "reactor", token=token.0; "Deregistering non-registered listener with token {}", token.0);
return None;
};
if let Err(err) = self.poll.registry().deregister(&mut source) {
log::warn!(target: "reactor", token=token.0; "Failed to deregister listener with token {} from mio: {err}", token.0);
log::debug!(target: "reactor", token=token.0; "Failed to deregister listener with token {} from mio: {err}", token.0);
}
Some(source)
@@ -589,12 +589,12 @@ impl<H: ReactionHandler> Runtime<H> {
fn deregister_transport(&mut self, token: Token) -> Option<H::Transport> {
let Some(mut source) = self.transports.remove(&token) else {
log::warn!(target: "reactor", token=token.0; "Deregistering non-registered transport with token {}", token.0);
log::debug!(target: "reactor", token=token.0; "Deregistering non-registered transport with token {}", token.0);
return None;
};
if let Err(err) = self.poll.registry().deregister(&mut source) {
log::warn!(target: "reactor", token=token.0; "Failed to deregister transport with token {} from mio: {err}", token.0);
log::debug!(target: "reactor", token=token.0; "Failed to deregister transport with token {} from mio: {err}", token.0);
}
Some(source)
+4 -4
View File
@@ -148,7 +148,7 @@ impl<S: Session> Transport<S> {
fn handle_io(&mut self, interest: Interest) -> Option<SessionEvent<S>> {
if self.state == TransportState::Terminated {
log::warn!(target: "transport", "Transport {self} is terminated, ignoring I/O event");
log::debug!(target: "transport", "Transport {self} is terminated, ignoring I/O event");
return None;
}
@@ -217,7 +217,7 @@ impl<S: Session> Transport<S> {
| io::ErrorKind::Interrupted
) =>
{
log::warn!(target: "transport", "Resource {} was not able to consume any data even though it has announced its write readiness", self.display());
log::debug!(target: "transport", "Resource {} was not able to consume any data even though it has announced its write readiness", self.display());
self.write_intent = true;
None
}
@@ -241,7 +241,7 @@ impl<S: Session> Transport<S> {
// when there's data on the socket. We leave it here in case external
// conditions change.
log::warn!(target: "transport",
log::trace!(target: "transport",
"WOULD_BLOCK on resource which had read intent - probably normal thing to happen"
);
None
@@ -261,7 +261,7 @@ impl<S: Session> Transport<S> {
| io::ErrorKind::OutOfMemory
| io::ErrorKind::WriteZero
| io::ErrorKind::Interrupted => {
log::warn!(target: "transport", "Resource {} kernel buffer is full (system message is '{err}')", self.display());
log::trace!(target: "transport", "Resource {} kernel buffer is full (system message is '{err}')", self.display());
Ok(0)
},
_ => {
+11 -11
View File
@@ -247,7 +247,7 @@ impl Peers {
fn insert(&mut self, token: Token, peer: Peer) {
if self.0.insert(token, peer).is_some() {
log::warn!(target: "wire", token=token.0; "Replacing existing peer");
log::debug!(target: "wire", token=token.0; "Replacing existing peer");
}
}
@@ -395,7 +395,7 @@ where
let nid = task.remote;
let Some((fd, peer)) = self.peers.lookup_mut(&nid) else {
log::warn!(target: "wire", "Peer {nid} not found; ignoring fetch result");
log::debug!(target: "wire", "Peer {nid} not found; ignoring fetch result");
return;
};
@@ -420,7 +420,7 @@ where
} else {
// If the peer disconnected, we'll get here, but we still want to let the service know
// about the fetch result, so we don't return here.
log::warn!(target: "wire", "Peer {nid} is not connected; ignoring fetch result");
log::debug!(target: "wire", "Peer {nid} is not connected; ignoring fetch result");
return;
};
@@ -443,11 +443,11 @@ where
fn flush(&mut self, remote: NodeId, stream: StreamId) {
let Some((fd, peer)) = self.peers.lookup_mut(&remote) else {
log::warn!(target: "wire", "Peer {remote} is not known; ignoring flush");
log::debug!(target: "wire", "Peer {remote} is not known; ignoring flush");
return;
};
let Peer::Connected { streams, link, .. } = peer else {
log::warn!(target: "wire", "Peer {remote} is not connected; ignoring flush");
log::debug!(target: "wire", "Peer {remote} is not connected; ignoring flush");
return;
};
let Some(s) = streams.get_mut(&stream) else {
@@ -581,7 +581,7 @@ where
} else if self.inbound.contains(&token) {
log::debug!(target: "wire", token=token.0; "Inbound peer resource registered");
} else {
log::warn!(target: "wire", token=token.0; "Unknown peer registered");
log::debug!(target: "wire", token=token.0; "Unknown peer registered");
}
}
@@ -664,14 +664,14 @@ where
(Outbound, Outbound, _) => token.max(c_token),
};
log::warn!(
log::trace!(
target: "wire", "Established session with token {} conflicts with existing session with token {} for {nid}. Disconnecting session with token {}.", token.0, c_token.0, close.0
);
disconnect.push(close);
}
}
for id in &disconnect {
log::warn!(
log::info!(
target: "wire", token=token.0; "Closing conflicting session with {nid}.."
);
// Disconnect and return the associated NID of the peer, if available.
@@ -726,7 +726,7 @@ where
ChannelsConfig::new(FETCH_TIMEOUT)
.with_reader_limit(reader_limit),
) else {
log::warn!(target: "wire", "Peer attempted to open already-open stream stream {stream}");
log::debug!(target: "wire", "Peer attempted to open already-open stream stream {stream}");
continue;
};
@@ -815,7 +815,7 @@ where
}
}
} else {
log::warn!(target: "wire", token=token.0; "Dropping message from unconnected peer");
log::debug!(target: "wire", token=token.0; "Dropping message from unconnected peer");
}
}
SessionEvent::Terminated(err) => {
@@ -1006,7 +1006,7 @@ where
self.metrics.peer(nid).disconnects += 1;
}
} else {
log::warn!(target: "wire", "Peer {nid} is not connected: ignoring disconnect");
log::debug!(target: "wire", "Peer {nid} is not connected: ignoring disconnect");
}
}
Io::Wakeup(d) => {
+1 -1
View File
@@ -240,7 +240,7 @@ impl Worker {
// N.b. ensure that `git gc` works in debug mode.
debug_assert!(false, "`git gc` failed: {e}");
log::warn!(target: "worker", "Failed to run `git gc`: {e}");
log::debug!(target: "worker", "Failed to run `git gc`: {e}");
}
Ok(result)
}
+8 -8
View File
@@ -96,7 +96,7 @@ impl Handle {
};
for rejected in result.rejected() {
log::warn!(target: "worker", "Rejected update for {}", rejected.refname())
log::debug!(target: "worker", "Rejected update for {}", rejected.refname())
}
match result {
@@ -119,7 +119,7 @@ impl Handle {
validations,
} => {
for warn in validations {
log::warn!(target: "worker", "Validation error: {warn}");
log::debug!(target: "worker", "Validation error: {warn}");
}
// N.b. We do not go through handle for this since the cloning handle
@@ -133,7 +133,7 @@ impl Handle {
}
}
Err(RepositoryError::Quorum(e)) => {
log::warn!(target: "worker", "Fetch could not set HEAD: {e}")
log::warn!(target: "worker", "Fetch could not set HEAD for {rid}: {e}")
}
Err(e) => return Err(e.into()),
}
@@ -141,7 +141,7 @@ impl Handle {
let canonical = match set_canonical_refs(&repo, &applied) {
Ok(updates) => updates.unwrap_or_default(),
Err(e) => {
log::warn!(target: "worker", "Failed to set canonical references: {e}");
log::warn!(target: "worker", "Failed to set canonical references for {rid}: {e}");
UpdatedCanonicalRefs::default()
}
};
@@ -228,7 +228,7 @@ where
let (namespace, qualified) = match radicle::git::parse_ref_namespaced(name) {
Err(e) => {
log::error!(target: "worker", "Git reference is invalid: {name:?}: {e}");
log::warn!(target: "worker", "Skipping refs caching for fetch of {repo}");
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
break;
}
Ok((n, q)) => (n, q),
@@ -248,7 +248,7 @@ where
if let Err(e) = result {
log::error!(target: "worker", "Error updating git refs cache for {name:?}: {e}");
log::warn!(target: "worker", "Skipping refs caching for fetch of {repo}");
log::debug!(target: "worker", "Skipping refs caching for fetch of {repo}");
break;
}
}
@@ -380,7 +380,7 @@ fn set_canonical_refs(
let canonical = match canonical.find_objects() {
Err(err) => {
log::warn!(target: "worker", "Failed to find objects for canonical computation: {err}");
log::warn!(target: "worker", "Failed to find objects for canonical computation of `{name}`: {err}");
continue;
}
Ok(canonical) => canonical,
@@ -390,7 +390,7 @@ fn set_canonical_refs(
Err(err) => {
log::warn!(
target: "worker",
"Failed to calculate canonical reference: {err}",
"Failed to calculate canonical reference `{name}`: {err}",
);
continue;
}
@@ -97,7 +97,7 @@ where
Ok(n) => {
let mut lock = reporter.lock().expect("FATAL: upload_pack poisoned lock");
if let Err(e) = lock.write_all(&buffer[..n]) {
log::warn!(target: "worker", "Error reading stdout to upload-pack reporter: {e}");
log::debug!(target: "worker", "Failed to write buffer to upload-pack reporter: {e}");
emitter.emit(events::UploadPack::error(header.repo, remote, e).into());
break;
}
@@ -119,7 +119,7 @@ where
Ok(0) => break,
Ok(n) => {
if let Err(e) = stdin.write_all(&buffer[..n]) {
log::warn!(target: "worker", "Error writing to upload-pack stdin: {e}");
log::debug!(target: "worker", "Failed to write to upload-pack stdin: {e}");
break;
}
}
@@ -128,7 +128,7 @@ where
break;
}
Err(e) if e.kind() == io::ErrorKind::TimedOut => {
log::warn!(target: "worker", "Read channel timed out for upload-pack {}", header.repo);
log::debug!(target: "worker", "Read channel timed out for upload-pack {}", header.repo);
// N.b. if the read timed out, ensure that the sender isn't
// still sending messages.
let lock = reporter.lock().expect("FATAL: upload_pack poisoned lock");