From 3a4bcd68029106d5c7510c136bd7c923b4a5bf44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20DOUIN?= Date: Sat, 28 Sep 2024 16:12:11 +0200 Subject: [PATCH] make imap clients pool more reliable --- Cargo.lock | 68 +++++++++++++++++------------------ Cargo.toml | 2 +- src/account/command/doctor.rs | 23 ++++++------ src/account/command/sync.rs | 48 ++++++------------------- src/account/config.rs | 6 ---- src/account/wizard.rs | 1 - 6 files changed, 57 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea757d7..d17e078 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -256,7 +256,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -291,7 +291,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -302,9 +302,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -396,7 +396,7 @@ checksum = "e0af050e27e5d57aa14975f97fe47a134c46a390f91819f23a625319a7111bfa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -439,9 +439,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.21" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "shlex", ] @@ -530,7 +530,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -808,7 +808,7 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "email-lib" version = "0.25.0" -source = "git+https://github.com/pimalaya/core#b20d7de07775d093e63639bc11acd0ad42152c5c" +source = "git+https://github.com/pimalaya/core#119975060c78b7632d1760a823428bf6ca07bb03" dependencies = [ "advisory-lock", "async-trait", @@ -858,7 +858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f24a09fd651027f8764f8a12c12358715cb9bab622ab3125ede3dd6ae047c95" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -891,7 +891,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -912,7 +912,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1129,7 +1129,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1796,7 +1796,7 @@ dependencies = [ [[package]] name = "keyring-lib" version = "0.4.3" -source = "git+https://github.com/pimalaya/core#b20d7de07775d093e63639bc11acd0ad42152c5c" +source = "git+https://github.com/pimalaya/core#119975060c78b7632d1760a823428bf6ca07bb03" dependencies = [ "keyring", "log", @@ -2037,9 +2037,9 @@ dependencies = [ [[package]] name = "nanohtml2text" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "999681fe3c0524336e98ece1c25ee4278607f25cc1e361ad0f9201c8bf56dc2c" +checksum = "9d4bdc3645754d2da280343bd8f1eaa9acf56c4ed75b540c98c898b171a3d867" [[package]] name = "neverest" @@ -2212,7 +2212,7 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "oauth-lib" version = "0.1.1" -source = "git+https://github.com/pimalaya/core#b20d7de07775d093e63639bc11acd0ad42152c5c" +source = "git+https://github.com/pimalaya/core#119975060c78b7632d1760a823428bf6ca07bb03" dependencies = [ "log", "oauth2", @@ -2377,7 +2377,7 @@ dependencies = [ [[package]] name = "pimalaya-tui" version = "0.1.0" -source = "git+https://github.com/pimalaya/tui#035a80ec5d18a37d42bcafd97e94f15c50f37944" +source = "git+https://github.com/pimalaya/tui#b40ca9d9e161b91e9efcb762fa05f06e3fe46f63" dependencies = [ "clap", "color-eyre", @@ -2456,9 +2456,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d30538d42559de6b034bc76fd6dd4c38961b1ee5c6c56e3808c50128fdbc22ce" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "ppv-lite86" @@ -2515,7 +2515,7 @@ dependencies = [ [[package]] name = "process-lib" version = "0.4.2" -source = "git+https://github.com/pimalaya/core#b20d7de07775d093e63639bc11acd0ad42152c5c" +source = "git+https://github.com/pimalaya/core#119975060c78b7632d1760a823428bf6ca07bb03" dependencies = [ "log", "serde", @@ -2835,9 +2835,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" [[package]] name = "rustls-webpki" @@ -2903,7 +2903,7 @@ dependencies = [ [[package]] name = "secret-lib" version = "0.4.6" -source = "git+https://github.com/pimalaya/core#b20d7de07775d093e63639bc11acd0ad42152c5c" +source = "git+https://github.com/pimalaya/core#119975060c78b7632d1760a823428bf6ca07bb03" dependencies = [ "keyring-lib", "log", @@ -2992,7 +2992,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3025,7 +3025,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3216,9 +3216,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -3292,7 +3292,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3346,7 +3346,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3453,7 +3453,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3681,7 +3681,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -3715,7 +3715,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4059,7 +4059,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ada0756..a9b42fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ clap = { version = "4.4", features = ["derive", "wrap_help"] } clap_complete = "4.4" clap_mangen = "0.2" color-eyre = "0.6" -email-lib = { version = "=0.25.0", default-features = false, features = ["pool", "sync", "derive"] } +email-lib = { version = "=0.25.0", default-features = false, features = ["sync", "derive"] } oauth-lib = { version = "=0.1.1", optional = true } once_cell = "1.16" pimalaya-tui = { version = "=0.1.0", default-features = false, features = ["path", "cli", "config", "tracing"] } diff --git a/src/account/command/doctor.rs b/src/account/command/doctor.rs index d3cea70..69172bb 100644 --- a/src/account/command/doctor.rs +++ b/src/account/command/doctor.rs @@ -7,13 +7,13 @@ use std::sync::Arc; use clap::Parser; use color_eyre::eyre::{bail, Result}; -use email::backend::{Backend, BackendBuilder}; +use email::backend::BackendBuilder; #[cfg(feature = "imap")] -use email::imap::{ImapContextBuilder, ImapContextSync}; +use email::imap::ImapContextBuilder; #[cfg(feature = "maildir")] -use email::maildir::{MaildirContextBuilder, MaildirContextSync}; +use email::maildir::MaildirContextBuilder; #[cfg(feature = "notmuch")] -use email::notmuch::{NotmuchContextBuilder, NotmuchContextSync}; +use email::notmuch::NotmuchContextBuilder; use pimalaya_tui::cli::printer::Printer; use tracing::{info, instrument}; @@ -56,9 +56,10 @@ impl DoctorAccountCommand { #[cfg(feature = "imap")] BackendConfig::Imap(imap_config) => { printer.log("Checking left IMAP integrity…")?; - let ctx = ImapContextBuilder::new(left_config.clone(), Arc::new(imap_config)); + let ctx = ImapContextBuilder::new(left_config.clone(), Arc::new(imap_config)) + .with_pool_size(1); BackendBuilder::new(left_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } #[cfg(feature = "maildir")] @@ -66,7 +67,7 @@ impl DoctorAccountCommand { printer.log("Checking left Maildir integrity…")?; let ctx = MaildirContextBuilder::new(left_config.clone(), Arc::new(maildir_config)); BackendBuilder::new(left_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } #[cfg(feature = "notmuch")] @@ -74,7 +75,7 @@ impl DoctorAccountCommand { printer.log("Checking left Notmuch integrity…")?; let ctx = NotmuchContextBuilder::new(left_config.clone(), Arc::new(notmuch_config)); BackendBuilder::new(left_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } }; @@ -93,7 +94,7 @@ impl DoctorAccountCommand { printer.log("Checking right IMAP integrity…")?; let ctx = ImapContextBuilder::new(right_config.clone(), Arc::new(imap_config)); BackendBuilder::new(right_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } #[cfg(feature = "maildir")] @@ -102,7 +103,7 @@ impl DoctorAccountCommand { let ctx = MaildirContextBuilder::new(right_config.clone(), Arc::new(maildir_config)); BackendBuilder::new(right_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } #[cfg(feature = "notmuch")] @@ -111,7 +112,7 @@ impl DoctorAccountCommand { let ctx = NotmuchContextBuilder::new(right_config.clone(), Arc::new(notmuch_config)); BackendBuilder::new(right_config.clone(), ctx) - .check_up::>() + .check_up() .await?; } }; diff --git a/src/account/command/sync.rs b/src/account/command/sync.rs index b427be6..3d6a643 100644 --- a/src/account/command/sync.rs +++ b/src/account/command/sync.rs @@ -119,45 +119,24 @@ impl SynchronizeAccountCommand { .with_prebuilt_credentials() .await?; let left = BackendBuilder::new(left_config.clone(), left_ctx); - self.pre_sync( - printer, - name.as_str(), - config.pool_size, - left, - right_config, - right_backend, - ) - .await + self.pre_sync(printer, name.as_str(), left, right_config, right_backend) + .await } #[cfg(feature = "maildir")] BackendConfig::Maildir(maildir_config) => { let left_ctx = MaildirContextBuilder::new(left_config.clone(), Arc::new(maildir_config)); let left = BackendBuilder::new(left_config.clone(), left_ctx); - self.pre_sync( - printer, - name.as_str(), - config.pool_size, - left, - right_config, - right_backend, - ) - .await + self.pre_sync(printer, name.as_str(), left, right_config, right_backend) + .await } #[cfg(feature = "notmuch")] BackendConfig::Notmuch(notmuch_config) => { let left_ctx = NotmuchContextBuilder::new(left_config.clone(), Arc::new(notmuch_config)); let left = BackendBuilder::new(left_config.clone(), left_ctx); - self.pre_sync( - printer, - name.as_str(), - config.pool_size, - left, - right_config, - right_backend, - ) - .await + self.pre_sync(printer, name.as_str(), left, right_config, right_backend) + .await } } } @@ -166,7 +145,6 @@ impl SynchronizeAccountCommand { self, printer: &mut impl Printer, account_name: &str, - pool_size: Option, left: BackendBuilder, right_config: Arc, right_backend: BackendConfig, @@ -182,24 +160,21 @@ impl SynchronizeAccountCommand { .with_prebuilt_credentials() .await?; let right = BackendBuilder::new(right_config.clone(), right_ctx); - self.sync(printer, account_name, pool_size, left, right) - .await + self.sync(printer, account_name, left, right).await } #[cfg(feature = "maildir")] BackendConfig::Maildir(maildir_config) => { let right_ctx = MaildirContextBuilder::new(right_config.clone(), Arc::new(maildir_config)); let right = BackendBuilder::new(right_config.clone(), right_ctx); - self.sync(printer, account_name, pool_size, left, right) - .await + self.sync(printer, account_name, left, right).await } #[cfg(feature = "notmuch")] BackendConfig::Notmuch(notmuch_config) => { let right_ctx = NotmuchContextBuilder::new(right_config.clone(), Arc::new(notmuch_config)); let right = BackendBuilder::new(right_config.clone(), right_ctx); - self.sync(printer, account_name, pool_size, left, right) - .await + self.sync(printer, account_name, left, right).await } } } @@ -208,7 +183,6 @@ impl SynchronizeAccountCommand { self, printer: &mut impl Printer, account_name: &str, - pool_size: Option, left: BackendBuilder, right: BackendBuilder, ) -> Result<()> { @@ -225,9 +199,7 @@ impl SynchronizeAccountCommand { None }; - let sync_builder = SyncBuilder::new(left, right) - .with_some_pool_size(pool_size) - .with_some_folder_filters(folders_filter); + let sync_builder = SyncBuilder::new(left, right).with_some_folder_filters(folders_filter); if self.dry_run { let report = sync_builder.with_dry_run(true).sync().await?; diff --git a/src/account/config.rs b/src/account/config.rs index 5028ac8..4e037a7 100644 --- a/src/account/config.rs +++ b/src/account/config.rs @@ -42,12 +42,6 @@ pub struct AccountConfig { /// that there is not implicit difference between source and /// target. Hence left and right are used instead. pub right: BackendGlobalConfig, - - /// The size of the connection pool. - /// - /// Mostly used by the IMAP backend, but may be used by other - /// backends in the future. - pub pool_size: Option, } impl AccountConfig { diff --git a/src/account/wizard.rs b/src/account/wizard.rs index ec4bd3e..da815e2 100644 --- a/src/account/wizard.rs +++ b/src/account/wizard.rs @@ -14,7 +14,6 @@ pub async fn configure() -> Result<(String, AccountConfig)> { envelope: None, left: backend::wizard::configure(&name, BackendSource::Left).await?, right: backend::wizard::configure(&name, BackendSource::Right).await?, - pool_size: None, }; Ok((name, config))