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@xxxxxxxxxx> >> Reviewed-by: Chuan Zheng <zhengchuan@xxxxxxxxxx> >> --- > > 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; >> +} >> > .