Skip to content

Commit 1be21a6

Browse files
apollo_network: gossipsub event metrics
1 parent 352c15d commit 1be21a6

File tree

6 files changed

+126
-10
lines changed

6 files changed

+126
-10
lines changed

crates/apollo_consensus_manager/src/consensus_manager.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ impl ConsensusManager {
9898
num_blacklisted_peers: CONSENSUS_NUM_BLACKLISTED_PEERS,
9999
broadcast_metrics_by_topic: Some(broadcast_metrics_by_topic),
100100
sqmr_metrics: None,
101+
gossipsub_metrics: None,
101102
});
102103
let mut network_manager =
103104
NetworkManager::new(self.config.network_config.clone(), None, network_manager_metrics);

crates/apollo_mempool_p2p/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ pub fn create_p2p_propagator_and_runner(
5050
num_blacklisted_peers: MEMPOOL_P2P_NUM_BLACKLISTED_PEERS,
5151
broadcast_metrics_by_topic: Some(broadcast_metrics_by_topic),
5252
sqmr_metrics: None,
53+
gossipsub_metrics: None,
5354
});
5455
let mut network_manager = NetworkManager::new(
5556
mempool_p2p_config.network_config,

crates/apollo_network/src/gossipsub_impl.rs

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,26 @@ pub type Topic = gossipsub::Sha256Topic;
1212

1313
#[derive(Debug)]
1414
pub enum ExternalEvent {
15-
#[allow(dead_code)]
16-
Received { originated_peer_id: PeerId, message: Bytes, topic_hash: TopicHash },
15+
Received {
16+
originated_peer_id: PeerId,
17+
message: Bytes,
18+
topic_hash: TopicHash
19+
},
20+
Subscribed {
21+
peer_id: PeerId,
22+
topic_hash: TopicHash
23+
},
24+
Unsubscribed {
25+
peer_id: PeerId,
26+
topic_hash: TopicHash
27+
},
28+
GossipsubNotSupported {
29+
peer_id: PeerId
30+
},
31+
SlowPeer {
32+
peer_id: PeerId,
33+
failed_messages: gossipsub::FailedMessages
34+
},
1735
}
1836

1937
impl From<gossipsub::Event> for mixed_behaviour::Event {
@@ -40,9 +58,37 @@ impl From<gossipsub::Event> for mixed_behaviour::Event {
4058
},
4159
))
4260
}
43-
_ => mixed_behaviour::Event::ToOtherBehaviourEvent(
44-
mixed_behaviour::ToOtherBehaviourEvent::NoOp,
45-
),
61+
gossipsub::Event::Subscribed { peer_id, topic } => {
62+
mixed_behaviour::Event::ExternalEvent(mixed_behaviour::ExternalEvent::GossipSub(
63+
ExternalEvent::Subscribed {
64+
peer_id,
65+
topic_hash: topic,
66+
},
67+
))
68+
}
69+
gossipsub::Event::Unsubscribed { peer_id, topic } => {
70+
mixed_behaviour::Event::ExternalEvent(mixed_behaviour::ExternalEvent::GossipSub(
71+
ExternalEvent::Unsubscribed {
72+
peer_id,
73+
topic_hash: topic,
74+
},
75+
))
76+
}
77+
gossipsub::Event::GossipsubNotSupported { peer_id } => {
78+
mixed_behaviour::Event::ExternalEvent(mixed_behaviour::ExternalEvent::GossipSub(
79+
ExternalEvent::GossipsubNotSupported {
80+
peer_id,
81+
},
82+
))
83+
}
84+
gossipsub::Event::SlowPeer { peer_id, failed_messages } => {
85+
mixed_behaviour::Event::ExternalEvent(mixed_behaviour::ExternalEvent::GossipSub(
86+
ExternalEvent::SlowPeer {
87+
peer_id,
88+
failed_messages,
89+
},
90+
))
91+
}
4692
}
4793
}
4894
}

crates/apollo_network/src/network_manager/metrics.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,42 @@ impl SqmrNetworkMetrics {
2929
}
3030
}
3131

32+
pub struct GossipsubMetrics {
33+
pub num_messages_received: MetricCounter,
34+
pub num_messages_published: MetricCounter,
35+
pub num_subscriptions: MetricCounter,
36+
pub num_unsubscriptions: MetricCounter,
37+
pub num_peer_subscribed: MetricCounter,
38+
pub num_peer_unsubscribed: MetricCounter,
39+
pub num_gossipsub_not_supported: MetricCounter,
40+
pub num_slow_peers: MetricCounter,
41+
pub num_peer_added: MetricCounter,
42+
pub num_peer_removed: MetricCounter,
43+
}
44+
45+
impl GossipsubMetrics {
46+
pub fn register(&self) {
47+
self.num_messages_received.register();
48+
self.num_messages_published.register();
49+
self.num_subscriptions.register();
50+
self.num_unsubscriptions.register();
51+
self.num_peer_subscribed.register();
52+
self.num_peer_unsubscribed.register();
53+
self.num_gossipsub_not_supported.register();
54+
self.num_slow_peers.register();
55+
self.num_peer_added.register();
56+
self.num_peer_removed.register();
57+
}
58+
}
59+
3260
// TODO(alonl, shahak): Consider making these fields private and receive Topics instead of
3361
// TopicHashes in the constructor
3462
pub struct NetworkMetrics {
3563
pub num_connected_peers: MetricGauge,
3664
pub num_blacklisted_peers: MetricGauge,
3765
pub broadcast_metrics_by_topic: Option<HashMap<TopicHash, BroadcastNetworkMetrics>>,
3866
pub sqmr_metrics: Option<SqmrNetworkMetrics>,
67+
pub gossipsub_metrics: Option<GossipsubMetrics>,
3968
}
4069

4170
impl NetworkMetrics {
@@ -52,5 +81,8 @@ impl NetworkMetrics {
5281
if let Some(sqmr_metrics) = self.sqmr_metrics.as_ref() {
5382
sqmr_metrics.register();
5483
}
84+
if let Some(gossipsub_metrics) = self.gossipsub_metrics.as_ref() {
85+
gossipsub_metrics.register();
86+
}
5587
}
5688
}

crates/apollo_network/src/network_manager/mod.rs

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -526,23 +526,58 @@ impl<SwarmT: SwarmTrait> GenericNetworkManager<SwarmT> {
526526
}
527527
}
528528

529+
/// Update the metrics for gossipsub events if these metrics were requested.
530+
fn update_gossipsub_metrics_on_event(&self, event: &gossipsub_impl::ExternalEvent) {
531+
if let Some(gossipsub_metrics) =
532+
self.metrics.as_ref().and_then(|metrics| metrics.gossipsub_metrics.as_ref())
533+
{
534+
match &event {
535+
gossipsub_impl::ExternalEvent::Received { .. } => {
536+
gossipsub_metrics.num_messages_received.increment(1);
537+
}
538+
gossipsub_impl::ExternalEvent::Subscribed { .. } => {
539+
gossipsub_metrics.num_peer_subscribed.increment(1);
540+
}
541+
gossipsub_impl::ExternalEvent::Unsubscribed { .. } => {
542+
gossipsub_metrics.num_peer_unsubscribed.increment(1);
543+
}
544+
gossipsub_impl::ExternalEvent::GossipsubNotSupported { .. } => {
545+
gossipsub_metrics.num_gossipsub_not_supported.increment(1);
546+
}
547+
gossipsub_impl::ExternalEvent::SlowPeer { .. } => {
548+
gossipsub_metrics.num_slow_peers.increment(1);
549+
}
550+
}
551+
}
552+
}
553+
529554
fn handle_gossipsub_behaviour_event(
530555
&mut self,
531556
event: gossipsub_impl::ExternalEvent,
532557
) -> Result<(), NetworkError> {
558+
// Record gossipsub metrics if available
559+
self.update_gossipsub_metrics_on_event(&event);
560+
561+
let gossipsub_impl::ExternalEvent::Received { originated_peer_id, message, topic_hash } =
562+
event
563+
else {
564+
return Ok(());
565+
};
566+
567+
// Record broadcast metrics for legacy compatibility
533568
if let Some(broadcast_metrics_by_topic) =
534569
self.metrics.as_ref().and_then(|metrics| metrics.broadcast_metrics_by_topic.as_ref())
535570
{
536-
let gossipsub_impl::ExternalEvent::Received { ref topic_hash, .. } = event;
537-
match broadcast_metrics_by_topic.get(topic_hash) {
571+
match broadcast_metrics_by_topic.get(&topic_hash) {
538572
Some(broadcast_metrics) => {
539573
broadcast_metrics.num_received_broadcast_messages.increment(1)
540574
}
541-
None => error!("Attempted to update topic metric with unregistered topic_hash"),
575+
None => {
576+
error!("Attempted to update topic metric with unregistered topic_hash")
577+
}
542578
}
543579
}
544-
let gossipsub_impl::ExternalEvent::Received { originated_peer_id, message, topic_hash } =
545-
event;
580+
546581
trace!("Received broadcast message with topic hash: {topic_hash:?}");
547582
let broadcasted_message_metadata = BroadcastedMessageMetadata {
548583
originator_id: OpaquePeerId::private_new(originated_peer_id),

crates/apollo_state_sync/src/runner/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ impl StateSyncRunner {
201201
num_active_inbound_sessions: P2P_SYNC_NUM_ACTIVE_INBOUND_SESSIONS,
202202
num_active_outbound_sessions: P2P_SYNC_NUM_ACTIVE_OUTBOUND_SESSIONS,
203203
}),
204+
gossipsub_metrics: None,
204205
});
205206
NetworkManager::new(
206207
network_config.clone(),

0 commit comments

Comments
 (0)