Skip to content

Commit de417fe

Browse files
authored
Merge pull request #4236 from ProvableHQ/fix/more_unintrusive_connection_metrics
[Fix] Make the BFT connection metrics less intrusive
2 parents e73b20e + 575ac42 commit de417fe

6 files changed

Lines changed: 31 additions & 22 deletions

File tree

node/bft/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ locktick = [
3232
metrics = [
3333
"dep:snarkos-node-metrics",
3434
"snarkos-node-bft-events/metrics",
35-
"snarkos-node-bft-ledger-service/metrics"
35+
"snarkos-node-bft-ledger-service/metrics",
36+
"snarkos-node-network/metrics"
3637
]
3738
cuda = [
3839
"snarkvm/cuda",

node/bft/src/gateway.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,12 +478,15 @@ impl<N: Network> Gateway<N> {
478478
Ok(())
479479
}
480480

481-
/// Updates the connection metrics for the gateway.
481+
/// Updates the connection metrics for the gateway. Ignores the bootstrap clients.
482482
#[cfg(feature = "metrics")]
483483
fn update_metrics(&self) {
484-
// Ignore the bootstrap clients for this metrics.
485-
metrics::gauge(metrics::bft::CONNECTED, self.number_of_connected_validators() as f64);
486-
metrics::gauge(metrics::bft::CONNECTING, self.number_of_connecting_peers() as f64);
484+
if let Some(count) = self.number_of_connected_validators() {
485+
metrics::gauge(metrics::bft::CONNECTED, count as f64);
486+
}
487+
if let Some(count) = self.number_of_connecting_peers() {
488+
metrics::gauge(metrics::bft::CONNECTING, count as f64);
489+
}
487490
}
488491

489492
/// Inserts the given peer into the connected peers. This is only used in testing.

node/network/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ edition = "2024"
1818

1919
[features]
2020
locktick = [ "dep:locktick", "snarkos-node-tcp/locktick" ]
21+
metrics = [ ]
2122
test = [ ]
2223

2324
[dependencies.anyhow]

node/network/src/peering.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ mod tests {
107107
pool.peer_pool().write().insert(listener_addr, Peer::new_candidate(listener_addr, false));
108108

109109
assert_eq!(pool.number_of_candidate_peers(), 1);
110-
assert_eq!(pool.number_of_connecting_peers(), 0);
110+
assert_eq!(pool.number_of_connecting_peers(), Some(0));
111111
assert_eq!(pool.number_of_connected_peers(), 0);
112112
assert!(!pool.is_connecting(listener_addr));
113113
assert!(!pool.is_connected(listener_addr));
@@ -116,7 +116,7 @@ mod tests {
116116
assert!(pool.add_connecting_peer(listener_addr).is_ok());
117117

118118
assert_eq!(pool.number_of_candidate_peers(), 0);
119-
assert_eq!(pool.number_of_connecting_peers(), 1);
119+
assert_eq!(pool.number_of_connecting_peers(), Some(1));
120120
assert_eq!(pool.number_of_connected_peers(), 0);
121121
assert!(pool.is_connecting(listener_addr));
122122
assert!(!pool.is_connected(listener_addr));
@@ -133,11 +133,11 @@ mod tests {
133133
);
134134

135135
assert_eq!(pool.number_of_candidate_peers(), 0);
136-
assert_eq!(pool.number_of_connecting_peers(), 0);
136+
assert_eq!(pool.number_of_connecting_peers(), Some(0));
137137
assert_eq!(pool.number_of_connected_peers(), 1);
138138
assert!(!pool.is_connecting(listener_addr));
139139
assert!(pool.is_connected(listener_addr));
140-
assert_eq!(pool.number_of_connected_validators(), 1);
140+
assert_eq!(pool.number_of_connected_validators(), Some(1));
141141

142142
// Verify the connected peer's fields.
143143
let connected = pool.get_connected_peer(listener_addr).expect("peer should be connected");
@@ -153,7 +153,7 @@ mod tests {
153153
let mut rng = TestRng::default();
154154

155155
// Empty pool: no validators.
156-
assert_eq!(pool.number_of_connected_validators(), 0);
156+
assert_eq!(pool.number_of_connected_validators(), Some(0));
157157

158158
// Insert 2 validators and 1 client.
159159
let (addr1, peer1) = make_connected_peer(3000, NodeType::Validator, &mut rng);
@@ -166,14 +166,14 @@ mod tests {
166166
pool_write.insert(addr3, peer3);
167167
}
168168

169-
assert_eq!(pool.number_of_connected_validators(), 2);
169+
assert_eq!(pool.number_of_connected_validators(), Some(2));
170170
assert_eq!(pool.number_of_connected_peers(), 3);
171171

172172
// A candidate peer should not be counted as a validator.
173173
let candidate_addr = SocketAddr::from(([127, 0, 0, 1], 3003));
174174
pool.peer_pool().write().insert(candidate_addr, Peer::new_candidate(candidate_addr, false));
175175

176-
assert_eq!(pool.number_of_connected_validators(), 2);
176+
assert_eq!(pool.number_of_connected_validators(), Some(2));
177177
assert_eq!(pool.number_of_connected_peers(), 3);
178178
}
179179
}
@@ -512,17 +512,21 @@ pub trait PeerPoolHandling<N: Network>: P2P {
512512
}
513513

514514
/// Returns the number of connected validators.
515-
fn number_of_connected_validators(&self) -> usize {
516-
self.peer_pool()
517-
.read()
518-
.values()
519-
.filter(|peer| peer.as_connected().is_some_and(|peer| peer.is_validator()))
520-
.count()
515+
#[cfg(feature = "metrics")]
516+
fn number_of_connected_validators(&self) -> Option<usize> {
517+
Some(
518+
self.peer_pool()
519+
.try_read()?
520+
.values()
521+
.filter(|peer| peer.as_connected().is_some_and(|peer| peer.is_validator()))
522+
.count(),
523+
)
521524
}
522525

523526
/// Returns the number of connecting peers.
524-
fn number_of_connecting_peers(&self) -> usize {
525-
self.peer_pool().read().values().filter(|peer| peer.is_connecting()).count()
527+
#[cfg(feature = "metrics")]
528+
fn number_of_connecting_peers(&self) -> Option<usize> {
529+
Some(self.peer_pool().try_read()?.values().filter(|peer| peer.is_connecting()).count())
526530
}
527531

528532
/// Returns the number of candidate peers.

node/router/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ locktick = [
2424
"snarkvm/locktick",
2525
"snarkos-node-network/locktick"
2626
]
27-
metrics = [ "dep:snarkos-node-metrics" ]
27+
metrics = [ "dep:snarkos-node-metrics", "snarkos-node-network/metrics" ]
2828
cuda = [ "snarkvm/cuda", "snarkos-account/cuda" ]
2929
serial = [ "snarkos-node-bft-ledger-service/serial" ]
3030

node/sync/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ locktick = [
2424
"snarkos-node-router/locktick",
2525
]
2626
serial = ["snarkos-node-bft-ledger-service/serial"]
27-
metrics = [ "dep:snarkos-node-metrics" ]
27+
metrics = [ "dep:snarkos-node-metrics", "snarkos-node-network/metrics" ]
2828
cuda = [ "snarkvm/cuda", "snarkos-node-bft-ledger-service/cuda", "snarkos-node-router/cuda" ]
2929
test = [ "snarkos-node-sync-locators/test" ]
3030

0 commit comments

Comments
 (0)