[PATCH 3/5] ch: Propagate lifecycle events

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

 



From: Michal Privoznik <mprivozn@xxxxxxxxxx>

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@xxxxxxxxxx>
---
 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




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux