summary refs log tree commit diff stats
path: root/migration/colo.c
diff options
context:
space:
mode:
authorZhang Chen <zhangckid@gmail.com>2018-09-03 12:38:53 +0800
committerJason Wang <jasowang@redhat.com>2018-10-19 11:15:03 +0800
commitf56c0065b8dd65489621bb7ca1a94d8004d68da1 (patch)
treea68f32d6406c10b2018b20fb634907c7d103c9b8 /migration/colo.c
parent41b6b7792179591553432b207e1b545fb8bd965b (diff)
downloadfocaccia-qemu-f56c0065b8dd65489621bb7ca1a94d8004d68da1.tar.gz
focaccia-qemu-f56c0065b8dd65489621bb7ca1a94d8004d68da1.zip
qapi: Add new command to query colo status
Libvirt or other high level software can use this command query colo status.
You can test this command like that:
{'execute':'query-colo-status'}

Signed-off-by: Zhang Chen <zhangckid@gmail.com>
Signed-off-by: Zhang Chen <chen.zhang@intel.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'migration/colo.c')
-rw-r--r--migration/colo.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/migration/colo.c b/migration/colo.c
index 2cdd366276..94c4e097da 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -29,6 +29,7 @@
 #include "net/colo.h"
 #include "block/block.h"
 #include "qapi/qapi-events-migration.h"
+#include "qapi/qmp/qerror.h"
 
 static bool vmstate_loading;
 static Notifier packets_compare_notifier;
@@ -237,6 +238,26 @@ void qmp_xen_colo_do_checkpoint(Error **errp)
 #endif
 }
 
+COLOStatus *qmp_query_colo_status(Error **errp)
+{
+    COLOStatus *s = g_new0(COLOStatus, 1);
+
+    s->mode = get_colo_mode();
+
+    switch (failover_get_state()) {
+    case FAILOVER_STATUS_NONE:
+        s->reason = COLO_EXIT_REASON_NONE;
+        break;
+    case FAILOVER_STATUS_REQUIRE:
+        s->reason = COLO_EXIT_REASON_REQUEST;
+        break;
+    default:
+        s->reason = COLO_EXIT_REASON_ERROR;
+    }
+
+    return s;
+}
+
 static void colo_send_message(QEMUFile *f, COLOMessage msg,
                               Error **errp)
 {