Ping: [PATCH] Qemu: migration: Not bind RAM info with active migration status
zhukeqian
zhukeqian1 at huawei.com
Mon Dec 7 02:00:36 UTC 2020
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 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