|
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