[pve-devel] [PATCH storage 2/5] move check for existing clones into own method
Dietmar Maurer
dietmar at proxmox.com
Wed Sep 14 17:16:16 CEST 2016
I am a bit unhappy with the function name:
> +sub volume_is_referenced_base {
> + my ($cfg, $volid) = @_;
> +
> + my ($storeid, $volname) = parse_volume_id($volid);
> + my $scfg = storage_config($cfg, $storeid);
> + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
> +
> + my ($vtype, $name, $vmid, undef, undef, $isBase, undef) =
> + $plugin->parse_volname($volname);
> +
> + if ($isBase) {
return 1;
The following test is something completely different, and test
if a base volume is used.
> + my $vollist = $plugin->list_images($storeid, $scfg);
> + foreach my $info (@$vollist) {
> + my (undef, $tmpvolname) = parse_volume_id($info->{volid});
> + my $basename = undef;
> + my $basevmid = undef;
> +
> + eval{
> + (undef, undef, undef, $basename, $basevmid) =
> + $plugin->parse_volname($tmpvolname);
> + };
> +
> + if ($basename && defined($basevmid) && $basevmid == $vmid && $basename
> eq $name) {
> + return $tmpvolname;
> + }
> + }
> + }
> + return undef;
> +}
> +
> # try to map a filesystem path to a volume identifier
> sub path_to_volume_id {
> my ($cfg, $path) = @_;
> @@ -673,26 +703,12 @@ sub vdisk_free {
> # lock shared storage
> $plugin->cluster_lock_storage($storeid, $scfg->{shared}, undef, sub {
>
> - my ($vtype, $name, $vmid, undef, undef, $isBase, $format) =
> + my $clonevolname = volume_is_referenced_base($cfg, $volid);
> + die "base volume '$volname' is still in use (by '$clonevolname')\n"
> + if $clonevolname;
> +
> + my (undef, undef, undef, undef, undef, $isBase, $format) =
> $plugin->parse_volname($volname);
> - if ($isBase) {
> - my $vollist = $plugin->list_images($storeid, $scfg);
> - foreach my $info (@$vollist) {
> - my (undef, $tmpvolname) = parse_volume_id($info->{volid});
> - my $basename = undef;
> - my $basevmid = undef;
> -
> - eval{
> - (undef, undef, undef, $basename, $basevmid) =
> - $plugin->parse_volname($tmpvolname);
> - };
> -
> - if ($basename && defined($basevmid) && $basevmid == $vmid && $basename eq
> $name) {
> - die "base volume '$volname' is still in use " .
> - "(used by '$tmpvolname')\n";
> - }
> - }
> - }
> $cleanup_worker = $plugin->free_image($storeid, $scfg, $volname, $isBase,
> $format);
> });
>
> --
> 2.1.4
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list