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
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;
> +}
>
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;
>> +}
>>
> .
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
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 > > . >
© 2016 - 2026 Red Hat, Inc.