From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox Backup Server development discussion
<pbs-devel@lists.proxmox.com>, Markus Frank <m.frank@proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup] fix #3323: dry-run for cli backup subcommand
Date: Fri, 18 Feb 2022 08:38:02 +0100 [thread overview]
Message-ID: <a92e1fbc-e039-e07d-1d18-f886f60518e3@proxmox.com> (raw)
In-Reply-To: <20220217125859.804194-1-m.frank@proxmox.com>
On 17.02.22 13:58, Markus Frank wrote:
> adds a dry-run parameter for "proxmox-backup-client backup".
> With this parameter on, it simply prints out what would be uploaded,
> instead of uploading it.
>
looks ok in general, some comments to code style, or better said, refactor
potential inline.
> Signed-off-by: Markus Frank <m.frank@proxmox.com>
> ---
> proxmox-backup-client/src/main.rs | 194 +++++++++++++++++-------------
> 1 file changed, 112 insertions(+), 82 deletions(-)
>
> diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
> index 081028f2..b992695c 100644
> --- a/proxmox-backup-client/src/main.rs
> +++ b/proxmox-backup-client/src/main.rs
> @@ -613,6 +613,11 @@ fn spawn_catalog_upload(
> description: "Verbose output.",
> optional: true,
> },
> + "dry-run": {
> + type: Boolean,
> + description: "Just show what backup would do, but do not upload anything.",
> + optional: true,
> + },
> }
> }
> )]
> @@ -633,6 +638,8 @@ async fn create_backup(
>
> let verbose = param["verbose"].as_bool().unwrap_or(false);
>
> + let dry_run = param["dry-run"].as_bool().unwrap_or(false);
> +
> let backup_time_opt = param["backup-time"].as_i64();
>
> let chunk_size_opt = param["chunk-size"].as_u64().map(|v| (v*1024) as usize);
> @@ -845,94 +852,117 @@ async fn create_backup(
> let mut catalog_result_rx = None;
>
> for (backup_type, filename, target, size) in upload_list {
> - match backup_type {
did you tried of either matching the tuple (backup_type, dry_run) or using if's in
the match arm, e.g., something like:
match backup_type {
BackupSpecificationType::CONFIG if dry_run => printdry("config file", filename),
BackupSpecificationType::LOGFILE if dry_run => printdry("log file", filename),
...
BackupSpecificationType::CONFIG => {
let upload_options = UploadOptions {
...
},
...,
}
The one with matching the tuple has the slight advantage of ensuring that we'd ensure
to always cover all possibilities, that'd be relevant e.g., if a new type gets added
to avoid it's send by mistake if one forgot to add an explicit dry run here, i.e.,
something that your current solution also avoids.
> - BackupSpecificationType::CONFIG => {
> - let upload_options = UploadOptions {
> - compress: true,
> - encrypt: crypto.mode == CryptMode::Encrypt,
> - ..UploadOptions::default()
> - };
> -
> - println!("Upload config file '{}' to '{}' as {}", filename, repo, target);
> - let stats = client
> - .upload_blob_from_file(&filename, &target, upload_options)
> - .await?;
> - manifest.add_file(target, stats.size, stats.csum, crypto.mode)?;
> - }
> - BackupSpecificationType::LOGFILE => { // fixme: remove - not needed anymore ?
> - let upload_options = UploadOptions {
> - compress: true,
> - encrypt: crypto.mode == CryptMode::Encrypt,
> - ..UploadOptions::default()
> - };
> -
> - println!("Upload log file '{}' to '{}' as {}", filename, repo, target);
> - let stats = client
> - .upload_blob_from_file(&filename, &target, upload_options)
> - .await?;
> - manifest.add_file(target, stats.size, stats.csum, crypto.mode)?;
> - }
> - BackupSpecificationType::PXAR => {
> - // start catalog upload on first use
> - if catalog.is_none() {
> - let catalog_upload_res = spawn_catalog_upload(client.clone(), crypto.mode == CryptMode::Encrypt)?;
> - catalog = Some(catalog_upload_res.catalog_writer);
> - catalog_result_rx = Some(catalog_upload_res.result);
> + if dry_run {
> + match backup_type {
> + BackupSpecificationType::CONFIG => {
> + println!("Would upload config file'{}' to '{}' as {}", filename, repo, target);
please factor above print out in a local closure/helper-fn, besides reducing repetition
it would also avoid on having inconsistencies like missing a whitespace after "file" ;-)
prev parent reply other threads:[~2022-02-18 7:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-17 12:58 Markus Frank
2022-02-18 7:38 ` Thomas Lamprecht [this message]
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=a92e1fbc-e039-e07d-1d18-f886f60518e3@proxmox.com \
--to=t.lamprecht@proxmox.com \
--cc=m.frank@proxmox.com \
--cc=pbs-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal