feat: respect module_cache config for RBAC LRU cache
This commit is contained in:
parent
342fc6652a
commit
cf18e592c7
@ -4,6 +4,19 @@ from sqlor.dbpools import get_sor_context
|
|||||||
from ahserver.serverenv import ServerEnv
|
from ahserver.serverenv import ServerEnv
|
||||||
from appPublic.Singleton import SingletonDecorator
|
from appPublic.Singleton import SingletonDecorator
|
||||||
from appPublic.log import debug, error
|
from appPublic.log import debug, error
|
||||||
|
from appPublic.jsonConfig import getConfig
|
||||||
|
|
||||||
|
|
||||||
|
def _cache_enabled(module_name='rbac'):
|
||||||
|
"""Check if cache is enabled for the given module in config.json"""
|
||||||
|
try:
|
||||||
|
config = getConfig()
|
||||||
|
module_cache = config.module_cache
|
||||||
|
if module_cache is None:
|
||||||
|
return True # Default to enabled if not configured
|
||||||
|
return getattr(module_cache, module_name, True)
|
||||||
|
except Exception:
|
||||||
|
return True # Default to enabled on error
|
||||||
|
|
||||||
class LRUCache:
|
class LRUCache:
|
||||||
"""Async-safe LRU cache with TTL support.
|
"""Async-safe LRU cache with TTL support.
|
||||||
@ -25,6 +38,8 @@ class LRUCache:
|
|||||||
|
|
||||||
def get(self, key):
|
def get(self, key):
|
||||||
import time
|
import time
|
||||||
|
if not _cache_enabled('rbac'):
|
||||||
|
return None
|
||||||
if key not in self._cache:
|
if key not in self._cache:
|
||||||
return None
|
return None
|
||||||
value, expire_at = self._cache[key]
|
value, expire_at = self._cache[key]
|
||||||
@ -36,6 +51,8 @@ class LRUCache:
|
|||||||
|
|
||||||
def set(self, key, value):
|
def set(self, key, value):
|
||||||
import time
|
import time
|
||||||
|
if not _cache_enabled('rbac'):
|
||||||
|
return
|
||||||
if key in self._cache:
|
if key in self._cache:
|
||||||
self._cache.move_to_end(key)
|
self._cache.move_to_end(key)
|
||||||
self._cache[key] = (value, time.time() + self.ttl)
|
self._cache[key] = (value, time.time() + self.ttl)
|
||||||
@ -207,13 +224,13 @@ class UserPermissions:
|
|||||||
now = time.time()
|
now = time.time()
|
||||||
|
|
||||||
# Fast path: cache valid, no lock needed
|
# Fast path: cache valid, no lock needed
|
||||||
if self.rp_caches is not None and (now - self.rp_cache_loaded_at) < self.rp_cache_ttl:
|
if _cache_enabled('rbac') and self.rp_caches is not None and (now - self.rp_cache_loaded_at) < self.rp_cache_ttl:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Slow path: acquire lock and double-check
|
# Slow path: acquire lock and double-check
|
||||||
async with self._get_rp_lock():
|
async with self._get_rp_lock():
|
||||||
# Double-check after lock acquisition
|
# Double-check after lock acquisition
|
||||||
if self.rp_caches is not None and (now - self.rp_cache_loaded_at) < self.rp_cache_ttl:
|
if _cache_enabled('rbac') and self.rp_caches is not None and (now - self.rp_cache_loaded_at) < self.rp_cache_ttl:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.rp_caches = {}
|
self.rp_caches = {}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user