all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com, Aaron Lauterer <a.lauterer@proxmox.com>
Subject: Re: [pve-devel] [PATCH v2 storage 1/9] storage: add new find_free_volname
Date: Thu, 12 Aug 2021 14:50:59 +0200	[thread overview]
Message-ID: <c12e7c0a-d5b4-e152-dcd0-9ab925afa6d9@proxmox.com> (raw)
In-Reply-To: <20210806134647.632054-2-a.lauterer@proxmox.com>

Am 06.08.21 um 15:46 schrieb Aaron Lauterer:
> This new method exposes the functionality to request a new, not yet
> used, volname for a storage.
> 
> The default implementation will return the result from
> 'find_free_diskname' prefixed with "<VMID>/" if $scfg->{path} exists.
> Otherwise it will only return the result from 'find_free_diskname'.
> 
> If the format suffix is added also depends on the existence of
> $scfg->{path}.
> 
> $scfg->{path} will be present for directory based storage types.
> 
> Should a storage need to return a different volname, it needs to override
> the 'find_free_volname' method.
> 
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
> 
> v1 -> v2:
> * drop exposed 'find_free_diskname' in favor of 'find_free_volname'
> * dropped 'wants_fmt_suffix' as 'find_free_volname' now decides that itself
> 
> rfc -> v1:
> dropped $add_fmt_suffix parameter and added the "wants_fmt_suffix"
> helper method in each plugin.
> 
>   PVE/Storage.pm        |  9 +++++++++
>   PVE/Storage/Plugin.pm | 11 +++++++++++
>   2 files changed, 20 insertions(+)
> 
> diff --git a/PVE/Storage.pm b/PVE/Storage.pm
> index c04b5a2..c38fe7b 100755
> --- a/PVE/Storage.pm
> +++ b/PVE/Storage.pm
> @@ -203,6 +203,15 @@ sub storage_can_replicate {
>       return $plugin->storage_can_replicate($scfg, $storeid, $format);
>   }
>   
> +sub find_free_volname {
> +    my ($cfg, $storeid, $vmid, $fmt) = @_;
> +
> +    my $scfg = storage_config($cfg, $storeid);
> +    my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
> +
> +    return $plugin->find_free_volname($storeid, $scfg, $vmid, $fmt);
> +}
> +
>   sub storage_ids {
>       my ($cfg) = @_;
>   
> giff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
> index b1865cb..e043329 100644
> --- a/PVE/Storage/Plugin.pm
> +++ b/PVE/Storage/Plugin.pm
> @@ -685,6 +685,17 @@ sub find_free_diskname {
>       return get_next_vm_diskname($disk_list, $storeid, $vmid, $fmt, $scfg, $add_fmt_suffix);
>   }
>   
> +sub find_free_volname {
> +    my ($class, $storeid, $scfg, $vmid, $fmt) = @_;
> +
> +    my $diskname = $class->find_free_diskname($storeid, $scfg, $vmid, $fmt, exists($scfg->{path}));
> +
> +    if (exists($scfg->{path})) {

More of a nit, but I don't like the usage of exists here, for two reasons:

1. The main reason: it's inconsistent with all the other checks for 
$scfg->{path} that are used throughout the file.

2. It's more likely to break. Consider some code I've made up, but 
similar code might exist somewhere in our code base:
     ...
     my $path = get_path_from_config($cfg, $storeid);
     my $scfg = {
	path => $path,
	content => $content,
	...
     };
or
     my $start = $scfg->{path}[0];
     # auto-vivication means the 'path' key now always exists (with 
undef value if it was undef before)
     if (defined($start) && $start eq '/') {
	...
     }

Using exists here makes it necessary to check that such code is not used 
for $scfg, currently and in the future.

> +	return "${vmid}/$diskname";
> +    }
> +    return $diskname;
> +}
> +
>   sub clone_image {
>       my ($class, $scfg, $storeid, $volname, $vmid, $snap) = @_;
>   
> 




  reply	other threads:[~2021-08-12 12:51 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-06 13:46 [pve-devel] [PATCH v2 storage qemu-server container 0/9] move disk or volume to other guets Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH v2 storage 1/9] storage: add new find_free_volname Aaron Lauterer
2021-08-12 12:50   ` Fabian Ebner [this message]
2021-08-13 12:46     ` Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH storage 2/9] add disk rename feature Aaron Lauterer
2021-08-12 12:51   ` Fabian Ebner
2021-08-06 13:46 ` [pve-devel] [PATCH v2 qemu-server 3/9] cli: qm: change move_disk to move-disk Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH v2 qemu-server 4/9] Drive: add valid_drive_names_with_unused Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH v2 qemu-server 5/9] api: move-disk: add move to other VM Aaron Lauterer
2021-08-13  7:41   ` Fabian Ebner
2021-08-13 15:35     ` Aaron Lauterer
2021-09-01  9:48       ` Fabian Ebner
2021-08-06 13:46 ` [pve-devel] [PATCH v2 qemu-server 6/9] api: move-disk: cleanup very long lines Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH v2 container 7/9] cli: pct: change move_volume to move-volume Aaron Lauterer
2021-08-06 13:46 ` [pve-devel] [PATCH v2 container 8/9] api: move-volume: add move to another container Aaron Lauterer
2021-08-13  8:21   ` Fabian Ebner
2021-08-06 13:46 ` [pve-devel] [PATCH v2 container 9/9] api: move-volume: cleanup very long lines Aaron Lauterer
2021-08-13  8:29 ` [pve-devel] [PATCH v2 storage qemu-server container 0/9] move disk or volume to other guets Fabian Ebner

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=c12e7c0a-d5b4-e152-dcd0-9ab925afa6d9@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=a.lauterer@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 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