KCC: use a table of bridgeheads to simplify and clarify
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 26 Mar 2015 23:02:37 +0000 (12:02 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 29 May 2015 04:58:27 +0000 (06:58 +0200)
Looping over lists to find membership has bitten us enough times.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/scripting/bin/samba_kcc

index 97fe82daa81e5f9dbf3c9945a13ff2071333fc43..1ccd1e73fa54eac48d56ad5e3c16e820b78b1c6e 100755 (executable)
@@ -1308,6 +1308,7 @@ class KCC(object):
         """
         rbhs_all = self.get_all_bridgeheads(rsite, part, transport,
                                             partial_ok, False)
+        rbh_table = {x.dsa_dnstr:x for x in rbhs_all}
 
         DEBUG_GREY("rbhs_all: %s %s" % (len(rbhs_all), [x.dsa_dnstr for x in rbhs_all]))
 
@@ -1329,14 +1330,8 @@ class KCC(object):
         for ldsa in lbhs_all:
             for cn in ldsa.connect_table.values():
 
-                rdsa = None
-                found = False
-                for rdsa in rbhs_all:
-                    if cn.from_dnstr == rdsa.dsa_dnstr:
-                        found = True
-                        break
-
-                if rdsa is None or not found:
+                rdsa = rbh_table.get(cn.from_dnstr)
+                if rdsa is None:
                     continue
 
                 DEBUG_DARK_YELLOW("rdsa is %s" % rdsa.dsa_dnstr)
@@ -1454,14 +1449,8 @@ class KCC(object):
         for ldsa in lbhs_all:
             for cn in ldsa.connect_table.values():
 
-                rdsa = None
-                found = False
-                for rdsa in rbhs_all:
-                    if cn.from_dnstr == rdsa.dsa_dnstr:
-                        found = True
-                        break
-
-                if rdsa is None or not found:
+                rdsa = rbh_table.get(cn.from_dnstr)
+                if rdsa is None:
                     continue
 
                 DEBUG_DARK_YELLOW("round 2: rdsa is %s" % rdsa.dsa_dnstr)