
From: Michal Privoznik <mprivozn@redhat.com> We already have a thread that listens on cloud-hypervisor's monitor for incoming events and processes them. What is missing though, is emitting of corresponding lifecycle events. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/ch/ch_events.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c index cd2f92a493..5125f26912 100644 --- a/src/ch/ch_events.c +++ b/src/ch/ch_events.c @@ -25,6 +25,7 @@ #include "ch_domain.h" #include "ch_events.h" #include "ch_process.h" +#include "domain_event.h" #include "virfile.h" #include "virlog.h" @@ -65,6 +66,58 @@ virCHEventStopProcess(virDomainObj *vm, return 0; } + +static void +virCHProcessEmitEvent(virDomainObj *vm, + virCHEvent ev) +{ + virCHDriver *driver = CH_DOMAIN_PRIVATE(vm)->driver; + virObjectEvent *event = NULL; + + switch (ev) { + case VIR_CH_EVENT_VM_BOOTED: + event = virDomainEventLifecycleNewFromObj(vm, + VIR_DOMAIN_EVENT_STARTED, + VIR_DOMAIN_EVENT_STARTED_BOOTED); + break; + case VIR_CH_EVENT_VM_PAUSED: + event = virDomainEventLifecycleNewFromObj(vm, + VIR_DOMAIN_EVENT_SUSPENDED, + VIR_DOMAIN_EVENT_SUSPENDED_PAUSED); + break; + case VIR_CH_EVENT_VM_RESUMED: + event = virDomainEventLifecycleNewFromObj(vm, + VIR_DOMAIN_EVENT_RESUMED, + VIR_DOMAIN_EVENT_RESUMED_UNPAUSED); + break; + case VIR_CH_EVENT_VM_REBOOTED: + event = virDomainEventRebootNewFromObj(vm); + break; + case VIR_CH_EVENT_VMM_SHUTDOWN: + case VIR_CH_EVENT_VM_SHUTDOWN: + event = virDomainEventLifecycleNewFromObj(vm, + VIR_DOMAIN_EVENT_SHUTDOWN, + VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED); + break; + case VIR_CH_EVENT_VMM_STARTING: + case VIR_CH_EVENT_VM_BOOTING: + case VIR_CH_EVENT_VM_REBOOTING: + case VIR_CH_EVENT_VM_DELETED: + case VIR_CH_EVENT_VM_PAUSING: + case VIR_CH_EVENT_VM_RESUMING: + case VIR_CH_EVENT_VM_SNAPSHOTTING: + case VIR_CH_EVENT_VM_SNAPSHOTTED: + case VIR_CH_EVENT_VM_RESTORING: + case VIR_CH_EVENT_VM_RESTORED: + case VIR_CH_EVENT_LAST: + default: + break; + } + + virObjectEventStateQueue(driver->domainEventState, event); +} + + static int virCHProcessEvent(virCHMonitor *mon, virJSONValue *eventJSON) @@ -91,6 +144,8 @@ virCHProcessEvent(virCHMonitor *mon, ev = virCHEventTypeFromString(full_event); VIR_DEBUG("%s: Source: %s, Event: %s, ev: %d", vm->def->name, source, event, ev); + virCHProcessEmitEvent(vm, ev); + switch (ev) { case VIR_CH_EVENT_VMM_STARTING: case VIR_CH_EVENT_VM_BOOTING: -- 2.49.1