Bugfixes and testing

pmeunier
Jul 5, 2022, 4:21 PM
ZSXJNP7BGC3UR35ORVPFBXXAMDOGK2HPZB3A5JVJXM5HC55GHH3QC

Dependencies

  • [2] 3YOGOAKU Test replication
  • [3] FIIWK33F Fixing lock issues
  • [4] UEGA35KU Signalling the postgres server when the leader changes, but does not become this node
  • [5] UZXIRPR3 Restarting after various failures
  • [6] NPSWSVZN Init
  • [7] ENEREHTW Restart and rewind the server during failover (requires policykit)
  • [8] 6Z6PYXTS Testing and debugging
  • [9] 424R2VFM description, license, versions
  • [*] DSKXOP5Q README + formatting + argument checking

Change contents

  • edit in src/main.rs at line 11
    [3.318][3.318:351]()
    const LEASE_DURATION: i64 = 10;
  • edit in src/main.rs at line 42
    [11.288]
    [11.288]
    .takes_value(true),
    )
    .arg(
    clap::Arg::with_name("lease")
    .long("lease")
  • edit in src/main.rs at line 60
    [3.631]
    [3.1681]
    let lease = matches.value_of("lease").unwrap().parse().unwrap_or(60);
  • edit in src/main.rs at line 68
    [3.98]
    [3.98]
    let host_ = host.clone();
    let is_leader_ = is_leader.clone();
  • replacement in src/main.rs at line 102
    [3.835][3.1071:1127](),[3.1071][3.1071:1127]()
    lead_.send(String::new()).unwrap();
    [3.835]
    [3.946]
    let is_leader = host_ == is_leader_.borrow().as_str();
    if is_leader {
    // Trigger a resign. We're not rewinding if we
    // were the leader.
    lead_.send(String::new()).unwrap();
    }
  • replacement in src/main.rs at line 114
    [3.49][3.1757:1843](),[3.1074][3.1757:1843](),[3.1757][3.1757:1843](),[3.1843][3.1128:1142](),[3.1142][3.1867:1893](),[3.1867][3.1867:1893](),[3.1893][3.1143:1190](),[3.1190][3.1893:1935](),[3.1893][3.1893:1935](),[3.1935][3.50:80](),[3.80][3.1935:1943](),[3.1935][3.1935:1943](),[3.1943][2.0:84]()
    let mut election_observer = tokio::spawn(observe_elections(
    host.clone(),
    port,
    password.clone(),
    db_name.clone(),
    path.clone(),
    lead.clone(),
    db.clone(),
    process_lock.clone(),
    ));
    let mut race = tokio::spawn(race(host.clone(), is_leader.clone(), db.clone()));
    [3.49]
    [3.1366]
    let mut election_observer = tokio::spawn(observe_elections(host.clone(), lead.clone()));
    let mut race = tokio::spawn(race(host.clone(), lease, is_leader.clone(), db.clone()));
  • replacement in src/main.rs at line 129
    [2.251][2.251:273]()
    lead.clone(),
    [2.251]
    [2.273]
    is_leader.clone(),
  • edit in src/main.rs at line 184
    [3.130]
    [2.468]
    lease: u64,
  • replacement in src/main.rs at line 189
    [3.285][2.499:571]()
    match race_(host.clone(), leader.clone(), pool.clone()).await {
    [3.285]
    [3.481]
    match race_(host.clone(), lease, leader.clone(), pool.clone()).await {
  • edit in src/main.rs at line 202
    [3.1067]
    [3.1085]
    leased: u64,
  • replacement in src/main.rs at line 208
    [3.1777][3.1777:1842]()
    let lease = client.lease_grant(LEASE_DURATION, None).await?;
    [3.1777]
    [3.1842]
    let lease = client.lease_grant(leased as i64, None).await?;
  • replacement in src/main.rs at line 214
    [3.1995][3.1995:2088]()
    tokio::time::sleep(std::time::Duration::from_secs(LEASE_DURATION as u64 / 2)).await;
    [3.1995]
    [3.2088]
    tokio::time::sleep(std::time::Duration::from_secs(leased as u64 / 2)).await;
  • replacement in src/main.rs at line 221
    [3.2273][3.2273:2370]()
    tokio::time::sleep(std::time::Duration::from_secs(LEASE_DURATION as u64 / 2)).await;
    [3.2273]
    [3.2370]
    tokio::time::sleep(std::time::Duration::from_secs(leased as u64 / 2)).await;
  • replacement in src/main.rs at line 253
    [3.5969][3.5969:5997]()
    async fn observe_elections(
    [3.5969]
    [3.5997]
    async fn observe_elections(host: String, lead: Arc<Sender<String>>) -> Result<(), anyhow::Error> {
    let mut client = Client::connect(["localhost:2379"], None).await?;
    let mut obs = client.observe("postrep").await?;
    while let Some(m) = obs.message().await? {
    let leader = m.kv().unwrap().value_str()?;
    debug!(
    "observe_elections: leader = {:?}, host = {:?}",
    leader, host
    );
    lead.send(leader.to_string()).unwrap();
    }
    Ok(())
    }
    async fn check_postgres(
  • replacement in src/main.rs at line 273
    [3.2236][3.2236:2267]()
    lead: Arc<Sender<String>>,
    [3.2236]
    [3.2422]
    mut is_leader_: Receiver<String>,
  • edit in src/main.rs at line 277
    [3.6165][3.6165:6236]()
    let mut client = Client::connect(["localhost:2379"], None).await?;
  • replacement in src/main.rs at line 278
    [3.1537][3.6236:6288](),[3.6236][3.6236:6288](),[3.2659][3.6288:6335](),[3.6288][3.6288:6335](),[3.6367][3.6367:6418](),[3.6418][3.1538:1598]()
    let mut obs = client.observe("postrep").await?;
    while let Some(m) = obs.message().await? {
    let leader = m.kv().unwrap().value_str()?;
    debug!("leader = {:?}, host = {:?}", leader, host);
    [3.1537]
    [3.2660]
    loop {
    is_leader_.changed().await.unwrap();
    let leader = is_leader_.borrow().to_string();
  • replacement in src/main.rs at line 282
    [3.6748][3.2725:2773]()
    lead.send(leader.to_string()).unwrap();
    [3.2700]
    [3.2773]
    debug!("check_postgres: leader = {:?} host = {:?}", leader, host);
  • edit in src/main.rs at line 290
    [3.2888][3.1687:1765]()
    debug!("is_leader = {:?}, was_leader = {:?}", is_leader, was_leader);
  • replacement in src/main.rs at line 303
    [3.2226][3.915:1002]()
    rewind(&process_lock, &path, port, &db_name, leader, &password).await;
    [3.2226]
    [3.72]
    rewind(
    &process_lock,
    &path,
    port,
    &db_name,
    is_leader_.clone(),
    &password,
    )
    .await;
  • edit in src/main.rs at line 319
    [3.3090]
    [3.3090]
    debug!("is_leader = {:?}, was_leader = {:?}", is_leader, was_leader);
  • edit in src/main.rs at line 322
    [3.6948][3.6948:6959]()
    Ok(())
  • edit in src/main.rs at line 324
    [3.3137][2.572:1573]()
    async fn check_postgres(
    host: String,
    port: u16,
    password: String,
    db_name: String,
    path: String,
    leader: Arc<Sender<String>>,
    pool: Arc<Mutex<Option<tokio_postgres::Client>>>,
    process_lock: Arc<Mutex<()>>,
    ) -> Result<(), anyhow::Error> {
    loop {
    let leader = leader.borrow().to_string();
    if leader != host {
    let mut needs_rewind = false;
    let pool_ = { pool.lock().await.take() };
    if let Some(pool_) = pool_ {
    needs_rewind = pool_
    .query_opt("SELECT 1 FROM pg_stat_wal_receiver", &[])
    .await?
    .is_none();
    *pool.lock().await = Some(pool_);
    }
    if needs_rewind {
    debug!("leader: {:?}", leader);
    rewind(&process_lock, &path, port, &db_name, &leader, &password).await
    }
    }
    tokio::time::sleep(std::time::Duration::from_secs(10)).await
    }
    }
  • replacement in src/main.rs at line 359
    [3.1461][3.1461:1479]()
    leader: &str,
    [3.1461]
    [3.1479]
    leader: Receiver<String>,
  • replacement in src/main.rs at line 376
    [3.823][3.823:892]()
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    [3.823]
    [3.892]
    if !success {
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    }
  • edit in src/main.rs at line 382
    [3.948]
    [3.2752]
    let source = format!(
    "port={} user=postgres dbname={} host={}",
    port,
    db_name,
    &*leader.borrow()
    );
    info!("rewind {:?}", leader);
  • replacement in src/main.rs at line 391
    [3.2838][3.2838:3125]()
    .args([
    "-D",
    &path,
    "-R",
    "--source-server",
    &format!(
    "port={} user=postgres dbname={} host={}",
    port, db_name, leader
    ),
    ])
    [3.2838]
    [3.3125]
    .args(["-D", &path, "-R", "--source-server", &source])
  • replacement in src/main.rs at line 398
    [3.3374][3.3374:3443]()
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    [3.3374]
    [3.3443]
    if !success {
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    }
  • replacement in src/main.rs at line 407
    [3.1135][3.1135:1165]()
    leader, password,
    [3.1135]
    [3.1165]
    leader.borrow().as_str(),
    password,
  • replacement in src/main.rs at line 423
    [3.1589][3.1589:1658]()
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    [3.1589]
    [3.1658]
    if !success {
    tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    }
  • edit in src/main.rs at line 427
    [3.1664]
    [3.1548]
    let out = Command::new("systemctl")
    .args(["restart", "nest"])
    .output()
    .await
    .expect("failed to execute process");
    std::io::stdout().write_all(&out.stdout).unwrap();
    std::io::stderr().write_all(&out.stderr).unwrap();
  • replacement in Cargo.toml at line 3
    [3.7363][3.0:64]()
    description = "A clustering tool for PostgreSQL, based on Etcd"
    [3.7363]
    [3.64]
    description = "A clustering tool for PostgreSQL"
  • replacement in Cargo.toml at line 12
    [3.7573][3.92:112]()
    etcd-client = "0.6"
    [3.7573]
    [3.112]
    etcd-client = "0.9"
  • replacement in Cargo.toml at line 20
    [3.325][3.325:347]()
    tokio-postgres = "0.7"
    [3.325]
    tokio-postgres = "0.7"
  • edit in Cargo.lock at line 3
    [3.7916]
    [3.7916]
    version = 3
  • edit in Cargo.lock at line 77
    [3.9748]
    [3.9748]
    [[package]]
    name = "axum"
    version = "0.5.11"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "c2cc6e8e8c993cb61a005fab8c1e5093a29199b7253b05a6883999312935c1ff"
    dependencies = [
    "async-trait",
    "axum-core",
    "bitflags",
    "bytes",
    "futures-util",
    "http",
    "http-body",
    "hyper",
    "itoa",
    "matchit",
    "memchr",
    "mime",
    "percent-encoding",
    "pin-project-lite",
    "serde",
    "sync_wrapper",
    "tokio",
    "tower",
    "tower-http",
    "tower-layer",
    "tower-service",
    ]
    [[package]]
    name = "axum-core"
    version = "0.2.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cf4d047478b986f14a13edad31a009e2e05cb241f9805d0d75e4cba4e129ad4d"
    dependencies = [
    "async-trait",
    "bytes",
    "futures-util",
    "http",
    "http-body",
    "mime",
    ]
  • replacement in Cargo.lock at line 129
    [3.9970][3.9970:9988]()
    version = "1.2.1"
    [3.9970]
    [3.9988]
    version = "1.3.2"
  • replacement in Cargo.lock at line 131
    [3.10053][3.10053:10131]()
    checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
    [3.10053]
    [3.10131]
    checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
  • edit in Cargo.lock at line 155
    [3.10759]
    [3.10759]
    name = "cc"
    version = "1.0.73"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
    [[package]]
  • edit in Cargo.lock at line 182
    [3.11247]
    [3.11247]
    name = "cmake"
    version = "0.1.48"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
    dependencies = [
    "cc",
    ]
    [[package]]
  • replacement in Cargo.lock at line 236
    [3.12391][3.12391:12409]()
    version = "0.6.3"
    [3.12391]
    [3.12409]
    version = "0.9.2"
  • replacement in Cargo.lock at line 238
    [3.12474][3.12474:12552]()
    checksum = "3d80294643e620e280bece8df0eca6933c3c3cec2b3179803ef00b76183e9f5e"
    [3.12474]
    [3.12552]
    checksum = "9fb8664f6ea68aba5503d42dd1be786b0f1bd9b7972e7f40208c83ef74db91bf"
  • edit in Cargo.lock at line 246
    [3.12641]
    [3.12641]
    "tower",
    "tower-service",
  • replacement in Cargo.lock at line 258
    [3.12878][3.12878:12896]()
    version = "0.2.0"
    [3.12878]
    [3.12896]
    version = "0.4.2"
  • replacement in Cargo.lock at line 260
    [3.12961][3.12961:13039]()
    checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
    [3.12961]
    [3.13039]
    checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
  • replacement in Cargo.lock at line 378
    [3.16036][3.16036:16045]()
    "wasi",
    [3.16036]
    [3.16045]
    "wasi 0.10.2+wasi-snapshot-preview1",
  • replacement in Cargo.lock at line 383
    [3.16072][3.16072:16090]()
    version = "0.3.3"
    [3.16072]
    [3.16090]
    version = "0.3.13"
  • replacement in Cargo.lock at line 385
    [3.16155][3.16155:16233]()
    checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726"
    [3.16155]
    [3.16233]
    checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
  • replacement in Cargo.lock at line 396
    [3.16360][3.16360:16375]()
    "tokio-util",
    [3.16360]
    [3.16375]
    "tokio-util 0.7.3",
  • replacement in Cargo.lock at line 402
    [3.16421][3.16421:16439]()
    version = "0.9.1"
    [3.16421]
    [3.16439]
    version = "0.12.1"
  • replacement in Cargo.lock at line 404
    [3.16504][3.16504:16582]()
    checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
    [3.16504]
    [3.16582]
    checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
  • replacement in Cargo.lock at line 408
    [3.16609][3.16609:16627]()
    version = "0.3.2"
    [3.16609]
    [3.16627]
    version = "0.4.0"
  • replacement in Cargo.lock at line 410
    [3.16692][3.16692:16814]()
    checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
    dependencies = [
    "unicode-segmentation",
    ]
    [3.16692]
    [3.16814]
    checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
  • replacement in Cargo.lock at line 433
    [3.17298][3.17298:17316]()
    version = "0.2.4"
    [3.17298]
    [3.17316]
    version = "0.2.8"
  • replacement in Cargo.lock at line 435
    [3.17381][3.17381:17459]()
    checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11"
    [3.17381]
    [3.17459]
    checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
  • replacement in Cargo.lock at line 444
    [3.17537][3.17537:17555]()
    version = "0.4.1"
    [3.17537]
    [3.17555]
    version = "0.4.5"
  • replacement in Cargo.lock at line 446
    [3.17620][3.17620:17698]()
    checksum = "5dfb77c123b4e2f72a2069aeae0b4b4949cc7e966df277813fc16347e7549737"
    [3.17620]
    [3.17698]
    checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
  • edit in Cargo.lock at line 454
    [3.17770]
    [3.17770]
    name = "http-range-header"
    version = "0.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
    [[package]]
  • replacement in Cargo.lock at line 461
    [3.17788][3.17788:17806]()
    version = "1.4.0"
    [3.17788]
    [3.17806]
    version = "1.7.1"
  • replacement in Cargo.lock at line 463
    [3.17871][3.17871:17949]()
    checksum = "4a1ce40d6fc9764887c2fdc7305c3dcc429ba11ff981c1509416afd5697e4437"
    [3.17871]
    [3.17949]
    checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
  • replacement in Cargo.lock at line 479
    [3.18362][3.18362:18381]()
    version = "0.14.7"
    [3.18362]
    [3.18381]
    version = "0.14.19"
  • replacement in Cargo.lock at line 481
    [3.18446][3.18446:18524]()
    checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54"
    [3.18446]
    [3.18524]
    checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
  • replacement in Cargo.lock at line 493
    [3.18670][3.18670:18686]()
    "pin-project",
    [3.18670]
    [3.18686]
    "pin-project-lite",
  • edit in Cargo.lock at line 502
    [3.18762]
    [3.18762]
    name = "hyper-timeout"
    version = "0.4.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
    dependencies = [
    "hyper",
    "pin-project-lite",
    "tokio",
    "tokio-io-timeout",
    ]
    [[package]]
  • replacement in Cargo.lock at line 515
    [3.18780][3.18780:18798]()
    version = "1.6.2"
    [3.18780]
    [3.18798]
    version = "1.9.1"
  • replacement in Cargo.lock at line 517
    [3.18863][3.18863:18941]()
    checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
    [3.18863]
    [3.18941]
    checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
  • replacement in Cargo.lock at line 534
    [3.19239][3.19239:19257]()
    version = "0.9.0"
    [3.19239]
    [3.19257]
    version = "0.10.3"
  • replacement in Cargo.lock at line 536
    [3.19322][3.19322:19400]()
    checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
    [3.19322]
    [3.19400]
    checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
  • replacement in Cargo.lock at line 543
    [3.19457][3.19457:19475]()
    version = "0.4.7"
    [3.19457]
    [3.19475]
    version = "1.0.2"
  • replacement in Cargo.lock at line 545
    [3.19540][3.19540:19618]()
    checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
    [3.19540]
    [3.19618]
    checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
  • replacement in Cargo.lock at line 555
    [3.19840][3.19840:19859]()
    version = "0.2.94"
    [3.19840]
    [3.19859]
    version = "0.2.126"
  • replacement in Cargo.lock at line 557
    [3.19924][3.19924:20002]()
    checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
    [3.19924]
    [3.20002]
    checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
  • edit in Cargo.lock at line 582
    [3.20637]
    [3.20637]
    [[package]]
    name = "matchit"
    version = "0.5.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb"
  • replacement in Cargo.lock at line 602
    [3.20918][3.20918:20936]()
    version = "2.4.0"
    [3.20918]
    [3.20936]
    version = "2.5.0"
  • replacement in Cargo.lock at line 604
    [3.21001][3.21001:21079]()
    checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
    [3.21001]
    [3.21079]
    checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
  • replacement in Cargo.lock at line 607
    [3.21092][3.21092:21124]()
    name = "mio"
    version = "0.7.11"
    [3.21092]
    [3.21124]
    name = "mime"
    version = "0.3.16"
  • replacement in Cargo.lock at line 610
    [3.21189][3.21189:21333]()
    checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956"
    dependencies = [
    "libc",
    "log",
    "miow",
    "ntapi",
    "winapi",
    ]
    [3.21189]
    [3.21333]
    checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
  • replacement in Cargo.lock at line 613
    [3.21346][3.21346:21378]()
    name = "miow"
    version = "0.3.7"
    [3.21346]
    [3.21378]
    name = "mio"
    version = "0.8.4"
  • replacement in Cargo.lock at line 616
    [3.21443][3.21443:21521]()
    checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
    [3.21443]
    [3.21521]
    checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
  • replacement in Cargo.lock at line 618
    [3.21538][3.21538:21549]()
    "winapi",
    [3.21538]
    [3.21549]
    "libc",
    "log",
    "wasi 0.11.0+wasi-snapshot-preview1",
    "windows-sys",
  • edit in Cargo.lock at line 631
    [3.21756][3.21756:21975]()
    name = "ntapi"
    version = "0.3.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
    dependencies = [
    "winapi",
    ]
    [[package]]
  • replacement in Cargo.lock at line 685
    [3.23372][3.23372:23390]()
    version = "0.5.1"
    [3.23372]
    [3.23390]
    version = "0.6.2"
  • replacement in Cargo.lock at line 687
    [3.23455][3.23455:23533]()
    checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
    [3.23455]
    [3.23533]
    checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
  • replacement in Cargo.lock at line 733
    [3.24564][3.24564:24582]()
    version = "0.2.6"
    [3.24564]
    [3.24582]
    version = "0.2.9"
  • replacement in Cargo.lock at line 735
    [3.24647][3.24647:24725]()
    checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
    [3.24647]
    [3.24725]
    checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
  • edit in Cargo.lock at line 792
    [3.25900]
    [3.25900]
    [[package]]
    name = "prettyplease"
    version = "0.1.15"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9e1516508b396cefe095485fdce673007422f5e48e82934b7b423dc26aa5e6a4"
    dependencies = [
    "proc-macro2",
    "syn",
    ]
  • replacement in Cargo.lock at line 817
    [3.26335][3.26335:26354]()
    version = "1.0.26"
    [3.26335]
    [3.26354]
    version = "1.0.40"
  • replacement in Cargo.lock at line 819
    [3.26419][3.26419:26497]()
    checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
    [3.26419]
    [3.26497]
    checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
  • replacement in Cargo.lock at line 821
    [3.26514][3.26514:26530]()
    "unicode-xid",
    [3.26514]
    [3.26530]
    "unicode-ident",
  • replacement in Cargo.lock at line 826
    [3.26560][3.26560:26578]()
    version = "0.7.0"
    [3.26560]
    [3.26578]
    version = "0.10.4"
  • replacement in Cargo.lock at line 828
    [3.26643][3.26643:26721]()
    checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2"
    [3.26643]
    [3.26721]
    checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
  • replacement in Cargo.lock at line 836
    [3.26801][3.26801:26819]()
    version = "0.7.0"
    [3.26801]
    [3.26819]
    version = "0.10.4"
  • replacement in Cargo.lock at line 838
    [3.26884][3.26884:26962]()
    checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3"
    [3.26884]
    [3.26962]
    checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab"
  • edit in Cargo.lock at line 841
    [3.26989]
    [3.26989]
    "cfg-if",
    "cmake",
  • edit in Cargo.lock at line 845
    [3.27012]
    [3.27012]
    "lazy_static",
  • edit in Cargo.lock at line 851
    [3.27072]
    [3.27072]
    "regex",
  • replacement in Cargo.lock at line 858
    [3.27132][3.27132:27150]()
    version = "0.7.0"
    [3.27132]
    [3.27150]
    version = "0.10.1"
  • replacement in Cargo.lock at line 860
    [3.27215][3.27215:27293]()
    checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4"
    [3.27215]
    [3.27293]
    checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
  • replacement in Cargo.lock at line 871
    [3.27405][3.27405:27423]()
    version = "0.7.0"
    [3.27405]
    [3.27423]
    version = "0.10.1"
  • replacement in Cargo.lock at line 873
    [3.27488][3.27488:27566]()
    checksum = "b518d7cdd93dab1d1122cf07fa9a60771836c668dde9d9e2a139f957f0d9f1bb"
    [3.27488]
    [3.27566]
    checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68"
  • replacement in Cargo.lock at line 939
    [3.29037][3.29037:29055]()
    version = "1.5.3"
    [3.29037]
    [3.29055]
    version = "1.5.6"
  • replacement in Cargo.lock at line 941
    [3.29120][3.29120:29198]()
    checksum = "ce5f1ceb7f74abbce32601642fcf8e8508a8a8991e0621c7d750295b9095702b"
    [3.29120]
    [3.29198]
    checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
  • replacement in Cargo.lock at line 950
    [3.29297][3.29297:29316]()
    version = "0.6.25"
    [3.29297]
    [3.29316]
    version = "0.6.26"
  • replacement in Cargo.lock at line 952
    [3.29381][3.29381:29459]()
    checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
    [3.29381]
    [3.29459]
    checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
  • edit in Cargo.lock at line 968
    [3.29881]
    [3.29881]
    [[package]]
    name = "serde"
    version = "1.0.138"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
  • replacement in Cargo.lock at line 1017
    [3.30995][3.30995:31013]()
    version = "0.4.0"
    [3.30995]
    [3.31013]
    version = "0.4.4"
  • replacement in Cargo.lock at line 1019
    [3.31078][3.31078:31156]()
    checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2"
    [3.31078]
    [3.31156]
    checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
  • replacement in Cargo.lock at line 1049
    [3.31857][3.31857:31876]()
    version = "1.0.72"
    [3.31857]
    [3.31876]
    version = "1.0.98"
  • replacement in Cargo.lock at line 1051
    [3.31941][3.31941:32019]()
    checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82"
    [3.31941]
    [3.32019]
    checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
  • replacement in Cargo.lock at line 1055
    [3.32062][3.32062:32078]()
    "unicode-xid",
    [3.32062]
    [3.32078]
    "unicode-ident",
  • edit in Cargo.lock at line 1059
    [3.32093]
    [3.32093]
    name = "sync_wrapper"
    version = "0.1.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
    [[package]]
  • replacement in Cargo.lock at line 1113
    [3.33281][3.348:366]()
    version = "1.6.1"
    [3.33281]
    [3.33299]
    version = "1.19.2"
  • replacement in Cargo.lock at line 1115
    [3.33364][3.367:445]()
    checksum = "0a38d31d7831c6ed7aad00aa4c12d9375fd225a6dd77da1d25b707346319a975"
    [3.33364]
    [3.33442]
    checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
  • edit in Cargo.lock at line 1117
    [3.33459][3.33459:33471]()
    "autocfg",
  • edit in Cargo.lock at line 1125
    [3.33582]
    [3.33582]
    "socket2",
  • edit in Cargo.lock at line 1128
    [3.33610]
    [3.33610]
    ]
    [[package]]
    name = "tokio-io-timeout"
    version = "1.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
    dependencies = [
    "pin-project-lite",
    "tokio",
  • replacement in Cargo.lock at line 1142
    [3.33647][3.33647:33665]()
    version = "1.1.0"
    [3.33647]
    [3.33665]
    version = "1.8.0"
  • replacement in Cargo.lock at line 1144
    [3.33730][3.33730:33808]()
    checksum = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57"
    [3.33730]
    [3.33808]
    checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
  • replacement in Cargo.lock at line 1171
    [3.34287][3.34287:34302]()
    "tokio-util",
    [3.34287]
    [3.34302]
    "tokio-util 0.6.6",
  • replacement in Cargo.lock at line 1176
    [3.34339][3.34339:34357]()
    version = "0.1.5"
    [3.34339]
    [3.34357]
    version = "0.1.9"
  • replacement in Cargo.lock at line 1178
    [3.34422][3.34422:34500]()
    checksum = "e177a5d8c3bf36de9ebe6d58537d8879e964332f93fb3339e43f618c81361af0"
    [3.34422]
    [3.34500]
    checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
  • edit in Cargo.lock at line 1200
    [3.34876]
    [3.34876]
    name = "tokio-util"
    version = "0.7.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
    dependencies = [
    "bytes",
    "futures-core",
    "futures-sink",
    "pin-project-lite",
    "tokio",
    "tracing",
    ]
    [[package]]
  • replacement in Cargo.lock at line 1215
    [3.34891][3.34891:34909]()
    version = "0.4.3"
    [3.34891]
    [3.34909]
    version = "0.7.2"
  • replacement in Cargo.lock at line 1217
    [3.34974][3.34974:35052]()
    checksum = "2ac42cd97ac6bd2339af5bcabf105540e21e45636ec6fa6aae5e85d44db31be0"
    [3.34974]
    [3.35052]
    checksum = "5be9d60db39854b30b835107500cf0aca0b0d14d6e1c3de124217c23a29c2ddb"
  • edit in Cargo.lock at line 1221
    [3.35102]
    [3.35102]
    "axum",
  • edit in Cargo.lock at line 1230
    [3.35197]
    [3.35197]
    "hyper-timeout",
  • replacement in Cargo.lock at line 1237
    [3.35288][3.35288:35303]()
    "tokio-util",
    [3.35288]
    [3.35303]
    "tokio-util 0.7.3",
  • edit in Cargo.lock at line 1239
    [3.35313]
    [3.35313]
    "tower-layer",
  • replacement in Cargo.lock at line 1247
    [3.35399][3.35399:35417]()
    version = "0.4.2"
    [3.35399]
    [3.35417]
    version = "0.7.2"
  • replacement in Cargo.lock at line 1249
    [3.35482][3.35482:35560]()
    checksum = "c695de27302f4697191dda1c7178131a8cb805463dda02864acb80fe1322fdcf"
    [3.35482]
    [3.35560]
    checksum = "d9263bf4c9bfaae7317c1c2faf7f18491d2fe476f70c414b73bf5d445b00ffa1"
  • edit in Cargo.lock at line 1251
    [3.35577]
    [3.35577]
    "prettyplease",
  • replacement in Cargo.lock at line 1260
    [3.35657][3.35657:35675]()
    version = "0.4.7"
    [3.35657]
    [3.35675]
    version = "0.4.13"
  • replacement in Cargo.lock at line 1262
    [3.35740][3.35740:35818]()
    checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687"
    [3.35740]
    [3.35818]
    checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
  • edit in Cargo.lock at line 1268
    [3.35898]
    [3.35898]
    "pin-project-lite",
  • replacement in Cargo.lock at line 1272
    [3.35926][3.35926:35958]()
    "tokio-stream",
    "tokio-util",
    [3.35926]
    [3.35958]
    "tokio-util 0.7.3",
  • edit in Cargo.lock at line 1279
    [3.36019]
    [3.36019]
    name = "tower-http"
    version = "0.3.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba"
    dependencies = [
    "bitflags",
    "bytes",
    "futures-core",
    "futures-util",
    "http",
    "http-body",
    "http-range-header",
    "pin-project-lite",
    "tower",
    "tower-layer",
    "tower-service",
    ]
    [[package]]
  • edit in Cargo.lock at line 1374
    [3.38047]
    [3.38047]
    name = "unicode-ident"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
    [[package]]
  • edit in Cargo.lock at line 1387
    [3.38271][3.38271:38475]()
    [[package]]
    name = "unicode-segmentation"
    version = "1.7.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
  • edit in Cargo.lock at line 1393
    [3.38672][3.38672:38867]()
    [[package]]
    name = "unicode-xid"
    version = "0.2.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
  • edit in Cargo.lock at line 1423
    [3.39708]
    [3.39708]
    name = "wasi"
    version = "0.11.0+wasi-snapshot-preview1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
    [[package]]
  • edit in Cargo.lock at line 1468
    [3.40843]
    [[package]]
    name = "windows-sys"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
    dependencies = [
    "windows_aarch64_msvc",
    "windows_i686_gnu",
    "windows_i686_msvc",
    "windows_x86_64_gnu",
    "windows_x86_64_msvc",
    ]
    [[package]]
    name = "windows_aarch64_msvc"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
    [[package]]
    name = "windows_i686_gnu"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
    [[package]]
    name = "windows_i686_msvc"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
    [[package]]
    name = "windows_x86_64_gnu"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
    [[package]]
    name = "windows_x86_64_msvc"
    version = "0.36.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"