qvm-tools/qvm-shutdown: handle domains with xl daemon killed (#903)
When system is going down, systemd kills all the users processes, including 'xl' daemons waiting for domain shutdown. This results in zombie domains not cleaned up. The proper fix would be somehow extract those processes from user session scope (most likely by starting them as a service). But because it applies only to system shutdown (qvm-shutdown call there), it is simpler to add appropriate handling code to qvm-shutdown. In R3 the problem will vanish, because of use libvirtd deamon, so no user processes required to track domains state.
This commit is contained in:
parent
fc7d686b2e
commit
68460fb272
@ -93,6 +93,7 @@ def main():
|
|||||||
print >> sys.stderr, "Waiting for the VM(s) to shutdown..."
|
print >> sys.stderr, "Waiting for the VM(s) to shutdown..."
|
||||||
shutdown_counter = 0
|
shutdown_counter = 0
|
||||||
|
|
||||||
|
halting_vms = []
|
||||||
while len (vms_list):
|
while len (vms_list):
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
print >> sys.stderr, "Waiting for VMs: ", [vm.name for vm in vms_list]
|
print >> sys.stderr, "Waiting for VMs: ", [vm.name for vm in vms_list]
|
||||||
@ -100,6 +101,12 @@ def main():
|
|||||||
if not vm.is_running():
|
if not vm.is_running():
|
||||||
vms_list.remove (vm)
|
vms_list.remove (vm)
|
||||||
continue
|
continue
|
||||||
|
if vm.get_power_state() == "Halting":
|
||||||
|
if vm in halting_vms:
|
||||||
|
vm.force_shutdown()
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
halting_vms.append(vm)
|
||||||
if shutdown_counter > defaults["shutdown_counter_max"]:
|
if shutdown_counter > defaults["shutdown_counter_max"]:
|
||||||
# kill the VM
|
# kill the VM
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
|
Loading…
Reference in New Issue
Block a user