]> git.proxmox.com Git - pve-storage.git/blobdiff - PVE/Storage/ZFSPoolPlugin.pm
remove unused Data::Dumper usages
[pve-storage.git] / PVE / Storage / ZFSPoolPlugin.pm
index fbda2c4571f4053a4053aab8e11469071cb3f8a0..32e53aa0650a98c98e05031f0878d70a98df646d 100644 (file)
@@ -43,6 +43,7 @@ sub options {
        nodes => { optional => 1 },
        disable => { optional => 1 },
        content => { optional => 1 },
+       bwlimit => { optional => 1 },
     };
 }
 
@@ -202,7 +203,7 @@ sub alloc_image {
     
     if ($fmt eq 'raw') {
 
-       die "illegal name '$volname' - sould be 'vm-$vmid-*'\n"
+       die "illegal name '$volname' - should be 'vm-$vmid-*'\n"
            if $volname && $volname !~ m/^vm-$vmid-/;
        $volname = $class->zfs_find_free_diskname($storeid, $scfg, $vmid, $fmt) 
            if !$volname;
@@ -210,17 +211,22 @@ sub alloc_image {
        $class->zfs_create_zvol($scfg, $volname, $size);
        my $devname = "/dev/zvol/$scfg->{pool}/$volname";
 
-       run_command("udevadm trigger --subsystem-match block");
-       system('udevadm', 'settle', '--timeout', '10', "--exit-if-exists=${devname}");
+       my $timeout = PVE::RPCEnvironment->is_worker() ? 60*5 : 10;
+       for (my $i = 1; $i <= $timeout; $i++) {
+           last if -b $devname;
+           die "Timeout: no zvol after $timeout sec found.\n"
+               if $i == $timeout;
 
+           sleep(1);
+       }
     } elsif ( $fmt eq 'subvol') {
 
-       die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"
+       die "illegal name '$volname' - should be 'subvol-$vmid-*'\n"
            if $volname && $volname !~ m/^subvol-$vmid-/;
        $volname = $class->zfs_find_free_diskname($storeid, $scfg, $vmid, $fmt) 
            if !$volname;
 
-       die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"
+       die "illegal name '$volname' - should be 'subvol-$vmid-*'\n"
            if $volname !~ m/^subvol-$vmid-/;
 
        $class->zfs_create_subvol($scfg, $volname, $size);      
@@ -623,6 +629,14 @@ sub volume_resize {
     return $new_size;
 }
 
+sub storage_can_replicate {
+    my ($class, $scfg, $storeid, $format) = @_;
+
+    return 1 if $format eq 'raw' || $format eq 'subvol';
+
+    return 0;
+}
+
 sub volume_has_feature {
     my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;
 
@@ -660,6 +674,8 @@ sub volume_export {
     die "$class storage can only export snapshots\n"
        if !defined($snapshot);
 
+    my $dataset = ($class->parse_volname($volname))[1];
+
     my $fd = fileno($fh);
     die "internal error: invalid file handle for volume_export\n"
        if !defined($fd);
@@ -673,7 +689,7 @@ sub volume_export {
        my $arg = $with_snapshots ? '-I' : '-i';
        push @$cmd, $arg, $base_snapshot;
     }
-    push @$cmd, '--', "$scfg->{pool}/$volname\@$snapshot";
+    push @$cmd, '--', "$scfg->{pool}/$dataset\@$snapshot";
 
     run_command($cmd, output => $fd);
 
@@ -700,7 +716,8 @@ sub volume_import {
     die "internal error: invalid file handle for volume_import\n"
        if !defined($fd);
 
-    my $zfspath = "$scfg->{pool}/$volname";
+    my $dataset = ($class->parse_volname($volname))[1];
+    my $zfspath = "$scfg->{pool}/$dataset";
     my $suffix = defined($base_snapshot) ? "\@$base_snapshot" : '';
     my $exists = 0 == run_command(['zfs', 'get', '-H', 'name', $zfspath.$suffix],
                             noerr => 1, errfunc => sub {});