提交 fc4115e8 编写于 作者: J Jiri Denemark

Add PMSUSPENDED life cycle event

While PMSUSPENDED state was added a long time ago, we didn't have
corresponding life cycle event.
上级 afab4824
...@@ -90,6 +90,9 @@ const char *eventToString(int event) { ...@@ -90,6 +90,9 @@ const char *eventToString(int event) {
case VIR_DOMAIN_EVENT_SHUTDOWN: case VIR_DOMAIN_EVENT_SHUTDOWN:
ret = "Shutdown"; ret = "Shutdown";
break; break;
case VIR_DOMAIN_EVENT_PMSUSPENDED:
ret = "PMSuspended";
break;
} }
return ret; return ret;
} }
...@@ -193,6 +196,13 @@ static const char *eventDetailToString(int event, int detail) { ...@@ -193,6 +196,13 @@ static const char *eventDetailToString(int event, int detail) {
break; break;
} }
break; break;
case VIR_DOMAIN_EVENT_PMSUSPENDED:
switch ((virDomainEventPMSuspendedDetailType) detail) {
case VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY:
ret = "Memory";
break;
}
break;
} }
return ret; return ret;
} }
......
...@@ -436,7 +436,8 @@ def eventToString(event): ...@@ -436,7 +436,8 @@ def eventToString(event):
"Suspended", "Suspended",
"Resumed", "Resumed",
"Stopped", "Stopped",
"Shutdown" ); "Shutdown",
"PMSuspended" );
return eventStrings[event]; return eventStrings[event];
def detailToString(event, detail): def detailToString(event, detail):
...@@ -448,6 +449,7 @@ def detailToString(event, detail): ...@@ -448,6 +449,7 @@ def detailToString(event, detail):
( "Unpaused", "Migrated", "Snapshot" ), ( "Unpaused", "Migrated", "Snapshot" ),
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"), ( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"),
( "Finished" ) ( "Finished" )
( "Memory", )
) )
return eventStrings[event][detail] return eventStrings[event][detail]
......
...@@ -2845,6 +2845,7 @@ typedef enum { ...@@ -2845,6 +2845,7 @@ typedef enum {
VIR_DOMAIN_EVENT_RESUMED = 4, VIR_DOMAIN_EVENT_RESUMED = 4,
VIR_DOMAIN_EVENT_STOPPED = 5, VIR_DOMAIN_EVENT_STOPPED = 5,
VIR_DOMAIN_EVENT_SHUTDOWN = 6, VIR_DOMAIN_EVENT_SHUTDOWN = 6,
VIR_DOMAIN_EVENT_PMSUSPENDED = 7,
#ifdef VIR_ENUM_SENTINELS #ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_EVENT_LAST VIR_DOMAIN_EVENT_LAST
...@@ -2961,6 +2962,19 @@ typedef enum { ...@@ -2961,6 +2962,19 @@ typedef enum {
#endif #endif
} virDomainEventShutdownDetailType; } virDomainEventShutdownDetailType;
/**
* virDomainEventPMSuspendedDetailType:
*
* Details about the 'pmsuspended' lifecycle event
*/
typedef enum {
VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY = 0, /* Guest was PM suspended to memory */
#ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_EVENT_PMSUSPENDED_LAST
#endif
} virDomainEventPMSuspendedDetailType;
/** /**
* virConnectDomainEventCallback: * virConnectDomainEventCallback:
* @conn: virConnect connection * @conn: virConnect connection
......
...@@ -1120,6 +1120,7 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED, ...@@ -1120,6 +1120,7 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
{ {
struct qemud_driver *driver = qemu_driver; struct qemud_driver *driver = qemu_driver;
virDomainEventPtr event = NULL; virDomainEventPtr event = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virDomainObjLock(vm); virDomainObjLock(vm);
event = virDomainEventPMSuspendNewFromObj(vm); event = virDomainEventPMSuspendNewFromObj(vm);
...@@ -1131,6 +1132,10 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED, ...@@ -1131,6 +1132,10 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjSetState(vm, VIR_DOMAIN_PMSUSPENDED, virDomainObjSetState(vm, VIR_DOMAIN_PMSUSPENDED,
VIR_DOMAIN_PMSUSPENDED_UNKNOWN); VIR_DOMAIN_PMSUSPENDED_UNKNOWN);
lifecycleEvent =
virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_PMSUSPENDED,
VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY);
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) { if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
VIR_WARN("Unable to save status on vm %s after suspend event", VIR_WARN("Unable to save status on vm %s after suspend event",
...@@ -1143,9 +1148,12 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED, ...@@ -1143,9 +1148,12 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjUnlock(vm); virDomainObjUnlock(vm);
if (event) { if (event || lifecycleEvent) {
qemuDriverLock(driver); qemuDriverLock(driver);
qemuDomainEventQueue(driver, event); if (event)
qemuDomainEventQueue(driver, event);
if (lifecycleEvent)
qemuDomainEventQueue(driver, lifecycleEvent);
qemuDriverUnlock(driver); qemuDriverUnlock(driver);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册