2010/7/29 Daniel Veillard <veillard@xxxxxxxxxx>: > On Mon, Jul 26, 2010 at 03:12:25AM +0200, Matthias Bolte wrote: >> esxVI_WaitForTaskCompletion can take a UUID to lookup the >> corresponding domain and check if the current task for it >> is blocked by a question. It calls another function to do >> this: esxVI_LookupAndHandleVirtualMachineQuestion looks up >> the VirtualMachine and checks for a question. If there is >> a question it calls esxVI_HandleVirtualMachineQuestion to >> handle it. >> >> If there was no question or it has been answered the call >> to esxVI_LookupAndHandleVirtualMachineQuestion returns 0. >> If any error occurred during the lookup and answering >> process -1 is returned. The problem with this is, that -1 >> is also returned when there was no error but the question >> could not be answered. So esxVI_WaitForTaskCompletion cannot >> distinguish between this two situations and reports that a >> question is blocking the task even when there was actually >> another problem. >> >> This inherent problem didn't surface until vSphere 4.1 when >> you try to define a new domain. The driver tries to lookup >> the domain that is just in the process of being registered. >> There seems to be some kind of race condition and the driver >> manages to issue a lookup command before the ESX server was >> able to register the domain. This used to work before. >> >> Due to the return value problem described above the driver >> reported a false error message in that case. >> >> To solve this esxVI_WaitForTaskCompletion now takes an >> additional occurrence parameter that describes whether or >> not to expect the domain to be existent. Also add a new >> parameter to esxVI_LookupAndHandleVirtualMachineQuestion >> that allows to distinguish if the call returned -1 because >> of an actual error or because the question could not be >> answered. >> --- >> src/esx/esx_driver.c | 17 ++++++++++++++- >> src/esx/esx_vi.c | 53 ++++++++++++++++++++++++++++++++++++------------- >> src/esx/esx_vi.h | 7 ++++- >> src/esx/esx_vmx.c | 4 +- >> 4 files changed, 61 insertions(+), 20 deletions(-) > > Thanks for the detailed explanations ! > > ACK, > > Daniel > Thanks, pushed. Matthias -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list