Change in vdsm[master]: vm: simplify the shutdown exit reason

fromani at redhat.com fromani at redhat.com
Mon Aug 11 15:48:36 UTC 2014


Francesco Romani has uploaded a new change for review.

Change subject: vm: simplify the shutdown exit reason
......................................................................

vm: simplify the shutdown exit reason

A VM could be cleanly shutdown in two ways,
either from inside (user shutdown) or from engine
(admin shutdown).

In turn, the shutdown process can involve various
shutdown methods (guest agent, acpi, forced).

Currently we use a couple of booleans to detect
all the various cases, but this is clumsy and
some paths aren't well covered, so wrong states
may be reported.

This patch simplify the reporting by adding an
explicit, private, 'shutdownReason' field.

Change-Id: Id03e38fe897d3b36fa7fedc016c2420f67d28385
Signed-off-by: Francesco Romani <fromani at redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 9 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/31354/1

diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index a485cd9..564dfa4 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -1477,7 +1477,6 @@
         self.destroyed = False
         self._recoveryFile = constants.P_VDSM_RUN + \
             str(self.conf['vmId']) + '.recovery'
-        self.user_destroy = False
         self._monitorResponse = 0
         self.conf['clientIp'] = ''
         self.memCommitted = 0
@@ -1533,6 +1532,7 @@
 
         self._powerDownEvent = threading.Event()
         self._liveMergeCleanupThreads = {}
+        self._shutdownReason = None
 
     def _get_lastStatus(self):
         PAUSED_STATES = (vmstatus.POWERING_DOWN, vmstatus.REBOOT_IN_PROGRESS,
@@ -1953,12 +1953,10 @@
         # state
         response = self.releaseVm()
         if not response['status']['code']:
-            if self.destroyed:
-                self.setDownStatus(NORMAL, vmexitreason.ADMIN_SHUTDOWN)
-            elif self.user_destroy:
-                self.setDownStatus(NORMAL, vmexitreason.USER_SHUTDOWN)
-            else:
+            if self._shutdownReason is None:
                 self.setDownStatus(ERROR, vmexitreason.LOST_QEMU_CONNECTION)
+            else:
+                self.setDownStatus(NORMAL, self._shutdownReason)
         self._powerDownEvent.set()
 
     def _loadCorrectedTimeout(self, base, doubler=20, load=None):
@@ -4611,11 +4609,13 @@
                                         dev.custom)
 
         hooks.before_vm_destroy(self._lastXMLDesc, self.conf)
+        self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
         self.destroyed = True
 
         return self.releaseVm()
 
     def acpiShutdown(self):
+        self._shutdownReason = vmexitreason.ADMIN_SHUTDOWN
         self._dom.shutdownFlags(libvirt.VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN)
 
     def setBalloonTarget(self, target):
@@ -5151,7 +5151,9 @@
                 hooks.after_vm_hibernate(self._lastXMLDesc, self.conf)
             else:
                 if detail == libvirt.VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
-                    self.user_destroy = True
+                    if self._shutdownReason is None:
+                        # do not overwrite admin shutdown, if present
+                        self._shutdownReason = vmexitreason.USER_SHUTDOWN
                 self._onQemuDeath()
         elif event == libvirt.VIR_DOMAIN_EVENT_SUSPENDED:
             self._guestCpuRunning = False


-- 
To view, visit http://gerrit.ovirt.org/31354
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id03e38fe897d3b36fa7fedc016c2420f67d28385
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani at redhat.com>


More information about the vdsm-patches mailing list