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

Oguz Bektas o.bektas at proxmox.com
Mon Nov 18 15:41:10 CET 2019


From: Stefan Reiter <s.reiter at proxmox.com>

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>
(cherry picked from commit 0eb21691361ccb9d30b10114016423e0d0defdd8)
Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
---
 PVE/QemuServer.pm | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index fab6b29..f6ee4b8 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -5621,12 +5621,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);
 		}
@@ -5637,6 +5638,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