|
1 | 1 | """ Module that holds DISET Authorization class for services
|
2 | 2 | """
|
| 3 | +from threading import Lock |
| 4 | + |
3 | 5 | from cachetools import TTLCache
|
4 | 6 |
|
5 | 7 | from DIRAC.ConfigurationSystem.Client.Config import gConfig
|
@@ -29,7 +31,9 @@ def __init__(self, authSection):
|
29 | 31 | """
|
30 | 32 | self.authSection = authSection
|
31 | 33 | self._cache_getUsersInGroup = TTLCache(maxsize=1000, ttl=60)
|
| 34 | + self._cache_getUsersInGroupLock = Lock() |
32 | 35 | self._cache_getUsernameForDN = TTLCache(maxsize=1000, ttl=60)
|
| 36 | + self._cache_getUsernameForDNLock = Lock() |
33 | 37 |
|
34 | 38 | def authQuery(self, methodQuery, credDict, defaultProperties=False):
|
35 | 39 | """
|
@@ -262,17 +266,19 @@ def getUsername(self, credDict):
|
262 | 266 | credDict[self.KW_GROUP] = result["Value"]
|
263 | 267 | credDict[self.KW_PROPERTIES] = Registry.getPropertiesForGroup(credDict[self.KW_GROUP], [])
|
264 | 268 |
|
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 |
269 | 274 | if not usersInGroup:
|
270 | 275 | return False
|
271 | 276 |
|
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 |
276 | 282 | if retVal["OK"]:
|
277 | 283 | credDict[self.KW_USERNAME] = retVal["Value"]
|
278 | 284 | return True
|
|
0 commit comments