]> git.proxmox.com Git - pve-storage.git/commitdiff
sheepdog : delete snapshots when deleting volume
authorAlexandre Derumier <aderumier@odiso.com>
Wed, 31 Oct 2012 11:28:37 +0000 (12:28 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 31 Oct 2012 13:06:55 +0000 (14:06 +0100)
sheepdog don't delete snapshots automatically when deleting volume

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/Storage/SheepdogPlugin.pm

index 346a2f28fc4129f1ab014949fb4755fd78cc057f..5aff89348ba8cdaf5b201193d03736f6842325a4 100644 (file)
@@ -48,6 +48,23 @@ sub sheepdog_ls {
     return $list;
 }
 
+sub sheepdog_snapshot_ls {
+    my ($scfg, $volname) = @_;
+
+    my $cmd = &$collie_cmd($scfg, 'vdi', 'list', '-r');
+
+    my $list = {};
+    run_command($cmd, outfunc => sub {
+        my $line = shift;
+        $line = trim($line);
+       if ($line =~ /s\s(\S+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\S+)\s(\d+)\s(\S+)/) {
+           $list->{$9} = 1;
+       }
+    });
+
+    return $list;
+}
+
 # Configuration
 
 
@@ -129,6 +146,12 @@ sub alloc_image {
 sub free_image {
     my ($class, $storeid, $scfg, $volname) = @_;
 
+    my $snapshots = sheepdog_snapshot_ls($scfg, $volname);
+    while (my ($snapname) = each %$snapshots) {
+       my $cmd = &$collie_cmd($scfg, 'vdi', 'delete' , '-s', $snapname, $volname);
+       run_command($cmd, errmsg => "sheepdog delete snapshot $snapname $volname' error");
+    }
+
     my $cmd = &$collie_cmd($scfg, 'vdi', 'delete' , $volname);
 
     run_command($cmd, errmsg => "sheepdog delete $volname' error");