From f7bd3a95a01245e73a504b515a2c2160a0a06f99 Mon Sep 17 00:00:00 2001
From: Bradley Olson <34992650+BradleyOlson64@users.noreply.github.com>
Date: Thu, 30 Mar 2023 13:33:25 -0700
Subject: [PATCH] Drop timers for new requests of active participations (#6974)

* First pass adding logs

* fmt

* Adjustments

* Get rid of extra timers for running participations

* fmt

* Handling timer discards more elegantly
---
 .../src/participation/mod.rs                  |  5 +++--
 .../src/participation/queues/mod.rs           | 19 ++++++++-----------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
index e366adc5fac..a4000e626ab 100644
--- a/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
+++ b/polkadot/node/core/dispute-coordinator/src/participation/mod.rs
@@ -160,10 +160,11 @@ impl Participation {
 		&mut self,
 		ctx: &mut Context,
 		priority: ParticipationPriority,
-		req: ParticipationRequest,
+		mut req: ParticipationRequest,
 	) -> Result<()> {
-		// Participation already running - we can ignore that request:
+		// Participation already running - we can ignore that request, discarding its timer:
 		if self.running_participations.contains(req.candidate_hash()) {
+			req.discard_timer();
 			return Ok(())
 		}
 		// Available capacity - participate right away (if we already have a recent block):
diff --git a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
index a5a5ab962f5..01950973e05 100644
--- a/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
+++ b/polkadot/node/core/dispute-coordinator/src/participation/queues/mod.rs
@@ -134,6 +134,11 @@ impl ParticipationRequest {
 	pub fn session(&self) -> SessionIndex {
 		self.session
 	}
+	pub fn discard_timer(&mut self) {
+		if let Some(timer) = self.request_timer.take() {
+			timer.stop_and_discard();
+		}
+	}
 	pub fn into_candidate_info(self) -> (CandidateHash, CandidateReceipt) {
 		let Self { candidate_hash, candidate_receipt, .. } = self;
 		(candidate_hash, candidate_receipt)
@@ -246,17 +251,12 @@ impl Queues {
 			// Remove any best effort entry, using it to replace our new
 			// request.
 			if let Some(older_request) = self.best_effort.remove(&comparator) {
-				if let Some(timer) = req.request_timer {
-					timer.stop_and_discard();
-				}
+				req.discard_timer();
 				req = older_request;
 			}
 			// Keeping old request if any.
 			match self.priority.entry(comparator) {
-				Entry::Occupied(_) =>
-					if let Some(timer) = req.request_timer {
-						timer.stop_and_discard();
-					},
+				Entry::Occupied(_) => req.discard_timer(),
 				Entry::Vacant(vac) => {
 					vac.insert(req);
 				},
@@ -274,10 +274,7 @@ impl Queues {
 			}
 			// Keeping old request if any.
 			match self.best_effort.entry(comparator) {
-				Entry::Occupied(_) =>
-					if let Some(timer) = req.request_timer {
-						timer.stop_and_discard();
-					},
+				Entry::Occupied(_) => req.discard_timer(),
 				Entry::Vacant(vac) => {
 					vac.insert(req);
 				},
-- 
GitLab