Re: [libvirt] [PATCH] libvirt supports Guest Panicked

2013-05-28 Thread chenfan
On Mon, 2013-05-27 at 14:28 +0200, Viktor Mihajlovski wrote:
 On 05/27/2013 10:41 AM, Chen Fan wrote:
  From: chenfan chen.fan.f...@cn.fujitsu.com
  @@ -3185,6 +3194,9 @@ int qemuMonitorVMStatusToPausedReason(const char 
  *status)
case QEMU_MONITOR_VM_STATUS_WATCHDOG:
return VIR_DOMAIN_PAUSED_WATCHDOG;
 
  +case QEMU_MONITOR_VM_STATUS_GUEST_PANICKED:
  +return VIR_DOMAIN_PAUSED_GUEST_PANICKED;
  +
/* unreachable from this point on */
case QEMU_MONITOR_VM_STATUS_LAST:
;
 I just have crashed the guest while libvirtd wasn't running,
 after a restart, virsh domstate --reason always reports
 paused (guest panicked) while I would expect crashed (guest panicked).
 Either QEMU is reporting a bogus state or the state computation
 is flawed somewhere...
 
Then I will fix this bug. and remain on_crash default behavior in the
XML.
Thanks for your comments.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH] libvirt supports Guest Panicked

2013-05-27 Thread Chen Fan
From: chenfan chen.fan.f...@cn.fujitsu.com

This patch implements qemu_driver supporting guest panicked, modified the 
'on_crash' default value to 'preserve'.
---
 examples/domain-events/events-c/event-test.c | 10 +++
 include/libvirt/libvirt.h.in | 16 +
 src/conf/domain_conf.c   | 14 ++--
 src/qemu/qemu_monitor.c  | 14 +++-
 src/qemu/qemu_monitor.h  |  5 ++
 src/qemu/qemu_monitor_json.c |  7 ++
 src/qemu/qemu_process.c  | 99 +++-
 tools/virsh-domain-monitor.c |  8 +++
 8 files changed, 166 insertions(+), 7 deletions(-)

diff --git a/examples/domain-events/events-c/event-test.c 
b/examples/domain-events/events-c/event-test.c
index eeff50f..1b425fb 100644
--- a/examples/domain-events/events-c/event-test.c
+++ b/examples/domain-events/events-c/event-test.c
@@ -93,6 +93,9 @@ const char *eventToString(int event) {
 case VIR_DOMAIN_EVENT_PMSUSPENDED:
 ret = PMSuspended;
 break;
+case VIR_DOMAIN_EVENT_CRASHED:
+ret = Crashed;
+break;
 }
 return ret;
 }
@@ -209,6 +212,13 @@ static const char *eventDetailToString(int event, int 
detail) {
 break;
 }
 break;
+case VIR_DOMAIN_EVENT_CRASHED:
+   switch ((virDomainEventCrashedDetailType) detail) {
+   case VIR_DOMAIN_EVENT_CRASHED_PANICKED:
+   ret = Panicked;
+   break;
+   }
+   break;
 }
 return ret;
 }
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 1804c93..56c6c5c 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -155,6 +155,7 @@ typedef enum {
 VIR_DOMAIN_RUNNING_SAVE_CANCELED = 7,   /* returned from failed save 
process */
 VIR_DOMAIN_RUNNING_WAKEUP = 8,  /* returned from pmsuspended due to
wakeup event */
+VIR_DOMAIN_RUNNING_CRASHED = 9,  /* resumed from crashed */
 
 #ifdef VIR_ENUM_SENTINELS
 VIR_DOMAIN_RUNNING_LAST
@@ -180,6 +181,7 @@ typedef enum {
 VIR_DOMAIN_PAUSED_FROM_SNAPSHOT = 7, /* paused after restoring from 
snapshot */
 VIR_DOMAIN_PAUSED_SHUTTING_DOWN = 8, /* paused during shutdown process */
 VIR_DOMAIN_PAUSED_SNAPSHOT = 9,  /* paused while creating a snapshot */
+VIR_DOMAIN_PAUSED_GUEST_PANICKED = 10, /* paused due to a guest panicked 
event */
 
 #ifdef VIR_ENUM_SENTINELS
 VIR_DOMAIN_PAUSED_LAST
@@ -189,6 +191,7 @@ typedef enum {
 typedef enum {
 VIR_DOMAIN_SHUTDOWN_UNKNOWN = 0,/* the reason is unknown */
 VIR_DOMAIN_SHUTDOWN_USER = 1,   /* shutting down on user request */
+VIR_DOMAIN_SHUTDOWN_CRASHED = 2,/* domain crashed */
 
 #ifdef VIR_ENUM_SENTINELS
 VIR_DOMAIN_SHUTDOWN_LAST
@@ -212,6 +215,7 @@ typedef enum {
 
 typedef enum {
 VIR_DOMAIN_CRASHED_UNKNOWN = 0, /* crashed for unknown reason */
+VIR_DOMAIN_CRASHED_PANICKED = 1, /* domain panicked */
 
 #ifdef VIR_ENUM_SENTINELS
 VIR_DOMAIN_CRASHED_LAST
@@ -3319,6 +3323,7 @@ typedef enum {
 VIR_DOMAIN_EVENT_STOPPED = 5,
 VIR_DOMAIN_EVENT_SHUTDOWN = 6,
 VIR_DOMAIN_EVENT_PMSUSPENDED = 7,
+VIR_DOMAIN_EVENT_CRASHED = 8,
 
 #ifdef VIR_ENUM_SENTINELS
 VIR_DOMAIN_EVENT_LAST
@@ -3450,6 +3455,17 @@ typedef enum {
 #endif
 } virDomainEventPMSuspendedDetailType;
 
+/*
+ * Details about the 'crashed' lifecycle event
+ */
+typedef enum {
+VIR_DOMAIN_EVENT_CRASHED_PANICKED = 0, /* Guest was panicked */
+
+#ifdef VIR_ENUM_SENTINELS
+VIR_DOMAIN_EVENT_CRASHED_LAST
+#endif
+} virDomainEventCrashedDetailType;
+
 /**
  * virConnectDomainEventCallback:
  * @conn: virConnect connection
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a9656af..3f0786e 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -642,7 +642,8 @@ VIR_ENUM_IMPL(virDomainRunningReason, 
VIR_DOMAIN_RUNNING_LAST,
   unpaused,
   migration canceled,
   save canceled,
-  wakeup)
+  wakeup,
+  from crashed)
 
 VIR_ENUM_IMPL(virDomainBlockedReason, VIR_DOMAIN_BLOCKED_LAST,
   unknown)
@@ -657,11 +658,13 @@ VIR_ENUM_IMPL(virDomainPausedReason, 
VIR_DOMAIN_PAUSED_LAST,
   watchdog,
   from snapshot,
   shutdown,
-  snapshot)
+  snapshot,
+  guest panicked)
 
 VIR_ENUM_IMPL(virDomainShutdownReason, VIR_DOMAIN_SHUTDOWN_LAST,
   unknown,
-  user)
+  user,
+  crashed)
 
 VIR_ENUM_IMPL(virDomainShutoffReason, VIR_DOMAIN_SHUTOFF_LAST,
   unknown,
@@ -674,7 +677,8 @@ VIR_ENUM_IMPL(virDomainShutoffReason, 
VIR_DOMAIN_SHUTOFF_LAST,
   from snapshot)
 
 VIR_ENUM_IMPL(virDomainCrashedReason, VIR_DOMAIN_CRASHED_LAST,
-  

Re: [libvirt] [PATCH] libvirt supports Guest Panicked

2013-05-27 Thread Viktor Mihajlovski

On 05/27/2013 10:41 AM, Chen Fan wrote:

From: chenfan chen.fan.f...@cn.fujitsu.com

This patch implements qemu_driver supporting guest panicked, modified the 
'on_crash' default value to 'preserve'.

It's not good to change the default behavior, if someone wants
preserve, make them specify it in the XML.

---
  examples/domain-events/events-c/event-test.c | 10 +++
  include/libvirt/libvirt.h.in | 16 +
  src/conf/domain_conf.c   | 14 ++--
  src/qemu/qemu_monitor.c  | 14 +++-
  src/qemu/qemu_monitor.h  |  5 ++
  src/qemu/qemu_monitor_json.c |  7 ++
  src/qemu/qemu_process.c  | 99 +++-
  tools/virsh-domain-monitor.c |  8 +++
  8 files changed, 166 insertions(+), 7 deletions(-)


not an issue, since it's a fairly small patch, but one could imagine to
split it up into a 3-part series: general libvirt, qemu and virsh.

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
@@ -10943,7 +10947,7 @@ virDomainDefParseXML(xmlDocPtr xml,
  if (virDomainEventActionParseXML(ctxt, on_crash,
   string(./on_crash[1]),
   def-onCrash,
- VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY,
+ VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE,
   virDomainLifecycleCrashTypeFromString)  
0)
  goto error;


see above, it's not good to change defaults, plus make check fails
with this hunk applied.

Other than that looks good to me (Tested on s390x with destroy, reboot
and preserve). Looking forward to see this in libvirt.

--

Mit freundlichen Grüßen/Kind Regards
   Viktor Mihajlovski

IBM Deutschland Research  Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] libvirt supports Guest Panicked

2013-05-27 Thread Viktor Mihajlovski

On 05/27/2013 10:41 AM, Chen Fan wrote:

From: chenfan chen.fan.f...@cn.fujitsu.com
@@ -3185,6 +3194,9 @@ int qemuMonitorVMStatusToPausedReason(const char *status)
  case QEMU_MONITOR_VM_STATUS_WATCHDOG:
  return VIR_DOMAIN_PAUSED_WATCHDOG;

+case QEMU_MONITOR_VM_STATUS_GUEST_PANICKED:
+return VIR_DOMAIN_PAUSED_GUEST_PANICKED;
+
  /* unreachable from this point on */
  case QEMU_MONITOR_VM_STATUS_LAST:
  ;

I just have crashed the guest while libvirtd wasn't running,
after a restart, virsh domstate --reason always reports
paused (guest panicked) while I would expect crashed (guest panicked).
Either QEMU is reporting a bogus state or the state computation
is flawed somewhere...

--

Mit freundlichen Grüßen/Kind Regards
   Viktor Mihajlovski

IBM Deutschland Research  Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list