Avoid leaving behind orphaned images if creating the associated LU mapping fails during image allocation or cloning.
Reported-by: Christoph Heiss <c.he...@proxmox.com> Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- src/PVE/Storage/ZFSPlugin.pm | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/PVE/Storage/ZFSPlugin.pm b/src/PVE/Storage/ZFSPlugin.pm index 94cb11f..4118aa4 100644 --- a/src/PVE/Storage/ZFSPlugin.pm +++ b/src/PVE/Storage/ZFSPlugin.pm @@ -6,6 +6,7 @@ use IO::File; use POSIX; use PVE::Tools qw(run_command); use PVE::Storage::ZFSPoolPlugin; +use PVE::RESTEnvironment qw(log_warn); use PVE::RPCEnvironment; use base qw(PVE::Storage::ZFSPoolPlugin); @@ -283,8 +284,16 @@ sub clone_image { # get ZFS dataset name from PVE volname my (undef, $clonedname) = $class->parse_volname($name); - my $guid = $class->zfs_create_lu($scfg, $clonedname); - $class->zfs_add_lun_mapping_entry($scfg, $clonedname, $guid); + eval { + my $guid = $class->zfs_create_lu($scfg, $clonedname); + $class->zfs_add_lun_mapping_entry($scfg, $clonedname, $guid); + }; + if (my $err = $@) { + print "cleaning up allocated image '$clonedname' after failure to create LU mapping\n"; + eval { $class->zfs_delete_zvol($scfg, $clonedname); }; + log_warn("cleanup failed - $@") if $@; + die "error while creating LU mapping was - $err"; + } return $name; } @@ -302,9 +311,17 @@ sub alloc_image { $volname = $class->find_free_diskname($storeid, $scfg, $vmid, $fmt) if !$volname; $class->zfs_create_zvol($scfg, $volname, $size); - - my $guid = $class->zfs_create_lu($scfg, $volname); - $class->zfs_add_lun_mapping_entry($scfg, $volname, $guid); + + eval { + my $guid = $class->zfs_create_lu($scfg, $volname); + $class->zfs_add_lun_mapping_entry($scfg, $volname, $guid); + }; + if (my $err = $@) { + print "cleaning up allocated image '$volname' after failure to create LU mapping\n"; + eval { $class->zfs_delete_zvol($scfg, $volname); }; + log_warn("cleanup failed - $@") if $@; + die "error while creating LU mapping was - $err"; + } return $volname; } -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel