Interdiff
diff --git a/lib/hypervisor/hv_xen.py b/lib/hypervisor/hv_xen.py
index dbb56da..180a1b7 100644
--- a/lib/hypervisor/hv_xen.py
+++ b/lib/hypervisor/hv_xen.py
@@ -520,14 +520,14 @@ class XenHypervisor(hv_base.BaseHypervisor):
return self._StopInstance(name, force)
def _ShutdownInstance(self, name):
- """Shutdown an instance if the instance if the instance is running.
+ """Shutdown an instance if the instance is running.
@type name: string
@param name: name of the instance to stop
The '-w' flag waits for shutdown to complete which avoids the need
- to poll in the case where we want to destroy the domain immediatly
- after it has shutdown.
+ to poll in the case where we want to destroy the domain
+ immediately after it has shutdown.
"""
instance_info = self.GetInstanceInfo(name)
Thanks,
Jose
On Wed, Dec 04, 2013 at 04:16:48PM +0100, Michele Tartara wrote:
> On Tue, Dec 3, 2013 at 10:45 AM, Jose A. Lopes <[email protected]> wrote:
> > Update Xen backend to properly recognize when a domain has been
> > shutdown by the user and to properly cleanup a shutdown domain when
> > Ganeti requests Xen to stop this domain.
> >
> > Partial cherry-pick from 9d22cc90609e3ee8f0f2b34b793a3daced3c0e61
> >
> > Signed-off-by: Jose A. Lopes <[email protected]>
> > Reviewed-by: Hrvoje Ribicic <[email protected]>
> > ---
> > lib/hypervisor/hv_xen.py | 58
> > ++++++++++++++++++++++++++++++++++++++++++++----
> > 1 file changed, 54 insertions(+), 4 deletions(-)
> >
> > diff --git a/lib/hypervisor/hv_xen.py b/lib/hypervisor/hv_xen.py
> > index 909ef5f..dbb56da 100644
> > --- a/lib/hypervisor/hv_xen.py
> > +++ b/lib/hypervisor/hv_xen.py
> > @@ -165,6 +165,15 @@ def _GetXmList(fn, include_node, _timeout=5):
> > return _ParseXmList(lines, include_node)
> >
> >
> > +def _IsInstanceRunning(instance_info):
> > + return instance_info == "r-----" \
> > + or instance_info == "-b----"
> > +
> > +
> > +def _IsInstanceShutdown(instance_info):
> > + return instance_info == "---s--"
> > +
> > +
> > def _ParseNodeInfo(info):
> > """Return information about the node.
> >
> > @@ -510,17 +519,58 @@ class XenHypervisor(hv_base.BaseHypervisor):
> >
> > return self._StopInstance(name, force)
> >
> > + def _ShutdownInstance(self, name):
> > + """Shutdown an instance if the instance if the instance is running.
>
> "if the instance" is written twice
>
> > +
> > + @type name: string
> > + @param name: name of the instance to stop
> > +
> > + The '-w' flag waits for shutdown to complete which avoids the need
> > + to poll in the case where we want to destroy the domain immediatly
>
> s/immediatly/immediately/
>
> > + after it has shutdown.
> > +
> > + """
> > + instance_info = self.GetInstanceInfo(name)
> > +
> > + if instance_info is None or _IsInstanceShutdown(instance_info[4]):
> > + logging.info("Failed to shutdown instance %s, not running", name)
> > + return None
> > +
> > + return self._RunXen(["shutdown", "-w", name])
> > +
> > + def _DestroyInstance(self, name):
> > + """Destroy an instance if the instance if the instance exists.
> > +
> > + @type name: string
> > + @param name: name of the instance to destroy
> > +
> > + """
> > + instance_info = self.GetInstanceInfo(name)
> > +
> > + if instance_info is None:
> > + logging.info("Failed to destroy instance %s, does not exist", name)
> > + return None
> > +
> > + return self._RunXen(["destroy", name])
> > +
> > def _StopInstance(self, name, force):
> > """Stop an instance.
> >
> > + @type name: string
> > + @param name: name of the instance to destroy
> > +
> > + @type force: boolean
> > + @param force: whether to do a "hard" stop (destroy)
> > +
> > """
> > if force:
> > - action = "destroy"
> > + result = self._DestroyInstance(name)
> > else:
> > - action = "shutdown"
> > + self._ShutdownInstance(name)
> > + result = self._DestroyInstance(name)
> >
> > - result = self._RunXen([action, name])
> > - if result.failed:
> > + if result is not None and result.failed and \
> > + self.GetInstanceInfo(name) is not None:
> > raise errors.HypervisorError("Failed to stop instance %s: %s, %s" %
> > (name, result.fail_reason,
> > result.output))
> >
> > --
> > 1.8.4.1
> >
>
> Rest LGTM, thanks.
>
> Michele
>
> --
> Google Germany GmbH
> Dienerstr. 12
> 80331 München
>
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Graham Law, Christine Elizabeth Flores
--
Jose Antonio Lopes
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores
Steuernummer: 48/725/00206
Umsatzsteueridentifikationsnummer: DE813741370