Skip to content

Commit 4313dba

Browse files
[p2p/simulated, estimator] simulate bandwidth and message size constraints (#1452)
Co-authored-by: Patrick O'Grady <[email protected]>
1 parent ef4387a commit 4313dba

22 files changed

Lines changed: 2597 additions & 333 deletions

File tree

AGENTS.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ let (resolver_sender, resolver_receiver) = oracle.register(pk, 2).await.unwrap()
221221

222222
// Configure network links with realistic conditions
223223
oracle.add_link(pk1, pk2, Link {
224-
latency: 10.0, // ms
225-
jitter: 2.5, // ms
224+
latency: Duration::from_millis(10),
225+
jitter: Duration::from_millis(3),
226226
success_rate: 0.95, // 95% success
227227
}).await.unwrap();
228228
```
@@ -238,17 +238,17 @@ link_validators(&mut oracle, &validators, Action::Unlink, Some(separated)).await
238238

239239
// Update links dynamically
240240
let degraded_link = Link {
241-
latency: 3_000.0, // Simulate slow network
242-
jitter: 0.0,
241+
latency: Duration::from_secs(3), // Simulate slow network
242+
jitter: Duration::from_millis(0),
243243
success_rate: 1.0,
244244
};
245245
oracle.update_link(pk1, pk2, degraded_link).await.unwrap();
246246

247247
// Test with lossy networks
248248
let lossy_link = Link {
249-
latency: 200.0,
250-
jitter: 150.0,
251-
success_rate: 0.5, // 50% packet loss
249+
latency: Duration::from_millis(200),
250+
jitter: Duration::from_millis(150),
251+
success_rate: 0.5, // 50% packet loss
252252
};
253253
```
254254

@@ -555,4 +555,4 @@ mod tests {
555555
### Safety Guidelines
556556
- Minimize unsafe blocks with clear `// SAFETY:` comments
557557
- Prefer safe abstractions over raw unsafe code
558-
- Enable overflow checks in all profiles (already configured)
558+
- Enable overflow checks in all profiles (already configured)

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

broadcast/src/buffered/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ mod tests {
9090

9191
// Add links between all peers
9292
let link = Link {
93-
latency: NETWORK_SPEED.as_millis() as f64,
94-
jitter: 0.0,
93+
latency: NETWORK_SPEED,
94+
jitter: Duration::ZERO,
9595
success_rate,
9696
};
9797
for p1 in peers.iter() {

collector/src/p2p/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ mod tests {
6666

6767
const MAILBOX_SIZE: usize = 1024;
6868
const LINK: Link = Link {
69-
latency: 10.0,
70-
jitter: 1.0,
69+
latency: Duration::from_millis(10),
70+
jitter: Duration::from_millis(1),
7171
success_rate: 1.0,
7272
};
7373
const LINK_SLOW: Link = Link {
74-
latency: 1_000.0,
75-
jitter: 1.0,
74+
latency: Duration::from_secs(1),
75+
jitter: Duration::from_millis(1),
7676
success_rate: 1.0,
7777
};
7878

consensus/src/aggregation/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ mod tests {
107107

108108
/// Reliable network link configuration for testing.
109109
const RELIABLE_LINK: Link = Link {
110-
latency: 10.0,
111-
jitter: 1.0,
110+
latency: Duration::from_millis(10),
111+
jitter: Duration::from_millis(1),
112112
success_rate: 1.0,
113113
};
114114

@@ -581,8 +581,8 @@ mod tests {
581581

582582
// Use degraded network links with realistic conditions
583583
let degraded_link = Link {
584-
latency: 200.0,
585-
jitter: 150.0,
584+
latency: Duration::from_millis(200),
585+
jitter: Duration::from_millis(150),
586586
success_rate: 0.5,
587587
};
588588

@@ -733,8 +733,8 @@ mod tests {
733733
context.sleep(Duration::from_secs(20)).await;
734734

735735
let link = Link {
736-
latency: 10.0,
737-
jitter: 1.0,
736+
latency: Duration::from_millis(10),
737+
jitter: Duration::from_millis(1),
738738
success_rate: 1.0,
739739
};
740740
for v1 in pks.iter() {

consensus/src/marshal/mod.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,8 @@ mod tests {
283283
#[test_traced("WARN")]
284284
fn test_finalize_good_links() {
285285
let link = Link {
286-
latency: 100.0,
287-
jitter: 1.0,
286+
latency: Duration::from_millis(100),
287+
jitter: Duration::from_millis(1),
288288
success_rate: 1.0,
289289
};
290290
for seed in 0..5 {
@@ -299,8 +299,8 @@ mod tests {
299299
#[test_traced("WARN")]
300300
fn test_finalize_bad_links() {
301301
let link = Link {
302-
latency: 200.0,
303-
jitter: 50.0,
302+
latency: Duration::from_millis(200),
303+
jitter: Duration::from_millis(50),
304304
success_rate: 0.7,
305305
};
306306
for seed in 0..5 {
@@ -367,9 +367,7 @@ mod tests {
367367

368368
// Wait for the block to be broadcast, but due to jitter, we may or may not receive
369369
// the block before continuing.
370-
context
371-
.sleep(Duration::from_millis(link.latency as u64))
372-
.await;
370+
context.sleep(link.latency).await;
373371

374372
// Notarize block by the validator that broadcasted it
375373
let proposal = Proposal {
@@ -439,8 +437,8 @@ mod tests {
439437
let mut actor = actors[0].clone();
440438

441439
let link = Link {
442-
latency: 10.0,
443-
jitter: 1.0,
440+
latency: Duration::from_millis(10),
441+
jitter: Duration::from_millis(1),
444442
success_rate: 1.0,
445443
};
446444
setup_network_links(&mut oracle, &peers, link).await;
@@ -493,8 +491,8 @@ mod tests {
493491
let mut actor = actors[0].clone();
494492

495493
let link = Link {
496-
latency: 10.0,
497-
jitter: 1.0,
494+
latency: Duration::from_millis(10),
495+
jitter: Duration::from_millis(1),
498496
success_rate: 1.0,
499497
};
500498
setup_network_links(&mut oracle, &peers, link).await;
@@ -561,8 +559,8 @@ mod tests {
561559
let mut actor = actors[0].clone();
562560

563561
let link = Link {
564-
latency: 10.0,
565-
jitter: 1.0,
562+
latency: Duration::from_millis(10),
563+
jitter: Duration::from_millis(1),
566564
success_rate: 1.0,
567565
};
568566
setup_network_links(&mut oracle, &peers, link).await;
@@ -623,8 +621,8 @@ mod tests {
623621
let mut actor = actors[0].clone();
624622

625623
let link = Link {
626-
latency: 10.0,
627-
jitter: 1.0,
624+
latency: Duration::from_millis(10),
625+
jitter: Duration::from_millis(1),
628626
success_rate: 1.0,
629627
};
630628
setup_network_links(&mut oracle, &peers, link).await;

consensus/src/ordered_broadcast/mod.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ mod tests {
174174

175175
let registrations = register_participants(&mut oracle, &pks).await;
176176
let link = Link {
177-
latency: 10.0,
178-
jitter: 1.0,
177+
latency: Duration::from_millis(10),
178+
jitter: Duration::from_millis(1),
179179
success_rate: 1.0,
180180
};
181181
link_participants(&mut oracle, &pks, Action::Link(link), None).await;
@@ -407,8 +407,8 @@ mod tests {
407407

408408
let mut registrations = register_participants(&mut oracle, &pks).await;
409409
let link = commonware_p2p::simulated::Link {
410-
latency: 10.0,
411-
jitter: 1.0,
410+
latency: Duration::from_millis(10),
411+
jitter: Duration::from_millis(1),
412412
success_rate: 1.0,
413413
};
414414
link_participants(&mut oracle, &pks, Action::Link(link), None).await;
@@ -525,8 +525,8 @@ mod tests {
525525

526526
// Heal the partition by re-adding links.
527527
let link = Link {
528-
latency: 10.0,
529-
jitter: 1.0,
528+
latency: Duration::from_millis(10),
529+
jitter: Duration::from_millis(1),
530530
success_rate: 1.0,
531531
};
532532
link_participants(&mut oracle, &pks, Action::Link(link), None).await;
@@ -567,8 +567,8 @@ mod tests {
567567
)
568568
.await;
569569
let delayed_link = Link {
570-
latency: 50.0,
571-
jitter: 40.0,
570+
latency: Duration::from_millis(50),
571+
jitter: Duration::from_millis(40),
572572
success_rate: 0.5,
573573
};
574574
let mut oracle_clone = oracle.clone();
@@ -740,8 +740,8 @@ mod tests {
740740

741741
// Heal the partition by re-adding links.
742742
let link = Link {
743-
latency: 10.0,
744-
jitter: 1.0,
743+
latency: Duration::from_millis(10),
744+
jitter: Duration::from_millis(1),
745745
success_rate: 1.0,
746746
};
747747
link_participants(&mut oracle, &pks, Action::Link(link), None).await;
@@ -809,8 +809,8 @@ mod tests {
809809
// Register all participants
810810
let mut registrations = register_participants(&mut oracle, &participants).await;
811811
let link = commonware_p2p::simulated::Link {
812-
latency: 10.0,
813-
jitter: 1.0,
812+
latency: Duration::from_millis(10),
813+
jitter: Duration::from_millis(1),
814814
success_rate: 1.0,
815815
};
816816
link_participants(&mut oracle, &participants, Action::Link(link), None).await;
@@ -969,8 +969,8 @@ mod tests {
969969
)
970970
.await;
971971
let delayed_link = Link {
972-
latency: 80.0,
973-
jitter: 10.0,
972+
latency: Duration::from_millis(80),
973+
jitter: Duration::from_millis(10),
974974
success_rate: 0.98,
975975
};
976976
let mut oracle_clone = oracle.clone();

consensus/src/simplex/actors/voter/mod.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ mod tests {
158158
validator.clone(),
159159
peer.clone(),
160160
Link {
161-
latency: 0.0,
162-
jitter: 0.0,
161+
latency: Duration::from_millis(0),
162+
jitter: Duration::from_millis(0),
163163
success_rate: 1.0,
164164
},
165165
)
@@ -170,8 +170,8 @@ mod tests {
170170
peer,
171171
validator,
172172
Link {
173-
latency: 0.0,
174-
jitter: 0.0,
173+
latency: Duration::from_millis(0),
174+
jitter: Duration::from_millis(0),
175175
success_rate: 1.0,
176176
},
177177
)
@@ -354,8 +354,8 @@ mod tests {
354354
validator.clone(),
355355
peer.clone(),
356356
Link {
357-
latency: 0.0,
358-
jitter: 0.0,
357+
latency: Duration::from_millis(0),
358+
jitter: Duration::from_millis(0),
359359
success_rate: 1.0,
360360
},
361361
)
@@ -366,8 +366,8 @@ mod tests {
366366
peer,
367367
validator,
368368
Link {
369-
latency: 0.0,
370-
jitter: 0.0,
369+
latency: Duration::from_millis(0),
370+
jitter: Duration::from_millis(0),
371371
success_rate: 1.0,
372372
},
373373
)

0 commit comments

Comments
 (0)