mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
ldb: create a cache of known wellknown objects instead of continously searching in the db
Profiling on dbcheck have shown that we spend 10% of the time looking for wellknown objects. BUG: https://bugzilla.samba.org/show_bug.cgi?id=10973 Change-Id: I13ed58e8062d1b7b6179d17b0e7e56f943572c6c Signed-off-by: Matthieu Patou <mat@matws.net> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
parent
c049106bf8
commit
6122acad0f
@ -39,6 +39,7 @@ class SamDB(samba.Ldb):
|
|||||||
"""The SAM database."""
|
"""The SAM database."""
|
||||||
|
|
||||||
hash_oid_name = {}
|
hash_oid_name = {}
|
||||||
|
hash_well_known = {}
|
||||||
|
|
||||||
def __init__(self, url=None, lp=None, modules_dir=None, session_info=None,
|
def __init__(self, url=None, lp=None, modules_dir=None, session_info=None,
|
||||||
credentials=None, flags=0, options=None, global_schema=True,
|
credentials=None, flags=0, options=None, global_schema=True,
|
||||||
@ -793,7 +794,19 @@ accountExpires: %u
|
|||||||
return dsdb._dsdb_get_nc_root(self, dn)
|
return dsdb._dsdb_get_nc_root(self, dn)
|
||||||
|
|
||||||
def get_wellknown_dn(self, nc_root, wkguid):
|
def get_wellknown_dn(self, nc_root, wkguid):
|
||||||
return dsdb._dsdb_get_wellknown_dn(self, nc_root, wkguid)
|
h_nc = self.hash_well_known.get(str(nc_root))
|
||||||
|
dn = None
|
||||||
|
if h_nc is not None:
|
||||||
|
dn = h_nc.get(wkguid)
|
||||||
|
if dn is None:
|
||||||
|
dn = dsdb._dsdb_get_wellknown_dn(self, nc_root, wkguid)
|
||||||
|
if dn is None:
|
||||||
|
return dn
|
||||||
|
if h_nc is None:
|
||||||
|
self.hash_well_known[str(nc_root)] = {}
|
||||||
|
h_nc = self.hash_well_known[str(nc_root)]
|
||||||
|
h_nc[wkguid] = dn
|
||||||
|
return dn
|
||||||
|
|
||||||
def set_minPwdAge(self, value):
|
def set_minPwdAge(self, value):
|
||||||
m = ldb.Message()
|
m = ldb.Message()
|
||||||
|
Loading…
Reference in New Issue
Block a user