From 909c1e494549068a8ad386bb81cd801e1564e78d Mon Sep 17 00:00:00 2001 From: ordian Date: Tue, 2 Jan 2024 11:13:16 +0100 Subject: [PATCH] malus: use spawn_blocking (#2804) Looks like using `spawn` instead of `spawn_blocking` in malus is leading to a deadlock somehow. I'm not sure why exactly, but switching to `spawn_blocking` fixes https://github.com/paritytech/disabling-e2e-tests/issues/1, at least for `suggest-garbage-candidate` (didn't check other variants). Maybe my assumption here was wrong: https://github.com/paritytech/polkadot-sdk/pull/2184#discussion_r1403587674. --------- Co-authored-by: Tsvetomir Dimitrov --- polkadot/node/malus/src/variants/common.rs | 2 +- .../malus/src/variants/dispute_finalized_candidates.rs | 2 +- .../node/malus/src/variants/suggest_garbage_candidate.rs | 2 +- prdoc/pr_2804.prdoc | 9 +++++++++ 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 prdoc/pr_2804.prdoc diff --git a/polkadot/node/malus/src/variants/common.rs b/polkadot/node/malus/src/variants/common.rs index 92264cd653d0..011fcc80e373 100644 --- a/polkadot/node/malus/src/variants/common.rs +++ b/polkadot/node/malus/src/variants/common.rs @@ -188,7 +188,7 @@ where let _candidate_descriptor = candidate_descriptor.clone(); let mut subsystem_sender = subsystem_sender.clone(); let (sender, receiver) = std::sync::mpsc::channel(); - self.spawner.spawn( + self.spawner.spawn_blocking( "malus-get-validation-data", Some("malus"), Box::pin(async move { diff --git a/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs b/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs index 113ab026879d..7f83c386090e 100644 --- a/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs +++ b/polkadot/node/malus/src/variants/dispute_finalized_candidates.rs @@ -95,7 +95,7 @@ where let dispute_offset = self.dispute_offset; let mut sender = subsystem_sender.clone(); - self.spawner.spawn( + self.spawner.spawn_blocking( "malus-dispute-finalized-block", Some("malus"), Box::pin(async move { diff --git a/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs b/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs index 817afb58437e..cf0ff5f809d8 100644 --- a/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs +++ b/polkadot/node/malus/src/variants/suggest_garbage_candidate.rs @@ -113,7 +113,7 @@ where let (sender, receiver) = std::sync::mpsc::channel(); let mut new_sender = subsystem_sender.clone(); let _candidate = candidate.clone(); - self.spawner.spawn( + self.spawner.spawn_blocking( "malus-get-validation-data", Some("malus"), Box::pin(async move { diff --git a/prdoc/pr_2804.prdoc b/prdoc/pr_2804.prdoc new file mode 100644 index 000000000000..456120741d93 --- /dev/null +++ b/prdoc/pr_2804.prdoc @@ -0,0 +1,9 @@ +title: Fix malus implementation. + +doc: + - audience: Node Dev + description: | + The malus implementation is used to test security of Polkadot. + It was broken. This fixes it. + +crates: [ ]