xenserver: Reduce number of xapi DB calls in plugin
authorRob Hoes <rob.hoes@citrix.com>
Mon, 5 Dec 2011 14:43:12 +0000 (14:43 +0000)
committerBen Pfaff <blp@nicira.com>
Tue, 6 Dec 2011 17:07:01 +0000 (09:07 -0800)
When there are lots of PIFs in a XenServer/XCP pool, for example when
there are many VLANs configured on the pool, operations such as
PIF.get_all and loops over all PIFs which include database operations,
are very inefficient when executed on a pool slave, and should be
avoided as much as possible. This patch reduces the number of database
calls in the update function of the openvswitch-cfg-update xapi plugin.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Acked-by: Dominic Curran <Dominic.curran@citrix.com>
xenserver/etc_xapi.d_plugins_openvswitch-cfg-update

index cc97c2d36103a730e827cfa98279a58a9106a03f..a9a10e83ff5c5f6ec140c5b1cbe0b481952f618c 100755 (executable)
@@ -86,8 +86,7 @@ def update(session, args):
 
     bton = {}
 
-    for n in session.xenapi.network.get_all():
-        rec = session.xenapi.network.get_record(n)
+    for rec in session.xenapi.network.get_all_records().values():
         try:
             bton[rec['bridge']] = rec
         except KeyError:
@@ -100,10 +99,9 @@ def update(session, args):
     host_mgmt_device = None
     pool_mgmt_macs = {}
     if new_controller:
-        for n in session.xenapi.PIF.get_all():
-            rec = session.xenapi.PIF.get_record(n)
-            if rec.get('management', False):
-                pool_mgmt_macs[rec.get('MAC')] = rec.get('device')
+        recs = session.xenapi.PIF.get_all_records_where('field "management"="true"')
+        for rec in recs:
+            pool_mgmt_macs[rec.get('MAC')] = rec.get('device')
 
     dib_changed = False
     fail_mode_changed = False