[libvirt] patch for disk migration verbose progress
Eric Blake
eblake at redhat.com
Wed Aug 17 14:02:29 UTC 2011
[re-adding the list]
On 08/17/2011 12:30 AM, Tom Vijlbrief wrote:
> Hi Eric
>
> This is the complete patch including json (not tested) and a typo correction
> in an error message...
>
> Tom
> ---------- Doorgestuurd bericht ----------
> Van: "Tom Vijlbrief"<tom at nomadbsd.v7f.eu>
> Datum: 17 aug. 2011 08:23
> Onderwerp: mon.patch
> Aan:<tvijlbrief at gmail.com>
>
>
> mon.patch
>
Thanks again for taking the time to contribute. It is easier to work
with patches generated by 'git format-patch' (and 'git send-email' is a
nice wrapper that both formats the patch and mails it to the list); as
written, your patch had no commit message, so I had to invent one.
I also added you to AUTHORS; let me know if I need to update any
preferred spellings.
>
> # NB, must pass the --listen flag to the libvirtd process for this to
Is this a stray line in your email, or is it pointing out a further issue?
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 2a9a078..618a45c 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -1894,6 +1894,31 @@ qemuMonitorJSONGetMigrationStatusReply(virJSONValuePtr reply,
> _("migration was active, but RAM 'total' data was missing"));
> return -1;
> }
> +
> + virJSONValuePtr disk = virJSONValueObjectGet(ret, "disk");
> + if (!disk) {
> + return 0;
> + }
> +
> + unsigned long long t;
Our style tends to float declarations to the top, C89 style, even though
this is valid as written (we require C99 for other reasons).
> + if (virJSONValueObjectGetNumberUlong(disk, "transferred",&t)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("disk migration was active, but DISK 'transferred' data was missing"));
> + return -1;
> + }
> + (*transferred)+= t;
> + if (virJSONValueObjectGetNumberUlong(disk, "remaining",&t)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("disk migration was active, but DISK 'remaining' data was missing"));
> + return -1;
> + }
> + (*remaining)+= t;
I tweaked spacing between operators (yeah, it doesn't help that
thunderbird corrupted spacing even worse in my reply to your mail). And
the () are redundant; this can safely be:
*remaining += t;
> + if (virJSONValueObjectGetNumberUlong(disk, "total",&t)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("disk migration was active, but DISK 'total' data was missing"));
> + return -1;
> + }
> + (*total)+= t;
> }
>
> return 0;
> diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
> index 7bf733d..fef6f36 100644
> --- a/src/qemu/qemu_monitor_text.c
> +++ b/src/qemu/qemu_monitor_text.c
> @@ -149,7 +149,7 @@ int qemuMonitorTextIOProcess(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> passwd = strstr(start, PASSWORD_PROMPT);
> if (passwd) {
> #if DEBUG_IO
> - VIR_DEBUG("Seen a passwowrd prompt [%s]", data + used);
> + VIR_DEBUG("Seen a password prompt [%s]", data + used);
> #endif
> if (msg->passwordHandler) {
> int i;
> @@ -1183,6 +1183,9 @@ cleanup:
> #define MIGRATION_TRANSFER_PREFIX "transferred ram: "
> #define MIGRATION_REMAINING_PREFIX "remaining ram: "
> #define MIGRATION_TOTAL_PREFIX "total ram: "
> +#define MIGRATION_DISK_TRANSFER_PREFIX "transferred disk: "
> +#define MIGRATION_DISK_REMAINING_PREFIX "remaining disk: "
> +#define MIGRATION_DISK_TOTAL_PREFIX "total disk: "
>
> int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
> int *status,
> @@ -1246,6 +1249,7 @@ int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
> goto cleanup;
> }
> *remaining *= 1024;
> + tmp = end;
>
> if (!(tmp = strstr(tmp, MIGRATION_TOTAL_PREFIX)))
> goto done;
> @@ -1257,7 +1261,53 @@ int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
> goto cleanup;
> }
> *total *= 1024;
> + tmp = end;
> +
> + /*
> + * Check for Optional Disk Migration status
> + */
> +
> + unsigned long long disk_transferred= 0;
> + unsigned long long disk_remaining= 0;
> + unsigned long long disk_total= 0;
> +
> + if (!(tmp = strstr(tmp, MIGRATION_DISK_TRANSFER_PREFIX)))
> + goto done;
> + tmp += strlen(MIGRATION_DISK_TRANSFER_PREFIX);
>
> + if (virStrToLong_ull(tmp,&end, 10,&disk_transferred)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR,
> + _("cannot parse disk migration data transferred statistic %s"), tmp);
> + goto cleanup;
> + }
> + disk_transferred *= 1024;
> + (*transferred)+= disk_transferred;
For one less assignment, I merged these two lines into:
*transferred += disk_transferred * 1024;
> + tmp = end;
> +
> + if (!(tmp = strstr(tmp, MIGRATION_DISK_REMAINING_PREFIX)))
> + goto done;
> + tmp += strlen(MIGRATION_DISK_REMAINING_PREFIX);
> +
> + if (virStrToLong_ull(tmp,&end, 10,&disk_remaining)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR,
> + _("cannot parse disk migration data remaining statistic %s"), tmp);
> + goto cleanup;
> + }
> + disk_remaining *= 1024;
> + (*remaining)+= disk_remaining;
> + tmp = end;
> +
> + if (!(tmp = strstr(tmp, MIGRATION_DISK_TOTAL_PREFIX)))
> + goto done;
> + tmp += strlen(MIGRATION_DISK_TOTAL_PREFIX);
> +
> + if (virStrToLong_ull(tmp,&end, 10,&disk_total)< 0) {
> + qemuReportError(VIR_ERR_INTERNAL_ERROR,
> + _("cannot parse disk migration data total statistic %s"), tmp);
> + goto cleanup;
> + }
> + disk_total *= 1024;
> + (*total)+= disk_total;
> }
> }
ACK and pushed with those tweaks.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list