Daniel Veillard wrote:
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,
Thanks; pushed.
Regards,
Jim