[libvirt] [PATCH] [v2] qemu: Retry JSON monitor cont cmd on MigrationExpected error
Jim Fehlig
jfehlig at novell.com
Fri Jan 21 16:38:12 UTC 2011
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
More information about the libvir-list
mailing list