From 2c1a78782e34ea888b10f4ce1667c2c28692bdf2 Mon Sep 17 00:00:00 2001 From: Robert Habermeier <rphmeier@gmail.com> Date: Fri, 18 Dec 2020 13:40:37 -0500 Subject: [PATCH] fix bug where we over-eagerly remove backing spans for candidates we validate ourselves (#2142) * fix bug where we over-eagerly remove backing spans for candidates we validate ourselves * jaeger: watch importing of statements --- polkadot/node/core/backing/src/lib.rs | 15 ++++++++++++++- polkadot/node/primitives/src/lib.rs | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/polkadot/node/core/backing/src/lib.rs b/polkadot/node/core/backing/src/lib.rs index 3de6c37e613..1604166a693 100644 --- a/polkadot/node/core/backing/src/lib.rs +++ b/polkadot/node/core/backing/src/lib.rs @@ -503,7 +503,6 @@ impl CandidateBackingJob { ) -> Result<(), Error> { let candidate_hash = command.candidate_hash(); self.awaiting_validation.remove(&candidate_hash); - self.remove_unbacked_span(&candidate_hash); match command { ValidatedCandidateCommand::Second(res) => { @@ -664,6 +663,12 @@ impl CandidateBackingJob { &mut self, statement: &SignedFullStatement, ) -> Result<Option<TableSummary>, Error> { + let _span = { + // create a span only for candidates we're already aware of. + let candidate_hash = statement.payload().candidate_hash(); + self.get_unbacked_statement_child(&candidate_hash, statement.validator_index()) + }; + let stmt = primitive_statement_to_table(statement); let summary = self.table.import_statement(&self.table_context, stmt); @@ -854,6 +859,14 @@ impl CandidateBackingJob { self.unbacked_candidates.get(hash).map(|span| span.child("validation")) } + fn get_unbacked_statement_child(&self, hash: &CandidateHash, validator: ValidatorIndex) -> Option<JaegerSpan> { + self.unbacked_candidates.get(hash).map(|span| { + let mut span = span.child("import-statement"); + span.add_string_tag("validator-index", &format!("{}", validator)); + span + }) + } + fn remove_unbacked_span(&mut self, hash: &CandidateHash) { self.unbacked_candidates.remove(hash); } diff --git a/polkadot/node/primitives/src/lib.rs b/polkadot/node/primitives/src/lib.rs index 82ac5dd28e9..fa4fe750c9c 100644 --- a/polkadot/node/primitives/src/lib.rs +++ b/polkadot/node/primitives/src/lib.rs @@ -63,6 +63,17 @@ pub enum Statement { } impl Statement { + /// Get the candidate hash referenced by this statement. + /// + /// If this is a `Statement::Seconded`, this does hash the candidate receipt, which may be expensive + /// for large candidates. + pub fn candidate_hash(&self) -> CandidateHash { + match *self { + Statement::Valid(ref h) | Statement::Invalid(ref h) => *h, + Statement::Seconded(ref c) => c.hash(), + } + } + /// Transform this statement into its compact version, which references only the hash /// of the candidate. pub fn to_compact(&self) -> CompactStatement { -- GitLab