mirror of
https://github.com/neondatabase/neon.git
synced 2026-05-19 06:00:38 +00:00
Migrates the remaining crates to edition 2024. We like to stay on the latest edition if possible. There is no functional changes, however some code changes had to be done to accommodate the edition's breaking changes. Like the previous migration PRs, this is comprised of three commits: * the first does the edition update and makes `cargo check`/`cargo clippy` pass. we had to update bindgen to make its output [satisfy the requirements of edition 2024](https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-extern.html) * the second commit does a `cargo fmt` for the new style edition. * the third commit reorders imports as a one-off change. As before, it is entirely optional. Part of #10918
52 lines
1.4 KiB
Rust
52 lines
1.4 KiB
Rust
use rand::Rng;
|
|
use rand::rngs::StdRng;
|
|
|
|
/// Describes random delays and failures. Delay will be uniformly distributed in [min, max].
|
|
/// Connection failure will occur with the probablity fail_prob.
|
|
#[derive(Clone, Debug)]
|
|
pub struct Delay {
|
|
pub min: u64,
|
|
pub max: u64,
|
|
pub fail_prob: f64, // [0; 1]
|
|
}
|
|
|
|
impl Delay {
|
|
/// Create a struct with no delay, no failures.
|
|
pub fn empty() -> Delay {
|
|
Delay {
|
|
min: 0,
|
|
max: 0,
|
|
fail_prob: 0.0,
|
|
}
|
|
}
|
|
|
|
/// Create a struct with a fixed delay.
|
|
pub fn fixed(ms: u64) -> Delay {
|
|
Delay {
|
|
min: ms,
|
|
max: ms,
|
|
fail_prob: 0.0,
|
|
}
|
|
}
|
|
|
|
/// Generate a random delay in range [min, max]. Return None if the
|
|
/// message should be dropped.
|
|
pub fn delay(&self, rng: &mut StdRng) -> Option<u64> {
|
|
if rng.gen_bool(self.fail_prob) {
|
|
return None;
|
|
}
|
|
Some(rng.gen_range(self.min..=self.max))
|
|
}
|
|
}
|
|
|
|
/// Describes network settings. All network packets will be subjected to the same delays and failures.
|
|
#[derive(Clone, Debug)]
|
|
pub struct NetworkOptions {
|
|
/// Connection will be automatically closed after this timeout if no data is received.
|
|
pub keepalive_timeout: Option<u64>,
|
|
/// New connections will be delayed by this amount of time.
|
|
pub connect_delay: Delay,
|
|
/// Each message will be delayed by this amount of time.
|
|
pub send_delay: Delay,
|
|
}
|