From: Markus Armbruster <armbru@redhat.com>
To: Zhang Chen <zhangckid@gmail.com>
Cc: qemu-devel@nongnu.org, Jason Wang <jasowang@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH V7 11/17] qapi: Add new command to query colo status
Date: Tue, 15 May 2018 16:26:08 +0200 [thread overview]
Message-ID: <877eo56lmn.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <1526268228-27951-12-git-send-email-zhangckid@gmail.com> (Zhang Chen's message of "Mon, 14 May 2018 11:23:42 +0800")
Zhang Chen <zhangckid@gmail.com> writes:
> 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>
> ---
> migration/colo.c | 34 ++++++++++++++++++++++++++++++++++
> qapi/migration.json | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 67 insertions(+)
>
> diff --git a/migration/colo.c b/migration/colo.c
> index 8ca6381..314344c 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,39 @@ void qmp_xen_colo_do_checkpoint(Error **errp)
> #endif
> }
>
> +COLOStatus *qmp_query_colo_status(Error **errp)
> +{
> + int state;
> + COLOStatus *s = g_new0(COLOStatus, 1);
> +
> + if (get_colo_mode() == COLO_MODE_UNKNOWN) {
> + error_setg(errp, QERR_FEATURE_DISABLED, "colo");
> + s->colo_running = false;
> + goto out;
> + } else if (get_colo_mode() == COLO_MODE_PRIMARY) {
> + state = migrate_get_current()->state;
> + } else {
> + state = migration_incoming_get_current()->state;
> + }
Indentation's off, as patchew pointed out. Perhaps the maintainer could
fix that for you.
> + s->colo_running = state == MIGRATION_STATUS_COLO;
> +
> +out:
> + s->mode = get_colo_mode();
I'm okay with this.
If you need to respin anyway, consider whether you like this better:
s->mode = get_colo_mode();
switch (s->mode) {
case COLO_MODE_UNKNOWN:
error_setg(errp, "COLO is disabled");
state = MIGRATION_STATUS_NONE;
break;
case COLO_MODE_PRIMARY:
state = migrate_get_current()->state;
break;
case COLO_MODE_SECONDARY:
state = migration_incoming_get_current()->state;
break;
default:
abort();
}
s->colo_running = state == MIGRATION_STATUS_COLO;
Aside: we should really finish off the QERR_ macros.
> +
> + 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)
> {
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 55dae48..13589ba 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -1220,3 +1220,36 @@
> # Since: 2.9
> ##
> { 'command': 'xen-colo-do-checkpoint' }
> +
> +##
> +# @COLOStatus:
> +#
> +# The result format for 'query-colo-status'.
> +#
> +# @mode: which COLO mode the VM was in when it exited.
Pardon my COLO-ignorance...
What does "when it exited" mean?
What's the value of @mode before "it exited"?
> +# @colo-running: true if COLO is running.
If COLO is running, has "it exited", yet?
> +#
> +# @reason: describes the reason for the COLO exit.
What's the value of @reason before a "COLO exit"?
Remember, while a COLO_EXIT event is tied to an exit, a
query-colo-status can be executed at any time, in particular before any
"COLO exit".
> +#
> +# Since: 2.13
> +##
> +{ 'struct': 'COLOStatus',
> + 'data': { 'mode': 'COLOMode', 'colo-running': 'bool', '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", "colo-running": true, "reason": "request" } }
> +#
> +# Since: 2.13
> +##
> +{ 'command': 'query-colo-status',
> + 'returns': 'COLOStatus' }
Almost ready :)
next prev parent reply other threads:[~2018-05-15 14:26 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-14 3:23 [Qemu-devel] [PATCH V7 00/17] COLO: integrate colo frame with block replication and COLO proxy Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 01/17] filter-rewriter: fix memory leak for connection in connection_track_table Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 02/17] colo-compare: implement the process of checkpoint Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 03/17] colo-compare: use notifier to notify packets comparing result Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 04/17] COLO: integrate colo compare with colo frame Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 05/17] COLO: Add block replication into colo process Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 06/17] COLO: Remove colo_state migration struct Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 07/17] COLO: Load dirty pages into SVM's RAM cache firstly Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 08/17] ram/COLO: Record the dirty pages that SVM received Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 09/17] COLO: Flush memory data from ram cache Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 10/17] qmp event: Add COLO_EXIT event to notify users while exited COLO Zhang Chen
2018-05-15 14:29 ` Markus Armbruster
2018-05-16 13:41 ` Zhang Chen
2018-05-17 8:19 ` Markus Armbruster
2018-05-20 15:20 ` Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 11/17] qapi: Add new command to query colo status Zhang Chen
2018-05-15 14:26 ` Markus Armbruster [this message]
2018-05-16 13:14 ` Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 12/17] savevm: split the process of different stages for loadvm/savevm Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 13/17] COLO: flush host dirty ram from cache Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 14/17] filter: Add handle_event method for NetFilterClass Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 15/17] filter-rewriter: handle checkpoint and failover event Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 16/17] COLO: notify net filters about checkpoint/failover event Zhang Chen
2018-05-14 3:23 ` [Qemu-devel] [PATCH V7 17/17] COLO: quick failover process by kick COLO thread Zhang Chen
2018-05-14 6:57 ` [Qemu-devel] [PATCH V7 00/17] COLO: integrate colo frame with block replication and COLO proxy no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877eo56lmn.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=jasowang@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=zhangckid@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.