[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] [v2] qemu: Retry JSON monitor cont cmd on MigrationExpected error



On Thu, Jan 20, 2011 at 07:27:14PM -0700, Jim Fehlig wrote:
> When restoring a saved qemu instance via JSON monitor, the vm is
> left in a paused state.  Turns out the 'cont' cmd was failing with
> "MigrationExpected" error class and "An incoming migration is
> expected before this command can be executed" error description
> due to migration (restore) not yet complete.
> 
> Detect if 'cont' cmd fails with "MigrationExpecte" error class and
> retry 'cont' cmd.
> 
> V2: Fix potential double-free noted by Laine Stump
> ---
>  src/qemu/qemu_monitor_json.c |   22 +++++++++++++++++++---
>  1 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 7387089..35db285 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -702,13 +702,29 @@ qemuMonitorJSONStartCPUs(qemuMonitorPtr mon,
>      int ret;
>      virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("cont", NULL);
>      virJSONValuePtr reply = NULL;
> +    int i = 0, timeout = 3;
>      if (!cmd)
>          return -1;
>  
> -    ret = qemuMonitorJSONCommand(mon, cmd, &reply);
> +    do {
> +        ret = qemuMonitorJSONCommand(mon, cmd, &reply);
>  
> -    if (ret == 0)
> -        ret = qemuMonitorJSONCheckError(cmd, reply);
> +        if (ret != 0)
> +            break;
> +
> +        /* If no error, we're done */
> +        if ((ret = qemuMonitorJSONCheckError(cmd, reply)) == 0)
> +            break;
> +
> +        /* If error class is not MigrationExpected, we're done.
> +         * Otherwise try 'cont' cmd again */
> +        if (!qemuMonitorJSONHasError(reply, "MigrationExpected"))
> +            break;
> +
> +        virJSONValueFree(reply);
> +        reply = NULL;
> +        usleep(250000);
> +    } while (++i <= timeout);
>  
>      virJSONValueFree(cmd);
>      virJSONValueFree(reply);

  Looks fine to me now, ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel veillard com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]