[libvirt] [PATCH 10/40] Simplify the Xen domain lookup driver methods
Jim Fehlig
jfehlig at suse.com
Wed May 8 18:32:36 UTC 2013
Daniel P. Berrange wrote:
> On Wed, May 08, 2013 at 11:37:44AM +0100, Daniel P. Berrange wrote:
>
>> On Mon, May 06, 2013 at 09:40:43PM -0600, Jim Fehlig wrote:
>>
>>> Jim Fehlig wrote:
>>>
>>>> Daniel P. Berrange wrote:
>>>>
>>>>
>>>>> From: "Daniel P. Berrange" <berrange at redhat.com>
>>>>>
>>>>> Unconditionally invoke the xenHypervisorLookupDomainByID,
>>>>> xenHypervisorLookupDomainByUUID or xenDaemonLookupByName
>>>>> for looking up domains. Fallback to xenXMDomainLookupByUUID
>>>>> and xenXMDomainLookupByName for legacy XenD without inactive
>>>>> domain support
>>>>>
>>>>>
>>>>>
>>>> Do you think there are any Xen installations running such an old xend
>>>> toolstack, and if so wanting to use e.g. libvirt 1.0.6? Seems all of the
>>>> XEND_CONFIG_VERSION_3_0_3 logic could be removed from the code.
>>>>
>>>>
>>>>
>>>>
>>>>> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
>>>>> ---
>>>>> src/xen/xen_driver.c | 99 +++++++++++--------------------------------------
>>>>> src/xen/xend_internal.c | 89 --------------------------------------------
>>>>> src/xen/xend_internal.h | 14 -------
>>>>> src/xen/xs_internal.c | 62 -------------------------------
>>>>> src/xen/xs_internal.h | 2 -
>>>>> 5 files changed, 22 insertions(+), 244 deletions(-)
>>>>>
>>>>>
>>>>>
>>>> I spent some time testing this one and didn't notice any problems.
>>>>
>>>>
>>> Apparently "some" time was not enough time. With this patch, I noticed
>>> 'virsh undefine dom' failing because the tri-state virDomainIsActive()
>>> is returning -1.
>>>
>> Opps, I made a mistake only checking the hypervisor, which of course
>> will not know about the domain if it is shutoff :-) Adding the following
>> extra hunk fixes it
>>
>
> Sigh, helps if i paste the right patch
>
> @@ -660,15 +660,26 @@ xenUnifiedDomainLookupByName(virConnectPtr conn,
> static int
> xenUnifiedDomainIsActive(virDomainPtr dom)
> {
> + xenUnifiedPrivatePtr priv = dom->conn->privateData;
> virDomainPtr currdom;
> int ret = -1;
>
> /* ID field in dom may be outdated, so re-lookup */
> currdom = xenHypervisorLookupDomainByUUID(dom->conn, dom->uuid);
>
> + /* Try XM for inactive domains. */
> + if (!currdom) {
> + if (priv->xendConfigVersion <= XEND_CONFIG_VERSION_3_0_3)
> + currdom = xenXMDomainLookupByUUID(dom->conn, dom->uuid);
> + else
> + currdom = xenDaemonLookupByUUID(dom->conn, dom->uuid);
> + }
> +
> if (currdom) {
> ret = currdom->id == -1 ? 0 : 1;
> virDomainFree(currdom);
> + } else if (virGetLastError() == NULL) {
> + virReportError(VIR_ERR_NO_DOMAIN, __FUNCTION__);
> }
>
> return ret;
>
Yep, this fixes the issue. ACK with it squashed in.
Regards,
Jim
More information about the libvir-list
mailing list