[pve-devel] [PATCH qemu-server] fix #2244: Allow timeout for guest-agent shutdown

Stefan Reiter s.reiter at proxmox.com
Mon Jun 24 10:33:07 CEST 2019


The "guest-shutdown" guest agent call is blocking for some reason, so if
it fails (e.g. agent not installed on guest) only the default timeout of
10 minutes (see QMPClient.pm, sub cmd) would apply.

With this change, if (and only if) a timeout is specified via CLI/API,
it is used instead. In case it is not specified, behaviour stays the
same (default 10 min timeout).

Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---

BTW, I did check "system_powerdown" and "quit", both are not blocking,
so no changes needed there.

 PVE/QemuServer.pm | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index e8e1909..ed11609 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -5646,12 +5646,13 @@ sub vm_stop {
 	    PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-stop');
 	}
 
-	$timeout = 60 if !defined($timeout);
-
 	eval {
 	    if ($shutdown) {
 		if (defined($conf) && parse_guest_agent($conf)->{enabled}) {
-		    vm_qmp_command($vmid, { execute => "guest-shutdown" }, $nocheck);
+		    vm_qmp_command($vmid, {
+			execute => "guest-shutdown",
+			arguments => { timeout => $timeout }
+		    }, $nocheck);
 		} else {
 		    vm_qmp_command($vmid, { execute => "system_powerdown" }, $nocheck);
 		}
@@ -5662,6 +5663,8 @@ sub vm_stop {
 	my $err = $@;
 
 	if (!$err) {
+	    $timeout = 60 if !defined($timeout);
+
 	    my $count = 0;
 	    while (($count < $timeout) && check_running($vmid, $nocheck)) {
 		$count++;
-- 
2.20.1





More information about the pve-devel mailing list