aboutsummaryrefslogtreecommitdiff
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)
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)
{