Message ID | 1487920971-16519-3-git-send-email-zhangchen.fnst@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 02/24/2017 01:22 AM, Zhang Chen wrote: > We can call this qmp command to do checkpoint outside of qemu. > Xen colo will need this function. > > Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> > Signed-off-by: Wen Congyang <wencongyang@gmail.com> > --- > migration/colo.c | 23 +++++++++++++++++++++++ > qapi-schema.json | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 72 insertions(+) > > +++ b/qapi-schema.json > @@ -5931,6 +5931,55 @@ > 'data': { 'enable': 'bool', 'primary': 'bool', '*failover' : 'bool' } } > > ## > +# @ReplicationStatus: > +# > +# The result format for 'query-xen-replication-status'. > +# > +# @error: true to error, false to normal. Maybe: true if an error happened, false if replication is normal Maintainer could touch that up during application, so it doesn't necessarily require a v10. > +## > +# @query-xen-replication-status: > +# > +# Query replication status while the vm is running. > +# > +# Returns: A @ReplicationResult object showing the status. > +# > +# Example: > +# > +# -> { "execute": "query-xen-replication-status" } > +# <- { "return": [ { "error": false }, > +# { "error": true } ] } This example is bogus. The command does NOT return an array. It is sufficient to use: { "return": { "error": false } } but if you want, you could instead do: { "return": { "error": true, "desc": "..." } } but if you do that, please be sure that desc matches an actual error code that could occur, and not something made up. If all you do is fix the example with the simpler "error":false (and maybe the maintainer is okay doing that), then you can add: Reviewed-by: Eric Blake <eblake@redhat.com>
On 02/25/2017 01:27 AM, Eric Blake wrote: > On 02/24/2017 01:22 AM, Zhang Chen wrote: >> We can call this qmp command to do checkpoint outside of qemu. >> Xen colo will need this function. >> >> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> >> Signed-off-by: Wen Congyang <wencongyang@gmail.com> >> --- >> migration/colo.c | 23 +++++++++++++++++++++++ >> qapi-schema.json | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 72 insertions(+) >> >> +++ b/qapi-schema.json >> @@ -5931,6 +5931,55 @@ >> 'data': { 'enable': 'bool', 'primary': 'bool', '*failover' : 'bool' } } >> >> ## >> +# @ReplicationStatus: >> +# >> +# The result format for 'query-xen-replication-status'. >> +# >> +# @error: true to error, false to normal. > Maybe: > > true if an error happened, false if replication is normal > > Maintainer could touch that up during application, so it doesn't > necessarily require a v10. Maintainer may be very busy, I will do this fix in V10. > >> +## >> +# @query-xen-replication-status: >> +# >> +# Query replication status while the vm is running. >> +# >> +# Returns: A @ReplicationResult object showing the status. >> +# >> +# Example: >> +# >> +# -> { "execute": "query-xen-replication-status" } >> +# <- { "return": [ { "error": false }, >> +# { "error": true } ] } > This example is bogus. The command does NOT return an array. It is > sufficient to use: > > { "return": { "error": false } } > > but if you want, you could instead do: > > { "return": { "error": true, "desc": "..." } } > > but if you do that, please be sure that desc matches an actual error > code that could occur, and not something made up. > > If all you do is fix the example with the simpler "error":false (and > maybe the maintainer is okay doing that), then you can add: > Reviewed-by: Eric Blake <eblake@redhat.com> I will fix the example in V10, and which maintainer can pick up this patch? Thanks Zhang Chen
diff --git a/migration/colo.c b/migration/colo.c index 0114899..2b241b4 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -130,6 +130,29 @@ void qmp_xen_set_replication(bool enable, bool primary, } } +ReplicationStatus *qmp_query_xen_replication_status(Error **errp) +{ + Error *err = NULL; + ReplicationStatus *s = g_new0(ReplicationStatus, 1); + + replication_get_error_all(&err); + if (err) { + s->error = true; + s->has_desc = true; + s->desc = g_strdup(error_get_pretty(err)); + } else { + s->error = false; + } + + error_free(err); + return s; +} + +void qmp_xen_colo_do_checkpoint(Error **errp) +{ + replication_do_checkpoint_all(errp); +} + static void colo_send_message(QEMUFile *f, COLOMessage msg, Error **errp) { diff --git a/qapi-schema.json b/qapi-schema.json index 9445b93..1310f61 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -5931,6 +5931,55 @@ 'data': { 'enable': 'bool', 'primary': 'bool', '*failover' : 'bool' } } ## +# @ReplicationStatus: +# +# The result format for 'query-xen-replication-status'. +# +# @error: true to error, false to normal. +# +# @desc: #optional the human readable error description string, when +# @error is 'true'. +# +# Since: 2.9 +## +{ 'struct': 'ReplicationStatus', + 'data': { 'error': 'bool', '*desc': 'str' } } + +## +# @query-xen-replication-status: +# +# Query replication status while the vm is running. +# +# Returns: A @ReplicationResult object showing the status. +# +# Example: +# +# -> { "execute": "query-xen-replication-status" } +# <- { "return": [ { "error": false }, +# { "error": true } ] } +# +# Since: 2.9 +## +{ 'command': 'query-xen-replication-status', + 'returns': 'ReplicationStatus' } + +## +# @xen-colo-do-checkpoint: +# +# Xen uses this command to notify replication to trigger a checkpoint. +# +# Returns: nothing. +# +# Example: +# +# -> { "execute": "xen-colo-do-checkpoint" } +# <- { "return": {} } +# +# Since: 2.9 +## +{ 'command': 'xen-colo-do-checkpoint' } + +## # @GICCapability: # # The struct describes capability for a specific GIC (Generic