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

Daniel Henrique Barboza danielhb413 at gmail.com
Fri Dec 4 14:42:18 UTC 2020



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 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