On 12/4/20 5:12 AM, zhukeqian wrote:
Hi folks,
Kindly ping. I found that this patch is not applied.
Has reviewed by Daniel Henrique Barboza and Daniel P. Berrangé.
It has my ACK, but looking into the messages I see that Daniel was
inquiring about this being a bug fix or an enhancement (he didn't
provide an ACK). Not sure if he wants some changes in the commit
message or if he has any other reservations about it.
Thanks,
DHB
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(a)huawei.com>
> ---
> 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",
>