[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] fix xend 'rename-restart' behavior



John Levon wrote:
> On Thu, Jan 24, 2008 at 03:37:52PM -0700, Jim Fehlig wrote:
>
>   
>> diff -r 31adb5c972d0 -r cc85865f26a7 docs/xen-api/vm-lifecycle.tex
>> --- a/docs/xen-api/vm-lifecycle.tex  Thu Jan 24 14:41:26 2008 +0000
>> +++ b/docs/xen-api/vm-lifecycle.tex  Thu Jan 24 15:20:39 2008 -0700
>>     
>
> There's a change log for the Xen API, I think this needs to be indicated
> and the version bumped.
>   

Right.  Updated patch attached.

Jim

# HG changeset patch
# User Jim Fehlig <jfehlig@xxxxxxxxxx>
# Date 1201277349 25200
# Node ID fd4e2742f9b6131c3116af976dba85b1af40da41
# Parent  31adb5c972d03e45cb746cd2305126ea2571282f
(Re)introduce notion of crashed VM power state.

The crashed power state is necessary to allow both core-dumping a crashed
but preserved VM and renaming/restarting a crashed VM.

This change requires incrementing Xen API version and C-bindings major
version.

Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx>

diff -r 31adb5c972d0 -r fd4e2742f9b6 docs/xen-api/revision-history.tex
--- a/docs/xen-api/revision-history.tex Thu Jan 24 14:41:26 2008 +0000
+++ b/docs/xen-api/revision-history.tex Fri Jan 25 09:09:09 2008 -0700
@@ -16,5 +16,12 @@
     \end{flushleft}
    \end{minipage}\\
   \hline
+  1.0.2 & 25th Jan. 08 & J. Fehlig &
+   \begin{minipage}[t]{7cm}
+    \begin{flushleft}
+     Added Crashed VM power state.
+    \end{flushleft}
+   \end{minipage}\\
+  \hline
  \end{tabular}
 \end{center}
\ No newline at end of file
diff -r 31adb5c972d0 -r fd4e2742f9b6 docs/xen-api/vm-lifecycle.tex
--- a/docs/xen-api/vm-lifecycle.tex     Thu Jan 24 14:41:26 2008 +0000
+++ b/docs/xen-api/vm-lifecycle.tex     Fri Jan 25 09:09:09 2008 -0700
@@ -21,7 +21,10 @@
 \end{figure}
 
 Figure~\ref{fig-vm-lifecycle} shows the states that a VM can be in
-and the API calls that can be used to move the VM between these states.
+and the API calls that can be used to move the VM between these states.  The 
crashed
+state indicates that the guest OS running within the VM has crashed.  There is 
no
+API to explicitly move to the crashed state, however a hardShutdown will move 
the
+VM to the powered down state.
 
 \section{VM boot parameters}
 
diff -r 31adb5c972d0 -r fd4e2742f9b6 docs/xen-api/vm_lifecycle.dot
--- a/docs/xen-api/vm_lifecycle.dot     Thu Jan 24 14:41:26 2008 +0000
+++ b/docs/xen-api/vm_lifecycle.dot     Fri Jan 25 09:09:09 2008 -0700
@@ -1,6 +1,6 @@ digraph g{
 digraph g{
 
-node [shape=box]; "powered down" paused running suspended;
+node [shape=box]; "powered down" paused running suspended crashed;
 
 "powered down" -> paused [label="start(paused=true)"];
 "powered down" -> running [label="start(paused=false)"];
@@ -11,5 +11,7 @@ paused -> running [label="resume"];
 paused -> running [label="resume"];
 running -> "powered down" [label="cleanShutdown /\nhardShutdown"];
 running -> paused [label="pause"];
+running -> crashed [label="guest OS crash"]
+crashed -> "powered down" [label="hardShutdown"]
 
 }
\ No newline at end of file
diff -r 31adb5c972d0 -r fd4e2742f9b6 docs/xen-api/xenapi-coversheet.tex
--- a/docs/xen-api/xenapi-coversheet.tex        Thu Jan 24 14:41:26 2008 +0000
+++ b/docs/xen-api/xenapi-coversheet.tex        Fri Jan 25 09:09:09 2008 -0700
@@ -17,12 +17,12 @@
 \newcommand{\coversheetlogo}{xen.eps}
 
 %% Document date
-\newcommand{\datestring}{10th December 2007}
+\newcommand{\datestring}{25th January 2008}
 
 \newcommand{\releasestatement}{Stable Release}
 
 %% Document revision
-\newcommand{\revstring}{API Revision 1.0.1}
+\newcommand{\revstring}{API Revision 1.0.2}
 
 %% Document authors
 \newcommand{\docauthors}{
diff -r 31adb5c972d0 -r fd4e2742f9b6 docs/xen-api/xenapi-datamodel.tex
--- a/docs/xen-api/xenapi-datamodel.tex Thu Jan 24 14:41:26 2008 +0000
+++ b/docs/xen-api/xenapi-datamodel.tex Fri Jan 25 09:09:09 2008 -0700
@@ -156,6 +156,7 @@ The following enumeration types are used
 \hspace{0.5cm}{\tt Paused} & Paused \\
 \hspace{0.5cm}{\tt Running} & Running \\
 \hspace{0.5cm}{\tt Suspended} & Suspended \\
+\hspace{0.5cm}{\tt Crashed} & Crashed \\
 \hspace{0.5cm}{\tt Unknown} & Some other unknown state \\
 \hline
 \end{longtable}
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/libxen/Makefile
--- a/tools/libxen/Makefile     Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/libxen/Makefile     Fri Jan 25 09:09:09 2008 -0700
@@ -18,7 +18,7 @@ XEN_ROOT=../..
 XEN_ROOT=../..
 include $(XEN_ROOT)/tools/Rules.mk
 
-MAJOR = 1.0
+MAJOR = 1.1
 MINOR = 0
 
 CFLAGS += -Iinclude                     \
diff -r 31adb5c972d0 -r fd4e2742f9b6 
tools/libxen/include/xen/api/xen_vm_power_state.h
--- a/tools/libxen/include/xen/api/xen_vm_power_state.h Thu Jan 24 14:41:26 
2008 +0000
+++ b/tools/libxen/include/xen/api/xen_vm_power_state.h Fri Jan 25 09:09:09 
2008 -0700
@@ -46,6 +46,11 @@ enum xen_vm_power_state
     XEN_VM_POWER_STATE_SUSPENDED,
 
     /**
+     * Crashed
+     */
+    XEN_VM_POWER_STATE_CRASHED,
+
+    /**
      * Some other unknown state
      */
     XEN_VM_POWER_STATE_UNKNOWN
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/libxen/src/xen_vm_power_state.c
--- a/tools/libxen/src/xen_vm_power_state.c     Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/libxen/src/xen_vm_power_state.c     Fri Jan 25 09:09:09 2008 -0700
@@ -32,6 +32,7 @@ static const char *lookup_table[] =
     "Paused",
     "Running",
     "Suspended",
+    "Crashed",
     "Unknown"
 };
 
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/python/xen/xend/XendAPIConstants.py
--- a/tools/python/xen/xend/XendAPIConstants.py Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/python/xen/xend/XendAPIConstants.py Fri Jan 25 09:09:09 2008 -0700
@@ -25,6 +25,7 @@ XEN_API_VM_POWER_STATE = [
     'Running',
     'Suspended',
     'Halted',
+    'Crashed',
     'Unknown'
 ]
 
@@ -33,7 +34,8 @@ XEN_API_VM_POWER_STATE_RUNNING = 2
 XEN_API_VM_POWER_STATE_RUNNING = 2
 XEN_API_VM_POWER_STATE_SUSPENDED = 3
 XEN_API_VM_POWER_STATE_SHUTTINGDOWN = 4
-XEN_API_VM_POWER_STATE_UNKNOWN = 5
+XEN_API_VM_POWER_STATE_CRASHED = 5
+XEN_API_VM_POWER_STATE_UNKNOWN = 6
 
 XEN_API_ON_NORMAL_EXIT = [
     'destroy',
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/python/xen/xend/XendConstants.py
--- a/tools/python/xen/xend/XendConstants.py    Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/python/xen/xend/XendConstants.py    Fri Jan 25 09:09:09 2008 -0700
@@ -61,6 +61,7 @@ DOM_STATES = [
     'running',
     'suspended',
     'shutdown',
+    'crashed',
     'unknown',
 ]
 
@@ -69,6 +70,7 @@ DOM_STATE_RUNNING = XEN_API_VM_POWER_STA
 DOM_STATE_RUNNING = XEN_API_VM_POWER_STATE_RUNNING
 DOM_STATE_SUSPENDED = XEN_API_VM_POWER_STATE_SUSPENDED
 DOM_STATE_SHUTDOWN = XEN_API_VM_POWER_STATE_SHUTTINGDOWN
+DOM_STATE_CRASHED = XEN_API_VM_POWER_STATE_CRASHED
 DOM_STATE_UNKNOWN = XEN_API_VM_POWER_STATE_UNKNOWN
 
 DOM_STATES_OLD = [
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/python/xen/xend/XendDomain.py       Fri Jan 25 09:09:09 2008 -0700
@@ -43,6 +43,7 @@ from xen.xend.XendConstants import DOM_S
 from xen.xend.XendConstants import DOM_STATE_HALTED, DOM_STATE_PAUSED
 from xen.xend.XendConstants import DOM_STATE_RUNNING, DOM_STATE_SUSPENDED
 from xen.xend.XendConstants import DOM_STATE_SHUTDOWN, DOM_STATE_UNKNOWN
+from xen.xend.XendConstants import DOM_STATE_CRASHED
 from xen.xend.XendConstants import TRIGGER_TYPE
 from xen.xend.XendDevices import XendDevices
 from xen.xend.XendAPIConstants import *
@@ -69,6 +70,7 @@ POWER_STATE_NAMES = dict([(x, XEN_API_VM
                                     DOM_STATE_RUNNING,
                                     DOM_STATE_SUSPENDED,
                                     DOM_STATE_SHUTDOWN,
+                                    DOM_STATE_CRASHED,
                                     DOM_STATE_UNKNOWN]])
 POWER_STATE_ALL = 'all'
 
@@ -1191,13 +1193,14 @@ class XendDomain:
             if dominfo.getDomid() == DOM0_ID:
                 raise XendError("Cannot pause privileged domain %s" % domid)
             ds = dominfo._stateGet()
-            if ds not in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
+            if ds not in (DOM_STATE_RUNNING, DOM_STATE_PAUSED, 
DOM_STATE_CRASHED):
                 raise VMBadState("Domain '%s' is not started" % domid,
                                  POWER_STATE_NAMES[DOM_STATE_RUNNING],
                                  POWER_STATE_NAMES[ds])
             log.info("Domain %s (%d) paused.", dominfo.getName(),
                      int(dominfo.getDomid()))
-            dominfo.pause()
+            if ds == DOM_STATE_RUNNING:
+                dominfo.pause()
             if state:
                 return ds
         except XendInvalidDomain:
@@ -1216,7 +1219,7 @@ class XendDomain:
 
         if dominfo.getDomid() == DOM0_ID:
             raise XendError("Cannot dump core for privileged domain %s" % 
domid)
-        if dominfo._stateGet() not in (DOM_STATE_PAUSED, DOM_STATE_RUNNING):
+        if dominfo._stateGet() not in (DOM_STATE_PAUSED, DOM_STATE_RUNNING, 
DOM_STATE_CRASHED):
             raise VMBadState("Domain '%s' is not started" % domid,
                              POWER_STATE_NAMES[DOM_STATE_PAUSED],
                              POWER_STATE_NAMES[dominfo._stateGet()])
diff -r 31adb5c972d0 -r fd4e2742f9b6 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Thu Jan 24 14:41:26 2008 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Jan 25 09:09:09 2008 -0700
@@ -414,7 +414,7 @@ class XendDomainInfo:
         """
         from xen.xend import XendDomain
 
-        if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, 
XEN_API_VM_POWER_STATE_SUSPENDED):
+        if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, 
XEN_API_VM_POWER_STATE_SUSPENDED, XEN_API_VM_POWER_STATE_CRASHED):
             try:
                 XendTask.log_progress(0, 30, self._constructDomain)
                 XendTask.log_progress(31, 60, self._initDomain)
@@ -648,7 +648,7 @@ class XendDomainInfo:
         return rc
 
     def getDeviceSxprs(self, deviceClass):
-        if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
+        if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED, 
DOM_STATE_CRASHED):
             return self.getDeviceController(deviceClass).sxprs()
         else:
             sxprs = []
@@ -2268,6 +2268,9 @@ class XendDomainInfo:
                 return XEN_API_VM_POWER_STATE_SUSPENDED
             else:
                 return XEN_API_VM_POWER_STATE_HALTED
+        elif info['crashed']:
+            # Crashed
+            return XEN_API_VM_POWER_STATE_CRASHED
         else:
             # We are either RUNNING or PAUSED
             if info['paused']:
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.