From ec4cd8b9365e27599385900bb061769e26d26369 Mon Sep 17 00:00:00 2001 From: Alexandru Gheorghe Date: Fri, 15 Mar 2024 13:07:52 +0200 Subject: [PATCH 1/3] Fix peer_count metric The metric records the current protocol_version of the validator that just connected with the peer_map.len(), which contains all peers that connected, that has the effect the metric will be wrong since it won't tell us how many peers we have connected per version because it will always record the total number of peers Signed-off-by: Alexandru Gheorghe --- polkadot/node/network/bridge/src/lib.rs | 5 +++++ polkadot/node/network/bridge/src/rx/mod.rs | 24 ++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/polkadot/node/network/bridge/src/lib.rs b/polkadot/node/network/bridge/src/lib.rs index ddce99d5c2a8a..9e8d53713cf14 100644 --- a/polkadot/node/network/bridge/src/lib.rs +++ b/polkadot/node/network/bridge/src/lib.rs @@ -102,6 +102,11 @@ struct SharedInner { collation_peers: HashMap, } +// Counts the number of peers that are connectioned using `version` +fn count_peers_by_version(peers: &HashMap, version: ProtocolVersion) -> usize { + peers.values().filter(|peer_data| peer_data.version == version).count() +} + pub(crate) enum Mode { Syncing(Box), Active, diff --git a/polkadot/node/network/bridge/src/rx/mod.rs b/polkadot/node/network/bridge/src/rx/mod.rs index 11ac73259e3a1..46c440904d134 100644 --- a/polkadot/node/network/bridge/src/rx/mod.rs +++ b/polkadot/node/network/bridge/src/rx/mod.rs @@ -262,7 +262,11 @@ async fn handle_validation_message( } metrics.on_peer_connected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); + metrics.note_peer_count( + peer_set, + version, + count_peers_by_version(peer_map, version), + ); shared.local_view.clone().unwrap_or(View::default()) }; @@ -320,7 +324,11 @@ async fn handle_validation_message( let w = peer_map.remove(&peer).is_some(); metrics.on_peer_disconnected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); + metrics.note_peer_count( + peer_set, + version, + count_peers_by_version(peer_map, version), + ); w }; @@ -524,7 +532,11 @@ async fn handle_collation_message( } metrics.on_peer_connected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); + metrics.note_peer_count( + peer_set, + version, + count_peers_by_version(peer_map, version), + ); shared.local_view.clone().unwrap_or(View::default()) }; @@ -575,7 +587,11 @@ async fn handle_collation_message( let w = peer_map.remove(&peer).is_some(); metrics.on_peer_disconnected(peer_set, version); - metrics.note_peer_count(peer_set, version, peer_map.len()); + metrics.note_peer_count( + peer_set, + version, + count_peers_by_version(peer_map, version), + ); w }; From 8adf1bf4f677b6a93d5e9c7bc6fd3bcc7693c7d7 Mon Sep 17 00:00:00 2001 From: Alexandru Gheorghe Date: Fri, 29 Mar 2024 15:49:43 +0200 Subject: [PATCH 2/3] Make it better Signed-off-by: Alexandru Gheorghe --- polkadot/node/network/bridge/src/lib.rs | 23 ++++++++++++++++++++-- polkadot/node/network/bridge/src/rx/mod.rs | 22 +-------------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/polkadot/node/network/bridge/src/lib.rs b/polkadot/node/network/bridge/src/lib.rs index 9e8d53713cf14..688cbedf68057 100644 --- a/polkadot/node/network/bridge/src/lib.rs +++ b/polkadot/node/network/bridge/src/lib.rs @@ -103,8 +103,27 @@ struct SharedInner { } // Counts the number of peers that are connectioned using `version` -fn count_peers_by_version(peers: &HashMap, version: ProtocolVersion) -> usize { - peers.values().filter(|peer_data| peer_data.version == version).count() +fn count_peers_by_version(peers: &HashMap) -> HashMap { + let mut by_version_count = HashMap::new(); + for peer in peers.values() { + *(by_version_count.entry(peer.version).or_default()) += 1; + } + by_version_count +} + +// Notes the peer count +fn note_peers_count(metrics: &Metrics, shared: &Shared) { + let guard = shared.0.lock(); + let validation_stats = count_peers_by_version(&guard.validation_peers); + let collation_stats = count_peers_by_version(&guard.collation_peers); + + for (version, count) in validation_stats { + metrics.note_peer_count(PeerSet::Validation, version, count) + } + + for (version, count) in collation_stats { + metrics.note_peer_count(PeerSet::Validation, version, count) + } } pub(crate) enum Mode { diff --git a/polkadot/node/network/bridge/src/rx/mod.rs b/polkadot/node/network/bridge/src/rx/mod.rs index 46c440904d134..0a4497fc4b5a2 100644 --- a/polkadot/node/network/bridge/src/rx/mod.rs +++ b/polkadot/node/network/bridge/src/rx/mod.rs @@ -262,11 +262,6 @@ async fn handle_validation_message( } metrics.on_peer_connected(peer_set, version); - metrics.note_peer_count( - peer_set, - version, - count_peers_by_version(peer_map, version), - ); shared.local_view.clone().unwrap_or(View::default()) }; @@ -324,12 +319,6 @@ async fn handle_validation_message( let w = peer_map.remove(&peer).is_some(); metrics.on_peer_disconnected(peer_set, version); - metrics.note_peer_count( - peer_set, - version, - count_peers_by_version(peer_map, version), - ); - w }; @@ -532,11 +521,6 @@ async fn handle_collation_message( } metrics.on_peer_connected(peer_set, version); - metrics.note_peer_count( - peer_set, - version, - count_peers_by_version(peer_map, version), - ); shared.local_view.clone().unwrap_or(View::default()) }; @@ -587,11 +571,6 @@ async fn handle_collation_message( let w = peer_map.remove(&peer).is_some(); metrics.on_peer_disconnected(peer_set, version); - metrics.note_peer_count( - peer_set, - version, - count_peers_by_version(peer_map, version), - ); w }; @@ -848,6 +827,7 @@ where &metrics, ¬ification_sinks, ); + note_peers_count(&metrics, &shared); } } }, From 59bcb902746a8c0eb1a999e8a14cbd1a2ea1df4a Mon Sep 17 00:00:00 2001 From: Alexandru Gheorghe Date: Fri, 29 Mar 2024 16:06:49 +0200 Subject: [PATCH 3/3] Fixup problem Signed-off-by: Alexandru Gheorghe --- polkadot/node/network/bridge/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polkadot/node/network/bridge/src/lib.rs b/polkadot/node/network/bridge/src/lib.rs index 688cbedf68057..0305aaa067ccd 100644 --- a/polkadot/node/network/bridge/src/lib.rs +++ b/polkadot/node/network/bridge/src/lib.rs @@ -122,7 +122,7 @@ fn note_peers_count(metrics: &Metrics, shared: &Shared) { } for (version, count) in collation_stats { - metrics.note_peer_count(PeerSet::Validation, version, count) + metrics.note_peer_count(PeerSet::Collation, version, count) } }