apollo_network_benchmark: implement RoundRobin broadcasting logic#11560
Conversation
|
There hasn't been any activity on this pull request recently, and in order to prioritize active work, it has been marked as stale. |
| let now_seconds = seconds_since_epoch(); | ||
| let round_duration_seconds = args.user.round_duration_seconds; | ||
| let num_nodes: u64 = args.runner.bootstrap.len().try_into().unwrap(); | ||
| let current_round = (now_seconds / round_duration_seconds) % num_nodes; |
There was a problem hiding this comment.
Round-robin uses wrong node count source
Medium Severity
should_broadcast_round_robin derives num_nodes from args.runner.bootstrap.len(), but bootstrap represents known bootstrap peers, not the cluster size. In RoundRobin, this can pick broadcasters from the wrong ID range, and when bootstrap is empty it evaluates % 0, causing a runtime panic.
| let now_seconds = seconds_since_epoch(); | ||
| let round_duration_seconds = args.user.round_duration_seconds; | ||
| let num_nodes: u64 = args.runner.bootstrap.len().try_into().unwrap(); | ||
| let current_round = (now_seconds / round_duration_seconds) % num_nodes; |
There was a problem hiding this comment.
Zero round duration triggers panic
Medium Severity
should_broadcast_round_robin divides by args.user.round_duration_seconds without validating it is nonzero. Passing --round-duration-seconds 0 causes a runtime panic in now_seconds / round_duration_seconds, so RoundRobin can crash immediately from valid CLI parsing.
6e7d057 to
ffaea93
Compare
662465b to
5ad7f33
Compare
ffaea93 to
c686f08
Compare
5ad7f33 to
5b95193
Compare
| let now_seconds = seconds_since_epoch(); | ||
| let round_duration_seconds = args.user.round_duration_seconds; | ||
| let num_nodes: u64 = args.runner.bootstrap.len().try_into().unwrap(); | ||
| let current_round = (now_seconds / round_duration_seconds) % num_nodes; |
There was a problem hiding this comment.
Division by zero in round-robin scheduling arithmetic
Medium Severity
should_broadcast_round_robin has two unguarded division operations on u64 values that can be zero. num_nodes is derived from args.runner.bootstrap.len(), which is zero when no --bootstrap flag is provided. round_duration_seconds is a CLI argument that a user could explicitly set to 0. Either case causes a panic. The RoundRobin path in should_broadcast unconditionally returns true, so the send loop starts and calls this function even with an empty bootstrap list.
c686f08 to
a5e0165
Compare
5b95193 to
588daee
Compare
588daee to
53ed810
Compare



Note
Medium Risk
Changes message-sending behavior in the stress test node by gating broadcasts on time-based round-robin selection, which can affect benchmark validity and relies on consistent clocks and non-empty bootstrap lists.
Overview
Adds a new RoundRobin broadcast mode to
broadcast_network_stress_test_nodeso only the selected node for the current time slice sends messages, while other modes continue broadcasting every heartbeat.Implements time-based round selection via
seconds_since_epoch()/round_duration_secondsand emits atrace!log when a node sends in a given mode.Written by Cursor Bugbot for commit 53ed810. This will update automatically on new commits. Configure here.