From a0ebff4909854ee50b6c4522903f5c56c4fcf4a8 Mon Sep 17 00:00:00 2001 From: sandreim <54316454+sandreim@users.noreply.github.com> Date: Fri, 11 Feb 2022 19:32:55 +0200 Subject: [PATCH] Add more specific errors (#4905) Signed-off-by: Andrei Sandu --- .../network/statement-distribution/src/lib.rs | 22 +++++++++++++------ .../statement-distribution/src/tests.rs | 8 +++---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/polkadot/node/network/statement-distribution/src/lib.rs b/polkadot/node/network/statement-distribution/src/lib.rs index 2c522a340a..db1c022a94 100644 --- a/polkadot/node/network/statement-distribution/src/lib.rs +++ b/polkadot/node/network/statement-distribution/src/lib.rs @@ -77,6 +77,13 @@ use responder::{respond, ResponderMessage}; mod tests; const COST_UNEXPECTED_STATEMENT: Rep = Rep::CostMinor("Unexpected Statement"); +const COST_UNEXPECTED_STATEMENT_MISSING_KNOWLEDGE: Rep = + Rep::CostMinor("Unexpected Statement, missing knowlege for relay parent"); +const COST_UNEXPECTED_STATEMENT_UNKNOWN_CANDIDATE: Rep = + Rep::CostMinor("Unexpected Statement, unknown candidate"); +const COST_UNEXPECTED_STATEMENT_REMOTE: Rep = + Rep::CostMinor("Unexpected Statement, remote not allowed"); + const COST_FETCH_FAIL: Rep = Rep::CostMinor("Requesting `CommittedCandidateReceipt` from peer failed"); const COST_INVALID_SIGNATURE: Rep = Rep::CostMajor("Invalid Statement Signature"); @@ -320,14 +327,14 @@ impl PeerRelayParentKnowledge { .note_remote(h.clone()); if !allowed_remote { - return Err(COST_UNEXPECTED_STATEMENT) + return Err(COST_UNEXPECTED_STATEMENT_REMOTE) } h }, CompactStatement::Valid(ref h) => { if !self.is_known_candidate(&h) { - return Err(COST_UNEXPECTED_STATEMENT) + return Err(COST_UNEXPECTED_STATEMENT_UNKNOWN_CANDIDATE) } h @@ -380,14 +387,14 @@ impl PeerRelayParentKnowledge { .map_or(true, |r| r.is_wanted_candidate(h)); if !allowed_remote { - return Err(COST_UNEXPECTED_STATEMENT) + return Err(COST_UNEXPECTED_STATEMENT_REMOTE) } h }, CompactStatement::Valid(ref h) => { if !self.is_known_candidate(&h) { - return Err(COST_UNEXPECTED_STATEMENT) + return Err(COST_UNEXPECTED_STATEMENT_UNKNOWN_CANDIDATE) } h @@ -476,7 +483,7 @@ impl PeerData { ) -> std::result::Result { self.view_knowledge .get_mut(relay_parent) - .ok_or(COST_UNEXPECTED_STATEMENT)? + .ok_or(COST_UNEXPECTED_STATEMENT_MISSING_KNOWLEDGE)? .receive(fingerprint, max_message_count) } @@ -491,7 +498,7 @@ impl PeerData { ) -> std::result::Result<(), Rep> { self.view_knowledge .get(relay_parent) - .ok_or(COST_UNEXPECTED_STATEMENT)? + .ok_or(COST_UNEXPECTED_STATEMENT_MISSING_KNOWLEDGE)? .check_can_receive(fingerprint, max_message_count) } @@ -499,7 +506,7 @@ impl PeerData { fn receive_large_statement(&mut self, relay_parent: &Hash) -> std::result::Result<(), Rep> { self.view_knowledge .get_mut(relay_parent) - .ok_or(COST_UNEXPECTED_STATEMENT)? + .ok_or(COST_UNEXPECTED_STATEMENT_MISSING_KNOWLEDGE)? .receive_large_statement() } } @@ -1325,6 +1332,7 @@ async fn handle_incoming_message<'a>( if let Err(rep) = peer_data.check_can_receive(&relay_parent, &fingerprint, max_message_count) { tracing::debug!( target: LOG_TARGET, + ?relay_parent, ?peer, ?message, ?rep, diff --git a/polkadot/node/network/statement-distribution/src/tests.rs b/polkadot/node/network/statement-distribution/src/tests.rs index 4146416b0c..1858eb8c09 100644 --- a/polkadot/node/network/statement-distribution/src/tests.rs +++ b/polkadot/node/network/statement-distribution/src/tests.rs @@ -273,11 +273,11 @@ fn per_peer_relay_parent_knowledge_receive() { assert_eq!( knowledge.check_can_receive(&(CompactStatement::Valid(hash_a), ValidatorIndex(0)), 3), - Err(COST_UNEXPECTED_STATEMENT), + Err(COST_UNEXPECTED_STATEMENT_UNKNOWN_CANDIDATE), ); assert_eq!( knowledge.receive(&(CompactStatement::Valid(hash_a), ValidatorIndex(0)), 3), - Err(COST_UNEXPECTED_STATEMENT), + Err(COST_UNEXPECTED_STATEMENT_UNKNOWN_CANDIDATE), ); assert!(knowledge @@ -336,11 +336,11 @@ fn per_peer_relay_parent_knowledge_receive() { assert_eq!( knowledge.check_can_receive(&(CompactStatement::Seconded(hash_c), ValidatorIndex(0)), 3), - Err(COST_UNEXPECTED_STATEMENT), + Err(COST_UNEXPECTED_STATEMENT_REMOTE), ); assert_eq!( knowledge.receive(&(CompactStatement::Seconded(hash_c), ValidatorIndex(0)), 3), - Err(COST_UNEXPECTED_STATEMENT), + Err(COST_UNEXPECTED_STATEMENT_REMOTE), ); // Last, make sure that already-known statements are disregarded.