WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH] always look up domids from domain uuids

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH] always look up domids from domain uuids
From: David Scott <dave.scott@xxxxxxxxxxxxx>
Date: Mon, 12 Apr 2010 14:45:16 +0100
Delivery-date: Mon, 12 Apr 2010 06:50:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1271079881 -3600
# Node ID c2ba03f407d05b94ea883eb5dee68be9f24a72bc
# Parent  6182bc7d23af84bb7e5138c698dc2efda20c35dc
CA-40134: when looking up a domid, always look up the domain by uuid rather 
than relying on the value in the master's database (which could be out of sync).

In particular if the master is suddenly powercycled then recent domid updates 
might be lost. This results in VMs which are impossible to shutdown.

Looking up the domain by uuid should be strictly better than using the master's 
version: both are moving targets (eg over migrate) and so we already rely on 
the per-VM lock to protect (most) accesses.

The only problem is the code is slightly inefficient: it still has to contact 
the master to look up the VM's uuid and then has to list all domains on the 
host to build up a table of uuid -> domid. This can be improved later.

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 6182bc7d23af -r c2ba03f407d0 ocaml/xapi/helpers.ml
--- a/ocaml/xapi/helpers.ml     Fri Apr 09 10:56:14 2010 +0100
+++ b/ocaml/xapi/helpers.ml     Mon Apr 12 14:44:41 2010 +0100
@@ -384,8 +384,16 @@
     then raise Device_has_no_VIF
     else List.assoc devid table 
 
+(** Return the domid on the *local host* associated with a specific VM.
+       Note that if this is called without the VM lock then the result is 
undefined: the
+       domid might immediately change after the call returns. Caller beware! *)
 let domid_of_vm ~__context ~self =
-    Int64.to_int (Db.VM.get_domid ~__context ~self)
+  let uuid = Uuid.uuid_of_string (Db.VM.get_uuid ~__context ~self) in
+  let all = Xc.with_intf (fun xc -> Xc.domain_getinfolist xc 0) in
+  let uuid_to_domid = List.map (fun di -> Uuid.uuid_of_int_array di.Xc.handle, 
di.Xc.domid) all in
+  if List.mem_assoc uuid uuid_to_domid
+  then List.assoc uuid uuid_to_domid
+  else -1 (* for backwards compat with old behaviour *)
 
 let get_guest_installer_network ~__context =
   let nets = Db.Network.get_all ~__context in
1 file changed, 9 insertions(+), 1 deletion(-)
ocaml/xapi/helpers.ml |   10 +++++++++-


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-API] [PATCH] always look up domids from domain uuids, David Scott <=