[pve-devel] applied: [PATCH v2 storage] Use a common interface for find_free_diskname
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Dec 12 13:02:06 CET 2019
On 12/11/19 10:25 AM, Fabian Ebner wrote:
> We can use 'list_images' to get the desired volume IDs in
> 'find_free_diskname' for most plugins. For the two LVM plugins, 'list_images'
> potentially skips untagged volumes, so we keep the custom version. For the
> RBD plugin, 'list_images' is much more costly than the custom version, so we
> keep the custom version.
>
> Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
> ---
>
> Changes from v1:
> * Keep the custom versions in LVMPlugin and RBDPlugin
> * Do not change the interface for get_next_vm_diskname
>
> Thanks to Fabian for the suggestions!
>
> PVE/Storage/GlusterfsPlugin.pm | 15 ++-------------
> PVE/Storage/LVMPlugin.pm | 10 +++++++---
> PVE/Storage/LvmThinPlugin.pm | 8 ++------
> PVE/Storage/Plugin.pm | 19 ++++++++++---------
> PVE/Storage/RBDPlugin.pm | 10 +++++-----
> PVE/Storage/ZFSPlugin.pm | 2 +-
> PVE/Storage/ZFSPoolPlugin.pm | 16 +++-------------
> 7 files changed, 30 insertions(+), 50 deletions(-)
>
applied, thanks! Did a small refactoring as follow-up (see below)
> diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
> index d0f1df6..73f80af 100644
> --- a/PVE/Storage/Plugin.pm
> +++ b/PVE/Storage/Plugin.pm
> @@ -572,18 +572,19 @@ sub get_next_vm_diskname {
> die "unable to allocate an image name for VM $vmid in storage '$storeid'\n"
> }
>
> -my $find_free_diskname = sub {
> - my ($imgdir, $vmid, $fmt, $scfg) = @_;
> +sub find_free_diskname {
> + my ($class, $storeid, $scfg, $vmid, $fmt, $add_fmt_suffix) = @_;
> +
> + my $disks = $class->list_images($storeid, $scfg, $vmid);
>
> my $disk_list = [];
>
> - if (defined(my $dh = IO::Dir->new($imgdir))) {
> - @$disk_list = $dh->read();
> - $dh->close();
> + foreach my $disk (@{$disks}) {
> + push @{$disk_list}, $disk->{volid};
> }
for above I followed up with:
diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
index 73f80af..353632c 100644
--- a/PVE/Storage/Plugin.pm
+++ b/PVE/Storage/Plugin.pm
@@ -577,11 +577,7 @@ sub find_free_diskname {
my $disks = $class->list_images($storeid, $scfg, $vmid);
- my $disk_list = [];
-
- foreach my $disk (@{$disks}) {
- push @{$disk_list}, $disk->{volid};
- }
+ my $disk_list = [ map { $_->{volid} } @$disks ];
return get_next_vm_diskname($disk_list, $storeid, $vmid, $fmt, $scfg, $add_fmt_suffix);
}
More information about the pve-devel
mailing list