]> git.proxmox.com Git - qemu-server.git/commitdiff
vzdump: factor out QGA FS freeze/thaw
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 19 Mar 2020 17:37:20 +0000 (18:37 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 19 Mar 2020 17:37:20 +0000 (18:37 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/VZDump/QemuServer.pm

index 3b79b15d7451657b211a9f7809a7d8d7fec157a1..69d373461c9aabe7f289b57634497aa79d9ce92a 100644 (file)
@@ -412,18 +412,7 @@ sub archive_pbs {
            die $interrupt_msg;
        };
 
-       my $agent_running = 0;
-
-       if ($self->{vmlist}->{$vmid}->{agent} && $vm_is_running) {
-           $agent_running = PVE::QemuServer::qga_check_running($vmid);
-       }
-
-       if ($agent_running){
-           eval { mon_cmd($vmid, "guest-fsfreeze-freeze"); };
-           if (my $err = $@) {
-               $self->logerr($err);
-           }
-       }
+       my $fs_frozen = $self->qga_fs_freeze($vmid);
 
        eval {
 
@@ -444,15 +433,11 @@ sub archive_pbs {
 
        my $qmperr = $@;
 
-       if ($agent_running){
-           eval { mon_cmd($vmid, "guest-fsfreeze-thaw"); };
-           if (my $err = $@) {
-               $self->logerr($err);
-           }
+       if ($fs_frozen) {
+           $self->qga_fs_thaw($vmid);
        }
 
        die $qmperr if $qmperr;
-
        die "got no uuid for backup task\n" if !defined($backup_job_uuid);
 
        $self->loginfo("started backup task '$backup_job_uuid'");
@@ -667,31 +652,13 @@ sub archive_vma {
        $qmpclient->queue_cmd($vmid, $add_fd_cb, 'getfd',
                              fd => $outfileno, fdname => "backup");
 
-       my $agent_running = 0;
-
-       if ($self->{vmlist}->{$vmid}->{agent} && $vm_is_running) {
-           $agent_running = PVE::QemuServer::qga_check_running($vmid);
-           $self->loginfo("skipping guest-agent 'fs-freeze', agent configured but not running?")
-               if !$agent_running;
-       }
-
-       if ($agent_running){
-           $self->loginfo("issuing guest-agent 'fs-freeze' command");
-           eval { mon_cmd($vmid, "guest-fsfreeze-freeze"); };
-           if (my $err = $@) {
-               $self->logerr($err);
-           }
-       }
+       my $fs_frozen = $self->qga_fs_freeze($vmid);
 
        eval { $qmpclient->queue_execute(30) };
        my $qmperr = $@;
 
-       if ($agent_running){
-           $self->loginfo("issuing guest-agent 'fs-thaw' command");
-           eval { mon_cmd($vmid, "guest-fsfreeze-thaw"); };
-           if (my $err = $@) {
-               $self->logerr($err);
-           }
+       if ($fs_frozen) {
+           $self->qga_fs_thaw($vmid);
        }
        die $qmperr if $qmperr;
        die $qmpclient->{errors}->{$vmid} if $qmpclient->{errors}->{$vmid};
@@ -780,6 +747,31 @@ sub _get_task_devlist {
     return $devlist;
 }
 
+sub qga_fs_freeze {
+    my ($self, $vmid) = @_;
+    return if !$self->{vmlist}->{$vmid}->{agent} || !$self->{vm_was_running};
+
+    if (!PVE::QemuServer::qga_check_running($vmid, 1)) {
+       $self->loginfo("skipping guest-agent 'fs-freeze', agent configured but not running?");
+       return;
+    }
+
+    $self->loginfo("issuing guest-agent 'fs-freeze' command");
+    eval { mon_cmd($vmid, "guest-fsfreeze-freeze") };
+    $self->logerr($@) if $@;
+
+    return 1; # even on mon command error, ensure we always thaw again
+}
+
+# only call if fs_freeze return 1
+sub qga_fs_thaw {
+    my ($self, $vmid) = @_;
+
+    $self->loginfo("issuing guest-agent 'fs-thaw' command");
+    eval { mon_cmd($vmid, "guest-fsfreeze-thaw") };
+    $self->logerr($@) if $@;
+}
+
 sub snapshot {
     my ($self, $task, $vmid) = @_;