diff mbox

[V9,2/2] Add a new qmp command to do checkpoint, query xen replication status

Message ID 1487920971-16519-3-git-send-email-zhangchen.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Zhang Chen Feb. 24, 2017, 7:22 a.m. UTC
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(+)

Comments

Eric Blake Feb. 24, 2017, 5:27 p.m. UTC | #1
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>
Zhang Chen Feb. 25, 2017, 2:33 a.m. UTC | #2
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 mbox

Patch

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