initial jaeger integration (#2047)

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Bernhard Schuster
2020-12-11 17:38:55 +01:00
committed by GitHub
parent 15c253117d
commit a5fe710cc6
20 changed files with 555 additions and 58 deletions
@@ -25,6 +25,7 @@ use futures::{
};
use sp_keystore::SyncCryptoStorePtr;
use polkadot_node_subsystem::{
jaeger,
errors::ChainApiError,
messages::{
AllMessages, CandidateBackingMessage, CandidateSelectionMessage, CollatorProtocolMessage,
@@ -99,7 +100,9 @@ impl JobTrait for CandidateSelectionJob {
receiver: mpsc::Receiver<CandidateSelectionMessage>,
mut sender: mpsc::Sender<FromJobCommand>,
) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send>> {
let span = jaeger::hash_span(&relay_parent, "candidate-selection:run");
async move {
let _span = span.child("query runtime");
let (groups, cores) = futures::try_join!(
try_runtime_api!(request_validator_groups(relay_parent, &mut sender).await),
try_runtime_api!(request_from_runtime(
@@ -112,6 +115,9 @@ impl JobTrait for CandidateSelectionJob {
let (validator_groups, group_rotation_info) = try_runtime_api!(groups);
let cores = try_runtime_api!(cores);
drop(_span);
let _span = span.child("find assignment");
let n_cores = cores.len();
let validator = match Validator::new(relay_parent, keystore.clone(), sender.clone()).await {
@@ -141,7 +147,9 @@ impl JobTrait for CandidateSelectionJob {
None => return Ok(()),
};
CandidateSelectionJob::new(assignment, metrics, sender, receiver).run_loop().await
drop(_span);
CandidateSelectionJob::new(assignment, metrics, sender, receiver).run_loop(&span).await
}.boxed()
}
}
@@ -162,7 +170,8 @@ impl CandidateSelectionJob {
}
}
async fn run_loop(&mut self) -> Result<(), Error> {
async fn run_loop(&mut self, span: &jaeger::JaegerSpan) -> Result<(), Error> {
let span = span.child("run loop");
loop {
match self.receiver.next().await {
Some(CandidateSelectionMessage::Collation(
@@ -170,12 +179,14 @@ impl CandidateSelectionJob {
para_id,
collator_id,
)) => {
let _span = span.child("handle collation");
self.handle_collation(relay_parent, para_id, collator_id).await;
}
Some(CandidateSelectionMessage::Invalid(
_,
candidate_receipt,
)) => {
let _span = span.child("handle invalid");
self.handle_invalid(candidate_receipt).await;
}
None => break,
@@ -459,10 +470,10 @@ mod tests {
};
preconditions(&mut job);
let span = jaeger::JaegerSpan::Disabled;
let (_, job_result) = futures::executor::block_on(future::join(
test(to_job_tx, from_job_rx),
job.run_loop(),
job.run_loop(&span),
));
postconditions(job, job_result);