1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-22 12:51:31 +03:00

deps: migrate from ratelimit_meter -> governor

This appeases some dependabot warnings regarding the use of
an old version of parking_lot that has some unsoundness issues.

ratelimit_meter is frozen and is succeeded by governor which has
a mostly similar API.
This commit is contained in:
Wez Furlong 2022-06-07 22:55:01 -07:00
parent a323935bb6
commit 7abc46208d
3 changed files with 117 additions and 138 deletions

219
Cargo.lock generated
View File

@ -581,15 +581,6 @@ dependencies = [
"objc_id",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
dependencies = [
"bitflags",
]
[[package]]
name = "cocoa"
version = "0.20.2"
@ -890,6 +881,18 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
[[package]]
name = "dashmap"
version = "5.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f"
dependencies = [
"cfg-if 1.0.0",
"hashbrown 0.12.1",
"lock_api",
"parking_lot_core 0.9.3",
]
[[package]]
name = "deflate"
version = "1.0.0"
@ -1036,7 +1039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc24ff8d764818e9ab17963b0593c535f077a513f565e75e4352d758bc4d8c0"
dependencies = [
"cc",
"rustc_version 0.4.0",
"rustc_version",
"toml",
"vswhom",
"winreg",
@ -1135,16 +1138,6 @@ version = "2.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
[[package]]
name = "evmap"
version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fdb60074c9b82c91f8702fa5351b85d22b668dae7f73bf06b44a09bc372380f"
dependencies = [
"hashbrown 0.5.0",
"smallvec 0.6.14",
]
[[package]]
name = "exr"
version = "1.4.2"
@ -1157,7 +1150,7 @@ dependencies = [
"half",
"inflate",
"lebe",
"smallvec 1.8.0",
"smallvec",
"threadpool",
]
@ -1216,7 +1209,7 @@ checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
dependencies = [
"cfg-if 1.0.0",
"libc",
"redox_syscall 0.2.13",
"redox_syscall",
"winapi 0.3.9",
]
@ -1562,7 +1555,7 @@ dependencies = [
"gl_generator",
"lazy_static",
"memoffset",
"smallvec 1.8.0",
"smallvec",
"takeable-option",
]
@ -1602,6 +1595,23 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "governor"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19775995ee20209163239355bc3ad2f33f83da35d9ef72dea26e5af753552c87"
dependencies = [
"dashmap",
"futures",
"futures-timer",
"no-std-compat",
"nonzero_ext",
"parking_lot 0.12.1",
"quanta",
"rand 0.8.5",
"smallvec",
]
[[package]]
name = "guillotiere"
version = "0.6.2"
@ -1626,12 +1636,6 @@ dependencies = [
"freetype",
]
[[package]]
name = "hashbrown"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353"
[[package]]
name = "hashbrown"
version = "0.11.2"
@ -1641,6 +1645,12 @@ dependencies = [
"ahash",
]
[[package]]
name = "hashbrown"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
[[package]]
name = "hdrhistogram"
version = "7.5.0"
@ -2020,15 +2030,6 @@ dependencies = [
"num-traits",
]
[[package]]
name = "lock_api"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
dependencies = [
"scopeguard",
]
[[package]]
name = "lock_api"
version = "0.4.7"
@ -2132,12 +2133,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
[[package]]
name = "maybe-uninit"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
name = "memchr"
version = "2.5.0"
@ -2438,6 +2433,12 @@ dependencies = [
"memoffset",
]
[[package]]
name = "no-std-compat"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
[[package]]
name = "nom"
version = "5.1.2"
@ -2460,9 +2461,9 @@ dependencies = [
[[package]]
name = "nonzero_ext"
version = "0.1.5"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db1b4163932b207be6e3a06412aed4d84cca40dc087419f231b3a38cba2ca8e9"
checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21"
[[package]]
name = "normalize-line-endings"
@ -2755,17 +2756,6 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
[[package]]
name = "parking_lot"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
dependencies = [
"lock_api 0.3.4",
"parking_lot_core 0.6.2",
"rustc_version 0.2.3",
]
[[package]]
name = "parking_lot"
version = "0.11.2"
@ -2773,23 +2763,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
dependencies = [
"instant",
"lock_api 0.4.7",
"lock_api",
"parking_lot_core 0.8.5",
]
[[package]]
name = "parking_lot_core"
version = "0.6.2"
name = "parking_lot"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"cfg-if 0.1.10",
"cloudabi",
"libc",
"redox_syscall 0.1.57",
"rustc_version 0.2.3",
"smallvec 0.6.14",
"winapi 0.3.9",
"lock_api",
"parking_lot_core 0.9.3",
]
[[package]]
@ -2801,11 +2786,24 @@ dependencies = [
"cfg-if 1.0.0",
"instant",
"libc",
"redox_syscall 0.2.13",
"smallvec 1.8.0",
"redox_syscall",
"smallvec",
"winapi 0.3.9",
]
[[package]]
name = "parking_lot_core"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
dependencies = [
"cfg-if 1.0.0",
"libc",
"redox_syscall",
"smallvec",
"windows-sys",
]
[[package]]
name = "pathdiff"
version = "0.2.1"
@ -3156,6 +3154,22 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b45c49fc4f91f35bae654f85ebb3a44d60ac64f11b3166ffa609def390c732d8"
[[package]]
name = "quanta"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8"
dependencies = [
"crossbeam-utils",
"libc",
"mach",
"once_cell",
"raw-cpuid",
"wasi 0.10.2+wasi-snapshot-preview1",
"web-sys",
"winapi 0.3.9",
]
[[package]]
name = "quick-xml"
version = "0.22.0"
@ -3267,18 +3281,16 @@ name = "ratelim"
version = "0.1.0"
dependencies = [
"config",
"ratelimit_meter",
"governor",
]
[[package]]
name = "ratelimit_meter"
version = "5.0.0"
name = "raw-cpuid"
version = "10.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a37d4f95369ef809d01448bdf8d82ef974e3b21f3698d87015a575bb26f27724"
checksum = "738bc47119e3eeccc7e94c4a506901aea5e7b4944ecd0829cbebf4af04ceda12"
dependencies = [
"evmap",
"nonzero_ext",
"parking_lot 0.9.0",
"bitflags",
]
[[package]]
@ -3336,12 +3348,6 @@ dependencies = [
"yasna",
]
[[package]]
name = "redox_syscall"
version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "redox_syscall"
version = "0.2.13"
@ -3358,7 +3364,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom 0.2.6",
"redox_syscall 0.2.13",
"redox_syscall",
"thiserror",
]
@ -3437,7 +3443,7 @@ dependencies = [
"futures",
"futures-timer",
"rstest_macros",
"rustc_version 0.4.0",
"rustc_version",
]
[[package]]
@ -3449,7 +3455,7 @@ dependencies = [
"cfg-if 1.0.0",
"proc-macro2",
"quote",
"rustc_version 0.4.0",
"rustc_version",
"syn",
]
@ -3465,15 +3471,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
dependencies = [
"semver 0.9.0",
]
[[package]]
name = "rustc_version"
version = "0.4.0"
@ -3558,22 +3555,13 @@ dependencies = [
"libc",
]
[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
"semver-parser 0.7.0",
]
[[package]]
name = "semver"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
dependencies = [
"semver-parser 0.10.2",
"semver-parser",
]
[[package]]
@ -3582,12 +3570,6 @@ version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "semver-parser"
version = "0.10.2"
@ -3784,15 +3766,6 @@ version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
[[package]]
name = "smallvec"
version = "0.6.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
dependencies = [
"maybe-uninit",
]
[[package]]
name = "smallvec"
version = "1.8.0"
@ -3898,7 +3871,7 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d"
dependencies = [
"lock_api 0.4.7",
"lock_api",
]
[[package]]
@ -3999,7 +3972,7 @@ dependencies = [
"cfg-if 1.0.0",
"fastrand",
"libc",
"redox_syscall 0.2.13",
"redox_syscall",
"remove_dir_all",
"winapi 0.3.9",
]
@ -4537,7 +4510,7 @@ checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e"
dependencies = [
"nix 0.22.3",
"once_cell",
"smallvec 1.8.0",
"smallvec",
"wayland-sys",
]

View File

@ -7,5 +7,5 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
ratelimit_meter = "5.0"
governor = "0.4"
config = { path = "../config" }

View File

@ -1,10 +1,11 @@
use config::{configuration, ConfigHandle};
use ratelimit_meter::algorithms::NonConformance;
use ratelimit_meter::{DirectRateLimiter, LeakyBucket, NegativeMultiDecision};
use std::time::{Duration, Instant};
use governor::clock::{Clock, DefaultClock};
use governor::{NegativeMultiDecision, Quota, RateLimiter as Limiter};
use std::num::NonZeroU32;
use std::time::Duration;
pub struct RateLimiter {
lim: DirectRateLimiter<LeakyBucket>,
lim: Limiter<governor::state::direct::NotKeyed, governor::state::InMemoryState, DefaultClock>,
get_limit_value: Box<dyn Fn(&ConfigHandle) -> u32 + 'static + Send>,
generation: usize,
capacity_per_second: u32,
@ -23,10 +24,9 @@ impl RateLimiter {
let get_limit_value = Box::new(get_limit_value);
let capacity_per_second = get_limit_value(&config);
Self {
lim: DirectRateLimiter::<LeakyBucket>::per_second(
std::num::NonZeroU32::new(capacity_per_second)
.expect("RateLimiter capacity to be non-zero"),
),
lim: Limiter::direct(Quota::per_second(
NonZeroU32::new(capacity_per_second).expect("RateLimiter capacity to be non-zero"),
)),
get_limit_value,
generation,
capacity_per_second,
@ -39,9 +39,9 @@ impl RateLimiter {
if generation != self.generation {
let value = (self.get_limit_value)(&config);
if value != self.capacity_per_second {
self.lim = DirectRateLimiter::<LeakyBucket>::per_second(
std::num::NonZeroU32::new(value).expect("RateLimiter capacity to be non-zero"),
);
self.lim = Limiter::direct(Quota::per_second(
NonZeroU32::new(value).expect("RateLimiter capacity to be non-zero"),
));
self.capacity_per_second = value;
}
self.generation = generation;
@ -51,7 +51,9 @@ impl RateLimiter {
#[allow(dead_code)]
pub fn non_blocking_admittance_check(&mut self, amount: u32) -> bool {
self.check_config_reload();
self.lim.check_n(amount).is_ok()
self.lim
.check_n(NonZeroU32::new(amount).expect("amount to be non-zero"))
.is_ok()
}
/// Attempt to admit up to `amount` number of items.
@ -62,10 +64,14 @@ impl RateLimiter {
pub fn admit_check(&mut self, mut amount: u32) -> Result<u32, Duration> {
self.check_config_reload();
loop {
match self.lim.check_n(amount) {
let non_zero_amount = match NonZeroU32::new(amount) {
Some(n) => n,
None => return Ok(0),
};
match self.lim.check_n(non_zero_amount) {
Ok(_) => return Ok(amount),
Err(NegativeMultiDecision::BatchNonConforming(_, over)) if amount == 1 => {
return Err(over.wait_time_from(Instant::now()));
return Err(over.wait_time_from(DefaultClock::default().now()));
}
_ => {}
};