Skip to content

Commit 8c7adc3

Browse files
authored
Merge pull request #7988 from DIRACGridBot/cherry-pick-2-3cd2b58c5-integration
[sweep:integration] Add locks to AuthManager caches
2 parents 36f1a2c + d57e974 commit 8c7adc3

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/DIRAC/Core/DISET/AuthManager.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
""" Module that holds DISET Authorization class for services
22
"""
3+
from threading import Lock
4+
35
from cachetools import TTLCache
46

57
from DIRAC.ConfigurationSystem.Client.Config import gConfig
@@ -29,7 +31,9 @@ def __init__(self, authSection):
2931
"""
3032
self.authSection = authSection
3133
self._cache_getUsersInGroup = TTLCache(maxsize=1000, ttl=60)
34+
self._cache_getUsersInGroupLock = Lock()
3235
self._cache_getUsernameForDN = TTLCache(maxsize=1000, ttl=60)
36+
self._cache_getUsernameForDNLock = Lock()
3337

3438
def authQuery(self, methodQuery, credDict, defaultProperties=False):
3539
"""
@@ -262,17 +266,19 @@ def getUsername(self, credDict):
262266
credDict[self.KW_GROUP] = result["Value"]
263267
credDict[self.KW_PROPERTIES] = Registry.getPropertiesForGroup(credDict[self.KW_GROUP], [])
264268

265-
usersInGroup = self._cache_getUsersInGroup.get(credDict[self.KW_GROUP])
266-
if usersInGroup is None:
267-
usersInGroup = Registry.getUsersInGroup(credDict[self.KW_GROUP], [])
268-
self._cache_getUsersInGroup[credDict[self.KW_GROUP]] = usersInGroup
269+
with self._cache_getUsersInGroupLock:
270+
usersInGroup = self._cache_getUsersInGroup.get(credDict[self.KW_GROUP])
271+
if usersInGroup is None:
272+
usersInGroup = Registry.getUsersInGroup(credDict[self.KW_GROUP], [])
273+
self._cache_getUsersInGroup[credDict[self.KW_GROUP]] = usersInGroup
269274
if not usersInGroup:
270275
return False
271276

272-
retVal = self._cache_getUsernameForDN.get(credDict[self.KW_DN])
273-
if retVal is None:
274-
retVal = Registry.getUsernameForDN(credDict[self.KW_DN], usersInGroup)
275-
self._cache_getUsernameForDN[credDict[self.KW_DN]] = retVal
277+
with self._cache_getUsernameForDNLock:
278+
retVal = self._cache_getUsernameForDN.get(credDict[self.KW_DN])
279+
if retVal is None:
280+
retVal = Registry.getUsernameForDN(credDict[self.KW_DN], usersInGroup)
281+
self._cache_getUsernameForDN[credDict[self.KW_DN]] = retVal
276282
if retVal["OK"]:
277283
credDict[self.KW_USERNAME] = retVal["Value"]
278284
return True

0 commit comments

Comments
 (0)