xenserver: Rewrite refresh-network-uuids script for decent performance.
authorBen Pfaff <blp@nicira.com>
Wed, 21 Apr 2010 17:49:12 +0000 (10:49 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 26 Apr 2010 18:29:32 +0000 (11:29 -0700)
Calling "interface-reconfigure up" can take a couple of seconds, but all
we have to do here, really, is fetch the network UUIDs and invoke
ovs-vsctl, which is much faster.  So rewrite this script in Python and make
it do just that.

xenserver/usr_share_openvswitch_scripts_refresh-network-uuids

index 34fe1e7e99890bad4a3a60d743157d7e2a08dbea..55a8ba8b89055b041db47cdda2ecbbf1660fe057 100755 (executable)
@@ -1,12 +1,21 @@
-#! /bin/sh
-
-. /etc/xensource-inventory
-
-for pif in $(xe pif-list --minimal host-uuid=${INSTALLATION_UUID} currently-attached=true VLAN=-1 | sed 's/,/ /g'); do
-    printf "Refreshing PIF %s...  " $pif
-    if /opt/xensource/libexec/interface-reconfigure --pif-uuid=$pif up; then
-        printf "done\n"
-    else
-        printf "error!\n"
-    fi
-done
+#! /usr/bin/python
+
+import sys
+sys.path.insert(0, "/opt/xensource/libexec")
+from InterfaceReconfigure import *
+from InterfaceReconfigureVswitch import *
+
+db_init_from_xenapi(None)
+
+vsctl_argv = []
+for pif in db().get_all_pifs():
+    pifrec = db().get_pif_record(pif)
+    if not pif_is_vlan(pif) and pifrec['currently_attached']:
+        vsctl_argv += set_br_external_ids(pif)
+
+#log("modifying configuration:")
+#for c in vsctl_argv:
+#    log("  %s" % c)
+
+if vsctl_argv != []:
+    datapath_modify_config(vsctl_argv)