summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2011-08-05 16:05:50 -0600
committerEric Blake <eblake@redhat.com>2011-09-02 10:00:06 -0600
commitc1ff5dc63dc9d9ec05485bb695cbc66850759ee5 (patch)
tree16e54a8df625c4369501e26f479fd36cd4145406 /examples
parentLearn to use spicevmc as a redirection type for usb-redir (diff)
downloadlibvirt-c1ff5dc63dc9d9ec05485bb695cbc66850759ee5.tar.gz
libvirt-c1ff5dc63dc9d9ec05485bb695cbc66850759ee5.tar.bz2
libvirt-c1ff5dc63dc9d9ec05485bb695cbc66850759ee5.zip
snapshot: better events when starting paused
There are two classes of management apps that track events - one that only cares about on/off (and only needs to track EVENT_STARTED and EVENT_STOPPED), and one that cares about paused/running (also tracks EVENT_SUSPENDED/EVENT_RESUMED). To keep both classes happy, any transition that can go from inactive to paused must emit two back-to-back events - one for started and one for suspended (since later resuming of the domain will only send RESUMED, but the first class isn't tracking that). This also fixes a bug where virDomainCreateWithFlags with the VIR_DOMAIN_START_PAUSED flag failed to start paused when restoring from a managed save image. * include/libvirt/libvirt.h.in (VIR_DOMAIN_EVENT_SUSPENDED_RESTORED) (VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT) (VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT): New sub-events. * src/qemu/qemu_driver.c (qemuDomainRevertToSnapshot): Use them. (qemuDomainSaveImageStartVM): Likewise, and add parameter. (qemudDomainCreate, qemuDomainObjStart): Send suspended event when starting paused. (qemuDomainObjRestore): Add parameter. (qemuDomainObjStart, qemuDomainRestoreFlags): Update callers. * examples/domain-events/events-c/event-test.c (eventDetailToString): Map new detail strings.
Diffstat (limited to 'examples')
-rw-r--r--examples/domain-events/events-c/event-test.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/examples/domain-events/events-c/event-test.c b/examples/domain-events/events-c/event-test.c
index 4766a0df3..6a3ed26ab 100644
--- a/examples/domain-events/events-c/event-test.c
+++ b/examples/domain-events/events-c/event-test.c
@@ -87,19 +87,45 @@ static const char *eventDetailToString(int event, int detail) {
case VIR_DOMAIN_EVENT_STARTED_RESTORED:
ret = "Restored";
break;
+ case VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT:
+ ret = "Snapshot";
+ break;
}
break;
case VIR_DOMAIN_EVENT_SUSPENDED:
- if (detail == VIR_DOMAIN_EVENT_SUSPENDED_PAUSED)
+ switch (detail) {
+ case VIR_DOMAIN_EVENT_SUSPENDED_PAUSED:
ret = "Paused";
- else if (detail == VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED)
+ break;
+ case VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED:
ret = "Migrated";
+ break;
+ case VIR_DOMAIN_EVENT_SUSPENDED_IOERROR:
+ ret = "I/O Error";
+ break;
+ case VIR_DOMAIN_EVENT_SUSPENDED_WATCHDOG:
+ ret = "Watchdog";
+ break;
+ case VIR_DOMAIN_EVENT_SUSPENDED_RESTORED:
+ ret = "Restored";
+ break;
+ case VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT:
+ ret = "Snapshot";
+ break;
+ }
break;
case VIR_DOMAIN_EVENT_RESUMED:
- if (detail == VIR_DOMAIN_EVENT_RESUMED_UNPAUSED)
+ switch (detail) {
+ case VIR_DOMAIN_EVENT_RESUMED_UNPAUSED:
ret = "Unpaused";
- else if (detail == VIR_DOMAIN_EVENT_RESUMED_MIGRATED)
+ break;
+ case VIR_DOMAIN_EVENT_RESUMED_MIGRATED:
ret = "Migrated";
+ break;
+ case VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT:
+ ret = "Snapshot";
+ break;
+ }
break;
case VIR_DOMAIN_EVENT_STOPPED:
switch (detail) {
@@ -121,6 +147,9 @@ static const char *eventDetailToString(int event, int detail) {
case VIR_DOMAIN_EVENT_STOPPED_FAILED:
ret = "Failed";
break;
+ case VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT:
+ ret = "Snapshot";
+ break;
}
break;
}