From a3bbc04ea0fa88c0f2aee463f1618c16c131e5fc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 7 May 2019 16:58:56 +0100 Subject: [PATCH] accounts: Remove search cache This is not very useful when registering a new account. Signed-off-by: Michael Tremer --- src/backend/accounts.py | 45 +++++++++++++---------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/src/backend/accounts.py b/src/backend/accounts.py index 65afdef3..e2352f55 100644 --- a/src/backend/accounts.py +++ b/src/backend/accounts.py @@ -49,13 +49,13 @@ class Accounts(Object): return conn - def _query(self, query, attrlist=None, limit=0, search_base=None, scope=None): + def _query(self, query, attrlist=None, limit=0, search_base=None): logging.debug("Performing LDAP query: %s" % query) t = time.time() results = self.ldap.search_ext_s(search_base or self.search_base, - scope or ldap.SCOPE_SUBTREE, query, attrlist=attrlist, sizelimit=limit) + ldap.SCOPE_SUBTREE, query, attrlist=attrlist, sizelimit=limit) # Log time it took to perform the query logging.debug("Query took %.2fms" % ((time.time() - t) * 1000.0)) @@ -63,29 +63,21 @@ class Accounts(Object): return results def _search(self, query, attrlist=None, limit=0): - dns = self._search_dns(query, limit=limit) + accounts = [] + for dn, attrs in self._query(query, attrlist=["dn"], limit=limit): + account = self.get_by_dn(dn) + accounts.append(account) - accounts = self._get_accounts_from_dns(dns) + return accounts - return list(accounts) - - def _search_dns(self, query, limit=0): - # Query cache - dns = self.memcache.get("accounts:search:%s" % query) - if dns is None: - # Return DNs only for this search query - dns = [] - for dn, attrs in self._query(query, attrlist=["dn"], limit=limit): - dns.append(dn) - - # Cache for 10 min - self.memcache.set("accounts:search:%s" % query, dns, 600) - - return dns + def _get_attrs(self, dn): + """ + Fetches all attributes for the given distinguished name + """ + results = self._query("(objectClass=*)", search_base=dn, limit=1) - def _get_accounts_from_dns(self, dns): - for dn in dns: - yield self.get_by_dn(dn) + for dn, attrs in results: + return attrs def get_by_dn(self, dn): attrs = self.memcache.get("accounts:%s:attrs" % dn) @@ -98,15 +90,6 @@ class Accounts(Object): return Account(self.backend, dn, attrs) - def _get_attrs(self, dn): - """ - Fetches all attributes for the given distinguished name - """ - results = self._query("(objectClass=*)", search_base=dn, limit=1) - - for dn, attrs in results: - return attrs - def search(self, query): # Search for exact matches accounts = self._search( -- 2.47.3