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>
This commit is contained in:
Zhang Chen 2018-09-03 12:38:53 +08:00 committed by Jason Wang
parent 41b6b77921
commit f56c0065b8
2 changed files with 53 additions and 0 deletions

View File

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

View File

@ -1307,6 +1307,38 @@
##
{ 'command': 'xen-colo-do-checkpoint' }
##
# @COLOStatus:
#
# The result format for 'query-colo-status'.
#
# @mode: COLO running mode. If COLO is running, this field will return
# 'primary' or 'secondary'.
#
# @reason: describes the reason for the COLO exit.
#
# Since: 3.0
##
{ 'struct': 'COLOStatus',
'data': { 'mode': 'COLOMode', 'reason': 'COLOExitReason' } }
##
# @query-colo-status:
#
# Query COLO status while the vm is running.
#
# Returns: A @COLOStatus object showing the status.
#
# Example:
#
# -> { "execute": "query-colo-status" }
# <- { "return": { "mode": "primary", "active": true, "reason": "request" } }
#
# Since: 3.0
##
{ 'command': 'query-colo-status',
'returns': 'COLOStatus' }
##
# @migrate-recover:
#