Ping: [PATCH] Qemu: migration: Not bind RAM info with active migration status

zhukeqian zhukeqian1 at huawei.com
Mon Dec 7 01:55:53 UTC 2020


Hi Daniel,

On 2020/12/4 22:42, Daniel Henrique Barboza wrote:
> 
> 
> 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.
> 
I see, thanks. I will ask for his thoughts.

Cheers,
Keqian
> 
> 
> 
> 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 at 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",
>>>
> 
> .
> 





More information about the libvir-list mailing list