From: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH proxmox-offline-mirror 1/2] fix #4259: mirror: add ignore-errors option
Date: Fri, 23 Sep 2022 12:33:51 +0200 [thread overview]
Message-ID: <20220923103352.569770-1-f.gruenbichler@proxmox.com> (raw)
to make fetching errors from broken repositories non-fatal.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
based on top of "extend/add commands" series from
20220921081242.1139249-1-f.gruenbichler@proxmox.com
src/bin/proxmox-offline-mirror.rs | 2 ++
src/bin/proxmox_offline_mirror_cmds/config.rs | 3 +++
src/config.rs | 8 ++++++++
src/mirror.rs | 19 ++++++++++++++++---
4 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/src/bin/proxmox-offline-mirror.rs b/src/bin/proxmox-offline-mirror.rs
index 0a6e77e..222b561 100644
--- a/src/bin/proxmox-offline-mirror.rs
+++ b/src/bin/proxmox-offline-mirror.rs
@@ -386,6 +386,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
sync,
base_dir: base_dir.clone(),
use_subscription: None,
+ ignore_errors: false,
});
}
}
@@ -399,6 +400,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
sync,
base_dir,
use_subscription,
+ ignore_errors: false,
};
configs.push(main_config);
diff --git a/src/bin/proxmox_offline_mirror_cmds/config.rs b/src/bin/proxmox_offline_mirror_cmds/config.rs
index b48a708..5ebf6d5 100644
--- a/src/bin/proxmox_offline_mirror_cmds/config.rs
+++ b/src/bin/proxmox_offline_mirror_cmds/config.rs
@@ -262,6 +262,9 @@ pub fn update_mirror(
if let Some(verify) = update.verify {
data.verify = verify
}
+ if let Some(ignore_errors) = update.ignore_errors {
+ data.ignore_errors = ignore_errors
+ }
config.set_data(&id, "mirror", &data)?;
proxmox_offline_mirror::config::save_config(&config_file, &config)?;
diff --git a/src/config.rs b/src/config.rs
index 6c2f3e8..cb9a22b 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -41,6 +41,11 @@ use crate::types::{
sync: {
type: bool,
},
+ "ignore-errors": {
+ type: bool,
+ optional: true,
+ default: false,
+ },
}
)]
#[derive(Clone, Debug, Serialize, Deserialize, Updater)]
@@ -65,6 +70,9 @@ pub struct MirrorConfig {
/// Use subscription key to access (required for Proxmox Enterprise repositories).
#[serde(skip_serializing_if = "Option::is_none")]
pub use_subscription: Option<ProductType>,
+ /// Whether to downgrade download errors to warnings
+ #[serde(default)]
+ pub ignore_errors: bool,
}
#[api(
diff --git a/src/mirror.rs b/src/mirror.rs
index 5bf9219..e655847 100644
--- a/src/mirror.rs
+++ b/src/mirror.rs
@@ -46,6 +46,7 @@ struct ParsedMirrorConfig {
pub sync: bool,
pub auth: Option<String>,
pub client: Client,
+ pub ignore_errors: bool,
}
impl TryInto<ParsedMirrorConfig> for MirrorConfig {
@@ -74,6 +75,7 @@ impl TryInto<ParsedMirrorConfig> for MirrorConfig {
sync: self.sync,
auth: None,
client,
+ ignore_errors: self.ignore_errors,
})
}
}
@@ -691,7 +693,7 @@ pub fn create_snapshot(
let mut full_path = PathBuf::from(prefix);
full_path.push(&package.file);
- let res = fetch_plain_file(
+ match fetch_plain_file(
&config,
&url,
&full_path,
@@ -699,8 +701,19 @@ pub fn create_snapshot(
&package.checksums,
false,
dry_run,
- )?;
- fetch_progress.update(&res);
+ ) {
+ Ok(res) => fetch_progress.update(&res),
+ Err(err) if config.ignore_errors => {
+ let msg = format!(
+ "{}: failed to fetch package '{}' - {}",
+ basename, package.file, err,
+ );
+ eprintln!("{msg}");
+ }
+ res => {
+ res?;
+ }
+ }
}
if fetch_progress.file_count() % (max(total_files / 100, 1)) == 0 {
--
2.30.2
next reply other threads:[~2022-09-23 10:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-23 10:33 Fabian Grünbichler [this message]
2022-09-23 10:33 ` [pve-devel] [PATCH proxmox-offline-mirror 2/2] mirror: collect and summarize warnings Fabian Grünbichler
2022-09-23 12:30 ` [pve-devel] applied: [PATCH proxmox-offline-mirror 1/2] fix #4259: mirror: add ignore-errors option Wolfgang Bumiller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220923103352.569770-1-f.gruenbichler@proxmox.com \
--to=f.gruenbichler@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox