Skip to content

Commit 588daee

Browse files
apollo_network_benchmark: implement RoundRobin broadcasting logic
1 parent a5e0165 commit 588daee

1 file changed

Lines changed: 35 additions & 12 deletions

File tree

  • crates/apollo_network_benchmark/src/bin/broadcast_network_stress_test_node

‎crates/apollo_network_benchmark/src/bin/broadcast_network_stress_test_node/handlers.rs‎

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
use std::time::{Duration, SystemTime};
22

33
use apollo_metrics::metrics::LossyIntoF64;
4-
use apollo_network_benchmark::node_args::NodeArgs;
4+
use apollo_network_benchmark::node_args::{Mode, NodeArgs};
55
use libp2p::PeerId;
6+
use tracing::trace;
67

78
use crate::message::{StressTestMessage, METADATA_SIZE};
89
use crate::message_index_detector::MessageIndexTracker;
910
use crate::metrics::{
1011
get_throughput,
12+
seconds_since_epoch,
1113
BROADCAST_MESSAGE_BYTES,
1214
BROADCAST_MESSAGE_BYTES_SUM,
1315
BROADCAST_MESSAGE_COUNT,
@@ -33,6 +35,14 @@ fn get_message(id: u64, size_bytes: usize) -> StressTestMessage {
3335
message
3436
}
3537

38+
fn should_broadcast_round_robin(args: &NodeArgs) -> bool {
39+
let now_seconds = seconds_since_epoch();
40+
let round_duration_seconds = args.user.round_duration_seconds;
41+
let num_nodes: u64 = args.runner.bootstrap.len().try_into().unwrap();
42+
let current_round = (now_seconds / round_duration_seconds) % num_nodes;
43+
args.runner.id == current_round
44+
}
45+
3646
/// Unified implementation for sending stress test messages via any protocol
3747
pub async fn send_stress_test_messages(
3848
mut message_sender: MessageSender,
@@ -50,17 +60,30 @@ pub async fn send_stress_test_messages(
5060
loop {
5161
interval.tick().await;
5262

53-
message.metadata.time = SystemTime::now();
54-
message.metadata.message_index = message_index;
55-
let message_clone = message.clone().into();
56-
let start_time = std::time::Instant::now();
57-
message_sender.send_message(&peers, message_clone).await;
58-
BROADCAST_MESSAGE_SEND_DELAY_SECONDS.record(start_time.elapsed().as_secs_f64());
59-
BROADCAST_MESSAGE_BYTES.set(message.len().into_f64());
60-
BROADCAST_MESSAGE_COUNT.increment(1);
61-
BROADCAST_MESSAGE_BYTES_SUM
62-
.increment(u64::try_from(message.len()).expect("Message length too large for u64"));
63-
message_index += 1;
63+
// Check if this node should broadcast based on the mode
64+
let should_broadcast_now = match args.user.mode {
65+
Mode::AllBroadcast | Mode::OneBroadcast => true,
66+
Mode::RoundRobin => should_broadcast_round_robin(args),
67+
};
68+
69+
if should_broadcast_now {
70+
message.metadata.time = SystemTime::now();
71+
message.metadata.message_index = message_index;
72+
let message_clone = message.clone().into();
73+
let start_time = std::time::Instant::now();
74+
message_sender.send_message(&peers, message_clone).await;
75+
BROADCAST_MESSAGE_SEND_DELAY_SECONDS.record(start_time.elapsed().as_secs_f64());
76+
BROADCAST_MESSAGE_BYTES.set(message.len().into_f64());
77+
BROADCAST_MESSAGE_COUNT.increment(1);
78+
BROADCAST_MESSAGE_BYTES_SUM
79+
.increment(u64::try_from(message.len()).expect("Message length too large for u64"));
80+
trace!(
81+
"Node {} sent message {message_index} in mode `{}`",
82+
args.runner.id,
83+
args.user.mode
84+
);
85+
message_index += 1;
86+
}
6487
}
6588
}
6689

0 commit comments

Comments
 (0)