summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2015-07-27 15:11:56 +1200
committerStefan Metzmacher <metze@samba.org>2015-09-03 09:11:35 +0200
commite120381231056277a604fb5a73d5847439cd1851 (patch)
treec141e56e8015c242b135e031acbdff8ee608d411
parent9a8165b31ffaa5283fed3badb822fcca01a702a0 (diff)
downloadsamba-e120381231056277a604fb5a73d5847439cd1851.tar.gz
dbcheck: Use set() operations to make dbcheck more efficient
BUG: https://bugzilla.samba.org/show_bug.cgi?id=10973 Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> (cherry picked from commit c049106bf8267b30a9242d2d574661291cced780)
-rw-r--r--python/samba/dbchecker.py36
1 files changed, 18 insertions, 18 deletions
diff --git a/python/samba/dbchecker.py b/python/samba/dbchecker.py
index 351f85a7f5a..4fb9d1281b6 100644
--- a/python/samba/dbchecker.py
+++ b/python/samba/dbchecker.py
@@ -705,7 +705,7 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
'''Read metadata properties and list attributes in it.
raises KeyError if the attid is unknown.'''
- list_att = []
+ set_att = set()
list_attid = []
repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob, str(val))
@@ -713,10 +713,10 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
for o in repl.ctr.array:
att = self.samdb_schema.get_lDAPDisplayName_by_attid(o.attid)
- list_att.append(att.lower())
+ set_att.add(att.lower())
list_attid.append(o.attid)
- return (list_att, list_attid)
+ return (set_att, list_attid)
def fix_metadata(self, dn, attr):
@@ -1173,8 +1173,8 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
return 1
obj = res[0]
error_count = 0
- list_attrs_from_md = []
- list_attrs_seen = []
+ set_attrs_from_md = set()
+ set_attrs_seen = set()
got_repl_property_meta_data = False
got_objectclass = False
@@ -1230,7 +1230,7 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
# based on what other attributes we see.
try:
- (list_attrs_from_md, list_attid_from_md) = self.process_metadata(obj[attrname])
+ (set_attrs_from_md, list_attid_from_md) = self.process_metadata(obj[attrname])
except KeyError:
error_count += 1
self.err_replmetadata_unknown_attid(dn, attrname, obj[attrname])
@@ -1346,7 +1346,7 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
if (not flag & dsdb.DS_FLAG_ATTR_NOT_REPLICATED
and not flag & dsdb.DS_FLAG_ATTR_IS_CONSTRUCTED
and not self.samdb_schema.get_linkId_from_lDAPDisplayName(attrname)):
- list_attrs_seen.append(str(attrname).lower())
+ set_attrs_seen.add(str(attrname).lower())
if syntax_oid in [ dsdb.DSDB_SYNTAX_BINARY_DN, dsdb.DSDB_SYNTAX_OR_NAME,
dsdb.DSDB_SYNTAX_STRING_DN, ldb.SYNTAX_DN ]:
@@ -1417,17 +1417,17 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
else:
self.report("Not fixing isDeleted originating_change_time on '%s'" % str(dn))
- for att in list_attrs_seen:
- if not att in list_attrs_from_md:
- if show_dn:
- self.report("On object %s" % dn)
- show_dn = False
- error_count += 1
- self.report("ERROR: Attribute %s not present in replication metadata" % att)
- if not self.confirm_all("Fix missing replPropertyMetaData element '%s'" % att, 'fix_all_metadata'):
- self.report("Not fixing missing replPropertyMetaData element '%s'" % att)
- continue
- self.fix_metadata(dn, att)
+
+ for att in set_attrs_seen.difference(set_attrs_from_md):
+ if show_dn:
+ self.report("On object %s" % dn)
+ show_dn = False
+ error_count += 1
+ self.report("ERROR: Attribute %s not present in replication metadata" % att)
+ if not self.confirm_all("Fix missing replPropertyMetaData element '%s'" % att, 'fix_all_metadata'):
+ self.report("Not fixing missing replPropertyMetaData element '%s'" % att)
+ continue
+ self.fix_metadata(dn, att)
if self.is_fsmo_role(dn):
if "fSMORoleOwner" not in obj and ("*" in attrs or "fsmoroleowner" in map(str.lower, attrs)):