[PATCH] Qemu: migration: Not bind RAM info with active migration status
zhukeqian
zhukeqian1 at huawei.com
Mon Jul 20 00:57:36 UTC 2020
Hi Daniel,
On 2020/7/17 22:33, Daniel Henrique Barboza wrote:
>
>
> On 7/15/20 3:18 AM, Keqian Zhu wrote:
>> For that Qemu supports returning incoming migration info since its commit
>> 65ace0604551 (migration: add postcopy total blocktime into query-migrate),
>
>
> It is worth saying that this QEMU commit that decoupled the RAM
> status from the active migration status is live since early 2018:
>
> $ git show 65ace0604551
> commit 65ace060455122a461cdc9302238b914084bcd42
> Author: Alexey Perevalov <a.perevalov at samsung.com>
> Date: Thu Mar 22 21:17:27 2018 +0300
>
> migration: add postcopy total blocktime into query-migrate
>
> $ git describe 65ace0604551
> v2.12.0-6-g65ace06045
>
>
> I am not sure if we care about removing a migration failure check for
> QEMU 2.12 when we're waiting for 5.1 to come out. My guess is that we
> do care, but not enough to demand a "if (QEMU <= 2.12)" in this logic.
> I'll also assume that the existing failure check is doing more harm than
> good nowadays, so:
>
Thanks for your review.
Thanks,
Keqian
>
> Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
>
>
>> 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