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

Re: [libvirt] PATCH: Fix remote driver create/destroy methods to update ID field



On Fri, Apr 17, 2009 at 12:12:14PM +0100, Daniel P. Berrange wrote:
> If you have an existing virDomainPtr object, and start it using the
> virDomainCreate(virDomainPtr dom) method, then internal cached 'id'
> field in the virDomainPtr object is never updated. Even more annoyingly
> the remote protocol for the 'create' method doesn't even bother to
> return the ID of the newly started guest.  Thre is a similar problem
> with the virDomainDestroy method, not resetting the cached 'id' back
> to -1.
> 
> We can't guarentee that the 'id' field is up2date wrt to changes made
> by another libvirt client, but we can at least make sure its accurate
> wrt to changes this client is making. For the destroy method the fix
> is trivial. For the create method, after a successful creation, we do
> a lookup based on UUID to fetch the real live ID, since the create
> method didn't return it for us.
> 
> This fixes a significant number of problems identified by the TCK on
> the QEMU driver usage.
> @@ -2746,6 +2749,16 @@ remoteDomainCreate (virDomainPtr domain)
>                (xdrproc_t) xdr_void, (char *) NULL) == -1)
>          goto done;

  maybe a small comment here about why we are doing a remote lookup
might be a good idea, something as simple as

       /* we need to update the id of the local docmain */
> +    memcpy (args2.uuid, domain->uuid, VIR_UUID_BUFLEN);
> +    memset (&ret2, 0, sizeof ret2);
> +    if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID,
> +              (xdrproc_t) xdr_remote_domain_lookup_by_uuid_args, (char *) &args2,
> +              (xdrproc_t) xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret2) == -1)
> +        goto done;
> +
> +    domain->id = ret2.dom.id;
> +    xdr_free ((xdrproc_t) &xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret2);
> +

  I was just wondering, shouldn't something similar be done on remote
virDomainRestore() but since we don't use a virDomainPtr as the input
the domain info has to be refetched from scratch and then should be
immune to the problem.

  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]