[PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo

Hao Wang posted 7 patches 5 years, 3 months ago
There is a newer version of this series
[PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo
Posted by Hao Wang 5 years, 3 months ago
Implement qemuMonitorJSONExtractDirtyRateInfo to deal with the return from
qmp "query-dirty-rate", and store them in virDomainDirtyRateInfo.

Signed-off-by: Hao Wang <wanghao232@huawei.com>
Reviewed-by: Chuan Zheng <zhengchuan@huawei.com>
---
 include/libvirt/libvirt-domain.h | 16 +++++++++++
 src/qemu/qemu_monitor_json.c     | 48 ++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index c7e22d4af1..9bf4f8a8cf 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -5012,6 +5012,22 @@ int virDomainBackupBegin(virDomainPtr domain,
 char *virDomainBackupGetXMLDesc(virDomainPtr domain,
                                 unsigned int flags);
 
+/**
+ * virDomainDirtyRateStatus:
+ *
+ * Details on the cause of a dirtyrate calculation status.
+ */
+
+typedef enum {
+    VIR_DOMAIN_DIRTYRATE_UNSTARTED = 0, /* the dirtyrate calculation has not been started */
+    VIR_DOMAIN_DIRTYRATE_MEASURING = 1, /* the dirtyrate calculation is measuring */
+    VIR_DOMAIN_DIRTYRATE_MEASURED  = 2, /* the dirtyrate calculation is completed */
+
+# ifdef VIR_ENUM_SENTINELS
+    VIR_DOMAIN_DIRTYRATE_LAST
+# endif
+} virDomainDirtyRateStatus;
+
 /**
  * virDomainDirtyRateInfo:
  *
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e88e6aebaf..37612a9bba 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -9414,3 +9414,51 @@ qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon,
     return virJSONValueGetBoolean(virJSONValueObjectGet(reply, "return"),
                                   migratable);
 }
+
+
+VIR_ENUM_DECL(qemuDomainDirtyRateStatus);
+VIR_ENUM_IMPL(qemuDomainDirtyRateStatus,
+              VIR_DOMAIN_DIRTYRATE_LAST,
+              "unstarted",
+              "measuring",
+              "measured");
+
+static int
+qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data,
+                                    virDomainDirtyRateInfoPtr info)
+{
+    const char *status;
+    int statusID;
+
+    if (!(status = virJSONValueObjectGetString(data, "status"))) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("query-dirty-rate reply was missing 'status' data"));
+        return -1;
+    }
+
+    if ((statusID = qemuDomainDirtyRateStatusTypeFromString(status)) < 0) {
+        return -1;
+    }
+    info->status = statusID;
+
+    if ((info->status == VIR_DOMAIN_DIRTYRATE_MEASURED) &&
+        (virJSONValueObjectGetNumberLong(data, "dirty-rate", &(info->dirtyRate)) < 0)) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("query-dirty-rate reply was missing 'dirty-rate' data"));
+        return -1;
+    }
+
+    if (virJSONValueObjectGetNumberLong(data, "start-time", &(info->startTime)) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("query-dirty-rate reply was missing 'start-time' data"));
+        return -1;
+    }
+
+    if (virJSONValueObjectGetNumberLong(data, "calc-time", &(info->calcTime)) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("query-dirty-rate reply was missing 'calc-time' data"));
+        return -1;
+    }
+
+    return 0;
+}
-- 
2.23.0


Re: [PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo
Posted by Daniel Henrique Barboza 5 years, 3 months ago

On 10/19/20 9:58 AM, Hao Wang wrote:
> Implement qemuMonitorJSONExtractDirtyRateInfo to deal with the return from
> qmp "query-dirty-rate", and store them in virDomainDirtyRateInfo.
> 
> Signed-off-by: Hao Wang <wanghao232@huawei.com>
> Reviewed-by: Chuan Zheng <zhengchuan@huawei.com>
> ---

This patch failed to compile in my env:




../src/qemu/qemu_monitor_json.c:9649:1: error: ‘qemuMonitorJSONExtractDirtyRateInfo’ defined but not used [-Werror=unused-function]
  9649 | qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data,
       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors




DHB



>   include/libvirt/libvirt-domain.h | 16 +++++++++++
>   src/qemu/qemu_monitor_json.c     | 48 ++++++++++++++++++++++++++++++++
>   2 files changed, 64 insertions(+)
> 
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index c7e22d4af1..9bf4f8a8cf 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -5012,6 +5012,22 @@ int virDomainBackupBegin(virDomainPtr domain,
>   char *virDomainBackupGetXMLDesc(virDomainPtr domain,
>                                   unsigned int flags);
>   
> +/**
> + * virDomainDirtyRateStatus:
> + *
> + * Details on the cause of a dirtyrate calculation status.
> + */
> +
> +typedef enum {
> +    VIR_DOMAIN_DIRTYRATE_UNSTARTED = 0, /* the dirtyrate calculation has not been started */
> +    VIR_DOMAIN_DIRTYRATE_MEASURING = 1, /* the dirtyrate calculation is measuring */
> +    VIR_DOMAIN_DIRTYRATE_MEASURED  = 2, /* the dirtyrate calculation is completed */
> +
> +# ifdef VIR_ENUM_SENTINELS
> +    VIR_DOMAIN_DIRTYRATE_LAST
> +# endif
> +} virDomainDirtyRateStatus;
> +
>   /**
>    * virDomainDirtyRateInfo:
>    *
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index e88e6aebaf..37612a9bba 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -9414,3 +9414,51 @@ qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon,
>       return virJSONValueGetBoolean(virJSONValueObjectGet(reply, "return"),
>                                     migratable);
>   }
> +
> +
> +VIR_ENUM_DECL(qemuDomainDirtyRateStatus);
> +VIR_ENUM_IMPL(qemuDomainDirtyRateStatus,
> +              VIR_DOMAIN_DIRTYRATE_LAST,
> +              "unstarted",
> +              "measuring",
> +              "measured");
> +
> +static int
> +qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data,
> +                                    virDomainDirtyRateInfoPtr info)
> +{
> +    const char *status;
> +    int statusID;
> +
> +    if (!(status = virJSONValueObjectGetString(data, "status"))) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("query-dirty-rate reply was missing 'status' data"));
> +        return -1;
> +    }
> +
> +    if ((statusID = qemuDomainDirtyRateStatusTypeFromString(status)) < 0) {
> +        return -1;
> +    }
> +    info->status = statusID;
> +
> +    if ((info->status == VIR_DOMAIN_DIRTYRATE_MEASURED) &&
> +        (virJSONValueObjectGetNumberLong(data, "dirty-rate", &(info->dirtyRate)) < 0)) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("query-dirty-rate reply was missing 'dirty-rate' data"));
> +        return -1;
> +    }
> +
> +    if (virJSONValueObjectGetNumberLong(data, "start-time", &(info->startTime)) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("query-dirty-rate reply was missing 'start-time' data"));
> +        return -1;
> +    }
> +
> +    if (virJSONValueObjectGetNumberLong(data, "calc-time", &(info->calcTime)) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("query-dirty-rate reply was missing 'calc-time' data"));
> +        return -1;
> +    }
> +
> +    return 0;
> +}
> 

Re: [PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo
Posted by Hao Wang 5 years, 3 months ago
Hi Daniel,

For the warning in your compiling -- "error: ‘qemuMonitorJSONExtractDirtyRateInfo’ defined but not used [-Werror=unused-function]":

" qemuMonitorJSONExtractDirtyRateInfo" would be called by function "qemuMonitorJSONQueryDirtyRate" in [PATCH 3/7].
So please apply all the serial of patches before your compiling. Thanks!

BR,
Hao


在 2020/10/24 4:05, Daniel Henrique Barboza 写道:
> 
> 
> On 10/19/20 9:58 AM, Hao Wang wrote:
>> Implement qemuMonitorJSONExtractDirtyRateInfo to deal with the return from
>> qmp "query-dirty-rate", and store them in virDomainDirtyRateInfo.
>>
>> Signed-off-by: Hao Wang <wanghao232@huawei.com>
>> Reviewed-by: Chuan Zheng <zhengchuan@huawei.com>
>> ---
> 
> This patch failed to compile in my env:
> 
> 
> 
> 
> ../src/qemu/qemu_monitor_json.c:9649:1: error: ‘qemuMonitorJSONExtractDirtyRateInfo’ defined but not used [-Werror=unused-function]
>  9649 | qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data,
>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> 
> 
> 
> 
> DHB
> 
> 
> 
>>   include/libvirt/libvirt-domain.h | 16 +++++++++++
>>   src/qemu/qemu_monitor_json.c     | 48 ++++++++++++++++++++++++++++++++
>>   2 files changed, 64 insertions(+)
>>
>> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
>> index c7e22d4af1..9bf4f8a8cf 100644
>> --- a/include/libvirt/libvirt-domain.h
>> +++ b/include/libvirt/libvirt-domain.h
>> @@ -5012,6 +5012,22 @@ int virDomainBackupBegin(virDomainPtr domain,
>>   char *virDomainBackupGetXMLDesc(virDomainPtr domain,
>>                                   unsigned int flags);
>>   +/**
>> + * virDomainDirtyRateStatus:
>> + *
>> + * Details on the cause of a dirtyrate calculation status.
>> + */
>> +
>> +typedef enum {
>> +    VIR_DOMAIN_DIRTYRATE_UNSTARTED = 0, /* the dirtyrate calculation has not been started */
>> +    VIR_DOMAIN_DIRTYRATE_MEASURING = 1, /* the dirtyrate calculation is measuring */
>> +    VIR_DOMAIN_DIRTYRATE_MEASURED  = 2, /* the dirtyrate calculation is completed */
>> +
>> +# ifdef VIR_ENUM_SENTINELS
>> +    VIR_DOMAIN_DIRTYRATE_LAST
>> +# endif
>> +} virDomainDirtyRateStatus;
>> +
>>   /**
>>    * virDomainDirtyRateInfo:
>>    *
>> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
>> index e88e6aebaf..37612a9bba 100644
>> --- a/src/qemu/qemu_monitor_json.c
>> +++ b/src/qemu/qemu_monitor_json.c
>> @@ -9414,3 +9414,51 @@ qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon,
>>       return virJSONValueGetBoolean(virJSONValueObjectGet(reply, "return"),
>>                                     migratable);
>>   }
>> +
>> +
>> +VIR_ENUM_DECL(qemuDomainDirtyRateStatus);
>> +VIR_ENUM_IMPL(qemuDomainDirtyRateStatus,
>> +              VIR_DOMAIN_DIRTYRATE_LAST,
>> +              "unstarted",
>> +              "measuring",
>> +              "measured");
>> +
>> +static int
>> +qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data,
>> +                                    virDomainDirtyRateInfoPtr info)
>> +{
>> +    const char *status;
>> +    int statusID;
>> +
>> +    if (!(status = virJSONValueObjectGetString(data, "status"))) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("query-dirty-rate reply was missing 'status' data"));
>> +        return -1;
>> +    }
>> +
>> +    if ((statusID = qemuDomainDirtyRateStatusTypeFromString(status)) < 0) {
>> +        return -1;
>> +    }
>> +    info->status = statusID;
>> +
>> +    if ((info->status == VIR_DOMAIN_DIRTYRATE_MEASURED) &&
>> +        (virJSONValueObjectGetNumberLong(data, "dirty-rate", &(info->dirtyRate)) < 0)) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("query-dirty-rate reply was missing 'dirty-rate' data"));
>> +        return -1;
>> +    }
>> +
>> +    if (virJSONValueObjectGetNumberLong(data, "start-time", &(info->startTime)) < 0) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("query-dirty-rate reply was missing 'start-time' data"));
>> +        return -1;
>> +    }
>> +
>> +    if (virJSONValueObjectGetNumberLong(data, "calc-time", &(info->calcTime)) < 0) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("query-dirty-rate reply was missing 'calc-time' data"));
>> +        return -1;
>> +    }
>> +
>> +    return 0;
>> +}
>>
> .


Re: [PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo
Posted by Peter Krempa 5 years, 3 months ago
On Sun, Oct 25, 2020 at 10:35:03 +0800, Hao Wang wrote:
> Hi Daniel,
> 
> For the warning in your compiling -- "error: ‘qemuMonitorJSONExtractDirtyRateInfo’ defined but not used [-Werror=unused-function]":
> 
> " qemuMonitorJSONExtractDirtyRateInfo" would be called by function "qemuMonitorJSONQueryDirtyRate" in [PATCH 3/7].
> So please apply all the serial of patches before your compiling. Thanks!

Note that according to our contributor guidelines [1] a patchset must
compile cleanly and pass all testsuite after every single patch.

Please reorganize your series such that this can be achieved. Also note
that squashing all patches into 1 is not acceptable. Patchet must be
logically split into separable chunks.

[1] https://libvirt.org/hacking.html#preparing-patches

Re: [PATCH v2 2/7] migration/dirtyrate: Implement qemuMonitorJSONExtractDirtyRateInfo
Posted by Hao Wang 5 years, 3 months ago
Thanks for the reminding. I would fix that in my V3 patches.


在 2020/10/26 14:24, Peter Krempa 写道:
> On Sun, Oct 25, 2020 at 10:35:03 +0800, Hao Wang wrote:
>> Hi Daniel,
>>
>> For the warning in your compiling -- "error: ‘qemuMonitorJSONExtractDirtyRateInfo’ defined but not used [-Werror=unused-function]":
>>
>> " qemuMonitorJSONExtractDirtyRateInfo" would be called by function "qemuMonitorJSONQueryDirtyRate" in [PATCH 3/7].
>> So please apply all the serial of patches before your compiling. Thanks!
> 
> Note that according to our contributor guidelines [1] a patchset must
> compile cleanly and pass all testsuite after every single patch.
> 
> Please reorganize your series such that this can be achieved. Also note
> that squashing all patches into 1 is not acceptable. Patchet must be
> logically split into separable chunks.
> 
> [1] https://libvirt.org/hacking.html#preparing-patches
> 
> .
>