[pve-devel] [PATCH qemu-server 1/1] wait for vm scopes to be gone

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Jun 19 09:21:22 CEST 2019


This should help with the rare case where stop mode backups
fail to restart due to the $vmid.scope not being completely
gone when we want to restart. This queries systemd via dbus,
and if the scope is still there, awaits a UnitRemoved signal
for the scope from dbus.

For now with a 5 second timeout... (given that the processes
are already gone and it's really just waiting for systemd to
wake up, this should be plenty...)

Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
Also: why even bother checking for the cgroup directory...

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

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 5f894ce..0ef44c3 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -5310,12 +5310,13 @@ sub vm_start {
 
 	PVE::Storage::activate_volumes($storecfg, $vollist);
 
-	if (-d "/sys/fs/cgroup/systemd/qemu.slice/$vmid.scope") {
-	    eval {
-		run_command(['/bin/systemctl', 'stop', "$vmid.scope"],
-		    outfunc => sub {}, errfunc => sub {});
-	    };
-	}
+	eval {
+	    run_command(['/bin/systemctl', 'stop', "$vmid.scope"],
+		outfunc => sub {}, errfunc => sub {});
+	};
+	# Issues with the above 'stop' not being fully completed are extremely rare, a very low
+	# timeout should be more than enough here...
+	PVE::Systemd::wait_for_unit_removed("$vmid.scope", 5);
 
 	my $cpuunits = defined($conf->{cpuunits}) ? $conf->{cpuunits}
 	                                          : $defaults->{cpuunits};
-- 
2.11.0





More information about the pve-devel mailing list