]> git.proxmox.com Git - pve-storage.git/blobdiff - PVE/Storage/RBDPlugin.pm
nexenta: retrieve parent of a clone
[pve-storage.git] / PVE / Storage / RBDPlugin.pm
index b05d299f6653509010440835ba290905660ddbc1..cb7a8238afb31f340915c25f7b14fc7062813726 100644 (file)
@@ -56,7 +56,7 @@ sub rbd_ls {
 
            $list->{$scfg->{pool}}->{$image} = {
                name => $image,
-               size => 0,
+               size => rbd_volume_size($scfg, $storeid, $image),
                vmid => $owner
            };
        }
@@ -72,6 +72,26 @@ sub rbd_ls {
     return $list;
 }
 
+sub rbd_volume_size {
+    my ($scfg, $storeid, $volname) = @_;
+
+    my $cmd = &$rbd_cmd($scfg, $storeid, 'info', $volname);
+    my $size = undef;
+    my $parser = sub {
+       my $line = shift;
+
+       if ($line =~ m/size (\d+) MB in (\d+) objects/) {
+           $size = $1;
+       }
+    };
+
+    run_command($cmd, errmsg => "rbd error", errfunc => sub {}, outfunc => $parser);
+
+    $size = $size*1024*1024 if $size;
+
+    return $size;
+}
+
 sub addslashes {
     my $text = shift;
     $text =~ s/;/\\;/g;
@@ -194,7 +214,10 @@ sub alloc_image {
 sub free_image {
     my ($class, $storeid, $scfg, $volname) = @_;
 
-    my $cmd = &$rbd_cmd($scfg, $storeid, 'rm', $volname);
+    my $cmd = &$rbd_cmd($scfg, $storeid, 'snap', 'purge',  $volname);
+    run_command($cmd, errmsg => "rbd snap purge $volname' error", outfunc => sub {}, errfunc => sub {});
+
+    $cmd = &$rbd_cmd($scfg, $storeid, 'rm', $volname);
     run_command($cmd, errmsg => "rbd rm $volname' error", outfunc => sub {}, errfunc => sub {});
 
     return undef;
@@ -282,21 +305,7 @@ sub deactivate_volume {
 sub volume_size_info {
     my ($class, $scfg, $storeid, $volname, $timeout) = @_;
 
-    my $cmd = &$rbd_cmd($scfg, $storeid, 'info', $volname);
-    my $size = undef;
-    my $parser = sub {
-        my $line = shift;
-
-        if ($line =~ m/size (\d+) MB in (\d+) objects/) {
-            $size = $1;
-        }
-    };
-
-    run_command($cmd, errmsg => "rbd error", errfunc => sub {}, outfunc => $parser);
-
-    $size = $size*1024*1024 if $size;
-
-    return $size;
+    return rbd_volume_size($scfg, $storeid, $volname);
 }
 
 sub volume_resize {