Hi Daniel, This patch has received ACK from Daniel Henrique Barboza, and waits for your ACK. Do you have any additional suggestion on it? Thanks, Keqian On 2020/12/4 16:12, zhukeqian wrote: > Hi folks, > > Kindly ping. I found that this patch is not applied. > Has reviewed by Daniel Henrique Barboza and Daniel P. Berrangé. > > Cheers, > Keqian > > On 2020/7/15 14:18, Keqian Zhu wrote: >> For that Qemu supports returning incoming migration info since its commit >> 65ace0604551 (migration: add postcopy total blocktime into query-migrate), >> which may contains active status, but without RAM info. Drop this binding >> relationship check in libvirt. >> >> Signed-off-by: Keqian Zhu <zhukeqian1@xxxxxxxxxx> >> --- >> src/qemu/qemu_monitor_json.c | 88 +++++++++++++++++------------------- >> 1 file changed, 42 insertions(+), 46 deletions(-) >> >> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c >> index d808c4b55b..ba8e340742 100644 >> --- a/src/qemu/qemu_monitor_json.c >> +++ b/src/qemu/qemu_monitor_json.c >> @@ -3547,56 +3547,52 @@ qemuMonitorJSONGetMigrationStatsReply(virJSONValuePtr reply, >> case QEMU_MONITOR_MIGRATION_STATUS_PRE_SWITCHOVER: >> case QEMU_MONITOR_MIGRATION_STATUS_DEVICE: >> ram = virJSONValueObjectGetObject(ret, "ram"); >> - if (!ram) { >> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> - _("migration was active, but no RAM info was set")); >> - return -1; >> - } >> + if (ram) { >> + if (virJSONValueObjectGetNumberUlong(ram, "transferred", >> + &stats->ram_transferred) < 0) { >> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> + _("migration was active, but RAM 'transferred' " >> + "data was missing")); >> + return -1; >> + } >> + if (virJSONValueObjectGetNumberUlong(ram, "remaining", >> + &stats->ram_remaining) < 0) { >> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> + _("migration was active, but RAM 'remaining' " >> + "data was missing")); >> + return -1; >> + } >> + if (virJSONValueObjectGetNumberUlong(ram, "total", >> + &stats->ram_total) < 0) { >> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> + _("migration was active, but RAM 'total' " >> + "data was missing")); >> + return -1; >> + } >> >> - if (virJSONValueObjectGetNumberUlong(ram, "transferred", >> - &stats->ram_transferred) < 0) { >> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> - _("migration was active, but RAM 'transferred' " >> - "data was missing")); >> - return -1; >> - } >> - if (virJSONValueObjectGetNumberUlong(ram, "remaining", >> - &stats->ram_remaining) < 0) { >> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> - _("migration was active, but RAM 'remaining' " >> - "data was missing")); >> - return -1; >> - } >> - if (virJSONValueObjectGetNumberUlong(ram, "total", >> - &stats->ram_total) < 0) { >> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> - _("migration was active, but RAM 'total' " >> - "data was missing")); >> - return -1; >> - } >> + if (virJSONValueObjectGetNumberDouble(ram, "mbps", &mbps) == 0 && >> + mbps > 0) { >> + /* mpbs from QEMU reports Mbits/s (M as in 10^6 not Mi as 2^20) */ >> + stats->ram_bps = mbps * (1000 * 1000 / 8); >> + } >> >> - if (virJSONValueObjectGetNumberDouble(ram, "mbps", &mbps) == 0 && >> - mbps > 0) { >> - /* mpbs from QEMU reports Mbits/s (M as in 10^6 not Mi as 2^20) */ >> - stats->ram_bps = mbps * (1000 * 1000 / 8); >> + if (virJSONValueObjectGetNumberUlong(ram, "duplicate", >> + &stats->ram_duplicate) == 0) >> + stats->ram_duplicate_set = true; >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "normal", >> + &stats->ram_normal)); >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "normal-bytes", >> + &stats->ram_normal_bytes)); >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-pages-rate", >> + &stats->ram_dirty_rate)); >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "page-size", >> + &stats->ram_page_size)); >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-sync-count", >> + &stats->ram_iteration)); >> + ignore_value(virJSONValueObjectGetNumberUlong(ram, "postcopy-requests", >> + &stats->ram_postcopy_reqs)); >> } >> >> - if (virJSONValueObjectGetNumberUlong(ram, "duplicate", >> - &stats->ram_duplicate) == 0) >> - stats->ram_duplicate_set = true; >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "normal", >> - &stats->ram_normal)); >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "normal-bytes", >> - &stats->ram_normal_bytes)); >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-pages-rate", >> - &stats->ram_dirty_rate)); >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "page-size", >> - &stats->ram_page_size)); >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "dirty-sync-count", >> - &stats->ram_iteration)); >> - ignore_value(virJSONValueObjectGetNumberUlong(ram, "postcopy-requests", >> - &stats->ram_postcopy_reqs)); >> - >> disk = virJSONValueObjectGetObject(ret, "disk"); >> if (disk) { >> rc = virJSONValueObjectGetNumberUlong(disk, "transferred", >>