From 7b6e6c179fd035b10e8702a0ed80ce9bf9bdb35e Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Tue, 27 Aug 2024 14:55:47 -0400 Subject: [PATCH] gossip: demote invalid duplicate proof errors to info (#2754) * gossip: demote invalid duplicate proof errors to info * pr feedback: explicitly list every enum --- gossip/src/duplicate_shred.rs | 27 +++++++++++++++++++++++++++ gossip/src/duplicate_shred_handler.rs | 8 +++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/gossip/src/duplicate_shred.rs b/gossip/src/duplicate_shred.rs index ad8c8cc6eb484c..a6d49f104fadea 100644 --- a/gossip/src/duplicate_shred.rs +++ b/gossip/src/duplicate_shred.rs @@ -90,6 +90,33 @@ pub enum Error { UnknownSlotLeader(Slot), } +impl Error { + /// Errors indicating that the initial node submitted an invalid duplicate proof case + pub(crate) fn is_non_critical(&self) -> bool { + match self { + Self::SlotMismatch + | Self::InvalidShredVersion(_) + | Self::InvalidSignature + | Self::ShredTypeMismatch + | Self::InvalidDuplicateShreds + | Self::InvalidLastIndexConflict + | Self::InvalidErasureMetaConflict => true, + Self::BlockstoreInsertFailed(_) + | Self::DataChunkMismatch + | Self::DuplicateSlotSenderFailure + | Self::InvalidChunkIndex { .. } + | Self::InvalidDuplicateSlotProof + | Self::InvalidSizeLimit + | Self::InvalidShred(_) + | Self::NumChunksMismatch + | Self::MissingDataChunk + | Self::SerializationError(_) + | Self::TryFromIntError(_) + | Self::UnknownSlotLeader(_) => false, + } + } +} + /// Check that `shred1` and `shred2` indicate a valid duplicate proof /// - Must be for the same slot /// - Must match the expected shred version diff --git a/gossip/src/duplicate_shred_handler.rs b/gossip/src/duplicate_shred_handler.rs index 84134d76f241bd..9095c6f1fc75e0 100644 --- a/gossip/src/duplicate_shred_handler.rs +++ b/gossip/src/duplicate_shred_handler.rs @@ -56,8 +56,14 @@ impl DuplicateShredHandlerTrait for DuplicateShredHandler { fn handle(&mut self, shred_data: DuplicateShred) { self.cache_root_info(); self.maybe_prune_buffer(); + let slot = shred_data.slot; + let pubkey = shred_data.from; if let Err(error) = self.handle_shred_data(shred_data) { - error!("handle packet: {error:?}") + if error.is_non_critical() { + info!("Received invalid duplicate shred proof from {pubkey} for slot {slot}: {error:?}"); + } else { + error!("Unable to process duplicate shred proof from {pubkey} for slot {slot}: {error:?}"); + } } } }