[pve-devel] [PATCH qemu-server v2 1/6] move code of save_vmstate preparation
Dominik Csapak
d.csapak at proxmox.com
Wed Mar 13 09:54:59 CET 2019
we will reuse this later
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
PVE/QemuConfig.pm | 30 +-----------------------------
PVE/QemuServer.pm | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
index 6ba0cc3..6d7012b 100644
--- a/PVE/QemuConfig.pm
+++ b/PVE/QemuConfig.pm
@@ -118,35 +118,7 @@ sub get_replicatable_volumes {
sub __snapshot_save_vmstate {
my ($class, $vmid, $conf, $snapname, $storecfg) = @_;
- my $snap = $conf->{snapshots}->{$snapname};
-
- # first, use explicitly configured storage
- my $target = $conf->{vmstatestorage};
-
- if (!$target) {
- my ($shared, $local);
- PVE::QemuServer::foreach_storage_used_by_vm($conf, sub {
- my ($sid) = @_;
- my $scfg = PVE::Storage::storage_config($storecfg, $sid);
- my $dst = $scfg->{shared} ? \$shared : \$local;
- $$dst = $sid if !$$dst || $scfg->{path}; # prefer file based storage
- });
-
- # second, use shared storage where VM has at least one disk
- # third, use local storage where VM has at least one disk
- # fall back to local storage
- $target = $shared // $local // 'local';
- }
-
- my $driver_state_size = 500; # assume 32MB is enough to safe all driver state;
- # we abort live save after $conf->{memory}, so we need at max twice that space
- my $size = $conf->{memory}*2 + $driver_state_size;
-
- my $name = "vm-$vmid-state-$snapname";
- my $scfg = PVE::Storage::storage_config($storecfg, $target);
- $name .= ".raw" if $scfg->{path}; # add filename extension for file base storage
- $snap->{vmstate} = PVE::Storage::vdisk_alloc($storecfg, $target, $vmid, 'raw', $name, $size*1024);
- $snap->{runningmachine} = PVE::QemuServer::get_current_qemu_machine($vmid);
+ PVE::QemuServer::prepare_save_vmstate($vmid, $conf, $snapname, $storecfg);
}
sub __snapshot_check_running {
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 546b22e..1d1b687 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -7100,6 +7100,40 @@ sub nbd_stop {
vm_mon_cmd($vmid, 'nbd-server-stop');
}
+sub prepare_save_vmstate {
+ my ($vmid, $conf, $snapname, $storecfg) = @_;
+
+ my $snap = $conf->{snapshots}->{$snapname};
+
+ # first, use explicitly configured storage
+ my $target = $conf->{vmstatestorage};
+
+ if (!$target) {
+ my ($shared, $local);
+ PVE::QemuServer::foreach_storage_used_by_vm($conf, sub {
+ my ($sid) = @_;
+ my $scfg = PVE::Storage::storage_config($storecfg, $sid);
+ my $dst = $scfg->{shared} ? \$shared : \$local;
+ $$dst = $sid if !$$dst || $scfg->{path}; # prefer file based storage
+ });
+
+ # second, use shared storage where VM has at least one disk
+ # third, use local storage where VM has at least one disk
+ # fall back to local storage
+ $target = $shared // $local // 'local';
+ }
+
+ my $driver_state_size = 500; # assume 32MB is enough to safe all driver state;
+ # we abort live save after $conf->{memory}, so we need at max twice that space
+ my $size = $conf->{memory}*2 + $driver_state_size;
+
+ my $name = "vm-$vmid-state-$snapname";
+ my $scfg = PVE::Storage::storage_config($storecfg, $target);
+ $name .= ".raw" if $scfg->{path}; # add filename extension for file base storage
+ $snap->{vmstate} = PVE::Storage::vdisk_alloc($storecfg, $target, $vmid, 'raw', $name, $size*1024);
+ $snap->{runningmachine} = PVE::QemuServer::get_current_qemu_machine($vmid);
+}
+
# bash completion helper
sub complete_backup_archives {
--
2.11.0
More information about the pve-devel
mailing list