Slowdown again
This commit is contained in:
parent
5027d8ccd1
commit
b597ee0fad
4 changed files with 39 additions and 4 deletions
18
Cargo.lock
generated
18
Cargo.lock
generated
|
|
@ -1249,6 +1249,12 @@ version = "0.2.153"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libm"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libredox"
|
name = "libredox"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
|
|
@ -1291,6 +1297,7 @@ dependencies = [
|
||||||
"openssl",
|
"openssl",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"rand",
|
"rand",
|
||||||
|
"rand_distr",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"rlimit",
|
"rlimit",
|
||||||
|
|
@ -1655,6 +1662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
|
"libm",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1937,6 +1945,16 @@ dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_distr"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
"rand",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ bytes = "1.5.0"
|
||||||
rlimit = "0.10.1"
|
rlimit = "0.10.1"
|
||||||
async-stream = "0.3.5"
|
async-stream = "0.3.5"
|
||||||
memmap2 = "0.9.4"
|
memmap2 = "0.9.4"
|
||||||
|
rand_distr = "0.4.3"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
futures = { version = "0.3" }
|
futures = { version = "0.3" }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
use rand_distr::Distribution;
|
||||||
|
|
||||||
use super::{StorageFactory, TorrentStorage};
|
use super::{StorageFactory, TorrentStorage};
|
||||||
|
|
||||||
|
|
@ -30,9 +31,23 @@ pub struct SlowStorage<U> {
|
||||||
underlying: U,
|
underlying: U,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn random_duration() -> Duration {
|
||||||
|
use rand_distr::StandardNormal;
|
||||||
|
|
||||||
|
let s = StandardNormal {};
|
||||||
|
|
||||||
|
let sl: f64 = s.sample(&mut rand::thread_rng());
|
||||||
|
// let sl = Duration::from_secs_f64(sl);
|
||||||
|
// tracing::trace!(duration = ?sl, "sleeping");
|
||||||
|
// std::thread::sleep(sl)
|
||||||
|
//
|
||||||
|
let micros = 340f64 + sl * 200.;
|
||||||
|
let micros = micros.max(0.001) * 2.;
|
||||||
|
Duration::from_micros(micros as u64)
|
||||||
|
}
|
||||||
|
|
||||||
fn random_sleep() {
|
fn random_sleep() {
|
||||||
let sl = rand::thread_rng().gen_range(0f64..0.1f64);
|
let sl = random_duration();
|
||||||
let sl = Duration::from_secs_f64(sl);
|
|
||||||
tracing::trace!(duration = ?sl, "sleeping");
|
tracing::trace!(duration = ?sl, "sleeping");
|
||||||
std::thread::sleep(sl)
|
std::thread::sleep(sl)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ use librqbit::{
|
||||||
http_api::{HttpApi, HttpApiOptions},
|
http_api::{HttpApi, HttpApiOptions},
|
||||||
http_api_client, librqbit_spawn,
|
http_api_client, librqbit_spawn,
|
||||||
storage::{
|
storage::{
|
||||||
filesystem::FilesystemStorageFactory, timing::TimingStorageFactory, StorageFactoryExt,
|
filesystem::FilesystemStorageFactory, slow::SlowStorageFactory,
|
||||||
|
timing::TimingStorageFactory, StorageFactoryExt,
|
||||||
},
|
},
|
||||||
tracing_subscriber_config_utils::{init_logging, InitLoggingOptions},
|
tracing_subscriber_config_utils::{init_logging, InitLoggingOptions},
|
||||||
AddTorrent, AddTorrentOptions, AddTorrentResponse, Api, ListOnlyResponse,
|
AddTorrent, AddTorrentOptions, AddTorrentResponse, Api, ListOnlyResponse,
|
||||||
|
|
@ -382,7 +383,7 @@ async fn async_main(opts: Opts) -> anyhow::Result<()> {
|
||||||
disable_trackers: download_opts.disable_trackers,
|
disable_trackers: download_opts.disable_trackers,
|
||||||
storage_factory: Some({
|
storage_factory: Some({
|
||||||
let sf = FilesystemStorageFactory::default();
|
let sf = FilesystemStorageFactory::default();
|
||||||
// let sf = SlowStorageFactory::new(sf);
|
let sf = SlowStorageFactory::new(sf);
|
||||||
TimingStorageFactory::new("fs".to_owned(), sf).boxed()
|
TimingStorageFactory::new("fs".to_owned(), sf).boxed()
|
||||||
}),
|
}),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue