[pve-devel] [PATCH_V2] remove running from Storage and check it in QemuServer

2015-05-06 Thread Wolfgang Link
It is better to check if a VM is running in QemuServer then in Storage.
for the Storage there is no difference if it is running or not.

Signed-off-by: Wolfgang Link 
---
 PVE/QemuServer.pm | 29 +++--
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 708b208..9a4e2ee 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -31,6 +31,8 @@ use PVE::QMPClient;
 use PVE::RPCEnvironment;
 use Time::HiRes qw(gettimeofday);
 
+my $qemu_snap_storage = {rbd => 1, sheepdog => 1};
+
 my $cpuinfo = PVE::ProcFSTools::read_cpuinfo();
 
 # Note about locking: we use flock on the config file protect
@@ -3777,12 +3779,11 @@ sub qemu_volume_snapshot {
 
 my $running = check_running($vmid);
 
-return if !PVE::Storage::volume_snapshot($storecfg, $volid, $snap, 
$running);
-
-return if !$running;
-
-vm_mon_cmd($vmid, "snapshot-drive", device => $deviceid, name => $snap);
-
+if ($running && do_snapshots_with_qemu($storecfg, $volid)){
+   vm_mon_cmd($vmid, "snapshot-drive", device => $deviceid, name => $snap);
+} else {
+   PVE::Storage::volume_snapshot($storecfg, $volid, $snap);
+}
 }
 
 sub qemu_volume_snapshot_delete {
@@ -5772,6 +5773,22 @@ my $savevm_wait = sub {
 }
 };
 
+sub do_snapshots_with_qemu {
+my ($storecfg, $volid) = @_;
+
+my $storage_name = PVE::Storage::parse_volume_id($volid);
+
+if ($qemu_snap_storage->{$storecfg->{ids}->{$storage_name}->{type}} ){
+   return 1;
+}
+
+if ($volid =~ m/\.(qcow2|qed)$/){
+   return 1;
+}
+
+return undef;
+}
+
 sub snapshot_create {
 my ($vmid, $snapname, $save_vmstate, $comment) = @_;
 
-- 
2.1.4


___
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


[pve-devel] [PATCH_V2] remove running from Storage and check it in QemuServer

2015-05-06 Thread Wolfgang Link
It is better to check if a VM is running in QemuServer then in Storage.
for the Storage there is no difference if it is running or not.

Signed-off-by: Wolfgang Link 
---
 PVE/Storage.pm   | 4 ++--
 PVE/Storage/ISCSIDirectPlugin.pm | 2 +-
 PVE/Storage/LVMPlugin.pm | 2 +-
 PVE/Storage/Plugin.pm| 4 +---
 PVE/Storage/RBDPlugin.pm | 8 ++--
 PVE/Storage/SheepdogPlugin.pm| 8 ++--
 PVE/Storage/ZFSPlugin.pm | 4 +---
 PVE/Storage/ZFSPoolPlugin.pm | 6 ++
 8 files changed, 12 insertions(+), 26 deletions(-)

diff --git a/PVE/Storage.pm b/PVE/Storage.pm
index b542ee6..92c7d14 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -162,13 +162,13 @@ sub volume_rollback_is_possible {
 }
 
 sub volume_snapshot {
-my ($cfg, $volid, $snap, $running) = @_;
+my ($cfg, $volid, $snap) = @_;
 
 my ($storeid, $volname) = parse_volume_id($volid, 1);
 if ($storeid) {
 my $scfg = storage_config($cfg, $storeid);
 my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
-return $plugin->volume_snapshot($scfg, $storeid, $volname, $snap, 
$running);
+return $plugin->volume_snapshot($scfg, $storeid, $volname, $snap);
 } elsif ($volid =~ m|^(/.+)$| && -e $volid) {
 die "snapshot file/device '$volid' is not possible\n";
 } else {
diff --git a/PVE/Storage/ISCSIDirectPlugin.pm b/PVE/Storage/ISCSIDirectPlugin.pm
index c957ade..763c482 100644
--- a/PVE/Storage/ISCSIDirectPlugin.pm
+++ b/PVE/Storage/ISCSIDirectPlugin.pm
@@ -205,7 +205,7 @@ sub volume_resize {
 }
 
 sub volume_snapshot {
-my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
+my ($class, $scfg, $storeid, $volname, $snap) = @_;
 die "volume snapshot is not possible on iscsi device";
 }
 
diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm
index 1688bb5..19eb78c 100644
--- a/PVE/Storage/LVMPlugin.pm
+++ b/PVE/Storage/LVMPlugin.pm
@@ -456,7 +456,7 @@ sub volume_resize {
 }
 
 sub volume_snapshot {
-my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
+my ($class, $scfg, $storeid, $volname, $snap) = @_;
 
 die "lvm snapshot is not implemented";
 }
diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
index 5b72b07..f119068 100644
--- a/PVE/Storage/Plugin.pm
+++ b/PVE/Storage/Plugin.pm
@@ -641,12 +641,10 @@ sub volume_resize {
 }
 
 sub volume_snapshot {
-my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
+my ($class, $scfg, $storeid, $volname, $snap) = @_;
 
 die "can't snapshot this image format\n" if $volname !~ m/\.(qcow2|qed)$/;
 
-return 1 if $running;
-
 my $path = $class->filesystem_path($scfg, $volname);
 
 my $cmd = ['/usr/bin/qemu-img', 'snapshot','-c', $snap, $path];
diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
index 2c45a68..7aaa1f0 100644
--- a/PVE/Storage/RBDPlugin.pm
+++ b/PVE/Storage/RBDPlugin.pm
@@ -319,9 +319,7 @@ sub create_base {
 my $cmd = &$rbd_cmd($scfg, $storeid, 'rename', &$add_pool_to_disk($scfg, 
$name), &$add_pool_to_disk($scfg, $newname));
 run_rbd_command($cmd, errmsg => "rbd rename '$name' error");
 
-my $running  = undef; #fixme : is create_base always offline ?
-
-$class->volume_snapshot($scfg, $storeid, $newname, $snap, $running);
+$class->volume_snapshot($scfg, $storeid, $newname, $snap);
 
 my (undef, undef, undef, $protected) = rbd_volume_info($scfg, $storeid, 
$newname, $snap);
 
@@ -510,9 +508,7 @@ sub volume_resize {
 }
 
 sub volume_snapshot {
-my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
-
-return 1 if $running;
+my ($class, $scfg, $storeid, $volname, $snap) = @_;
 
 my ($vtype, $name, $vmid) = $class->parse_volname($volname);
 
diff --git a/PVE/Storage/SheepdogPlugin.pm b/PVE/Storage/SheepdogPlugin.pm
index 3e2c126..50bd1a8 100644
--- a/PVE/Storage/SheepdogPlugin.pm
+++ b/PVE/Storage/SheepdogPlugin.pm
@@ -207,9 +207,7 @@ sub create_base {
 run_command($cmd, errmsg => "sheepdog delete $volname' error");
 
 #create the base snapshot
-my $running  = undef; #fixme : is create_base always offline ?
-
-$class->volume_snapshot($scfg, $storeid, $newname, $snap, $running);
+$class->volume_snapshot($scfg, $storeid, $newname, $snap);
 
 return $newvolname;
 }
@@ -389,9 +387,7 @@ sub volume_resize {
 }
 
 sub volume_snapshot {
-my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;
-
-return 1 if $running;
+my ($class, $scfg, $storeid, $volname, $snap) = @_;
 
 my ($vtype, $name, $vmid, $basename, $basevmid, $isBase) =
$class->parse_volname($volname);
diff --git a/PVE/Storage/ZFSPlugin.pm b/PVE/Storage/ZFSPlugin.pm
index e7acfb8..07afd1a 100644
--- a/PVE/Storage/ZFSPlugin.pm
+++ b/PVE/Storage/ZFSPlugin.pm
@@ -244,9 +244,7 @@ sub create_base {
 my $guid = $class->zfs_create_lu($scfg, $newname);
 $class->zfs_add_lun_mapping_entry($scfg, $newname, $guid);
 
-my $running  = undef; #fixme : i