From a87e9c870d5a881eb7bedb0b1fb7a08a70683155 Mon Sep 17 00:00:00 2001 From: arkpar Date: Mon, 11 Jul 2022 21:48:42 +0200 Subject: [PATCH 1/3] Fixed sync target detection --- client/network/sync/src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/client/network/sync/src/lib.rs b/client/network/sync/src/lib.rs index 5b5216c745c98..763efbc0ed6fe 100644 --- a/client/network/sync/src/lib.rs +++ b/client/network/sync/src/lib.rs @@ -578,7 +578,17 @@ where /// Returns the best seen block. fn best_seen(&self) -> Option> { - let mut best_seens = self.peers.values().map(|p| p.best_number).collect::>(); + let mut best_seens = self + .peers + .values() + .filter_map(|p| { + if p.best_number > self.best_queued_number { + Some(p.best_number) + } else { + None + } + }) + .collect::>(); if best_seens.is_empty() { None From f104f67ab53b4f8adce706de90eadcf595fe163a Mon Sep 17 00:00:00 2001 From: arkpar Date: Tue, 12 Jul 2022 20:47:24 +0200 Subject: [PATCH 2/3] Always report sync_target metric --- client/service/src/metrics.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/service/src/metrics.rs b/client/service/src/metrics.rs index 555023f894488..56b145ccdf7f7 100644 --- a/client/service/src/metrics.rs +++ b/client/service/src/metrics.rs @@ -298,9 +298,10 @@ impl MetricsService { UniqueSaturatedInto::::unique_saturated_into(num) }); - if let Some(best_seen_block) = best_seen_block { - metrics.block_height.with_label_values(&["sync_target"]).set(best_seen_block); - } + metrics + .block_height + .with_label_values(&["sync_target"]) + .set(best_seen_block.unwrap_or(best_number)); } } } From 53f182508bc7de9cb362a6697261785e0b5c497e Mon Sep 17 00:00:00 2001 From: arkpar Date: Fri, 15 Jul 2022 11:13:32 +0200 Subject: [PATCH 3/3] Clamp median across all peers --- client/network/sync/src/lib.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/client/network/sync/src/lib.rs b/client/network/sync/src/lib.rs index 236b828f78b71..2f837cd6c4f51 100644 --- a/client/network/sync/src/lib.rs +++ b/client/network/sync/src/lib.rs @@ -1719,19 +1719,9 @@ where Ok(sync) } - /// Returns the best seen block. + /// Returns the best seen block number if we don't have that block yet, `None` otherwise. fn best_seen(&self) -> Option> { - let mut best_seens = self - .peers - .values() - .filter_map(|p| { - if p.best_number > self.best_queued_number { - Some(p.best_number) - } else { - None - } - }) - .collect::>(); + let mut best_seens = self.peers.values().map(|p| p.best_number).collect::>(); if best_seens.is_empty() { None @@ -1739,7 +1729,12 @@ where let middle = best_seens.len() / 2; // Not the "perfect median" when we have an even number of peers. - Some(*best_seens.select_nth_unstable(middle).1) + let median = *best_seens.select_nth_unstable(middle).1; + if median > self.best_queued_number { + Some(median) + } else { + None + } } }