diff --git a/rhodecode/apps/_base/subscribers.py b/rhodecode/apps/_base/subscribers.py --- a/rhodecode/apps/_base/subscribers.py +++ b/rhodecode/apps/_base/subscribers.py @@ -41,13 +41,14 @@ def trigger_user_permission_flush(event) automatic flush of permission caches, so the users affected receive new permissions Right Away """ - + invalidate = True affected_user_ids = set(event.user_ids) for user_id in affected_user_ids: for cache_namespace_uid_tmpl in cache_namespaces: cache_namespace_uid = cache_namespace_uid_tmpl.format(user_id) - del_keys = rc_cache.clear_cache_namespace('cache_perms', cache_namespace_uid) - log.debug('Deleted %s cache keys for user_id: %s and namespace %s', + del_keys = rc_cache.clear_cache_namespace( + 'cache_perms', cache_namespace_uid, invalidate=invalidate) + log.debug('Invalidated %s cache keys for user_id: %s and namespace %s', del_keys, user_id, cache_namespace_uid) diff --git a/rhodecode/lib/rc_cache/utils.py b/rhodecode/lib/rc_cache/utils.py --- a/rhodecode/lib/rc_cache/utils.py +++ b/rhodecode/lib/rc_cache/utils.py @@ -261,12 +261,15 @@ def get_or_create_region(region_name, re return region_obj -def clear_cache_namespace(cache_region, cache_namespace_uid): +def clear_cache_namespace(cache_region, cache_namespace_uid, invalidate=False): region = get_or_create_region(cache_region, cache_namespace_uid) cache_keys = region.backend.list_keys(prefix=cache_namespace_uid) num_delete_keys = len(cache_keys) - if num_delete_keys: - region.delete_multi(cache_keys) + if invalidate: + region.invalidate(hard=False) + else: + if num_delete_keys: + region.delete_multi(cache_keys) return num_delete_keys diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -285,7 +285,8 @@ class ScmModel(BaseModel): repo.update_commit_cache(config=config, cs_cache=None) if delete: cache_namespace_uid = 'cache_repo.{}'.format(repo_id) - rc_cache.clear_cache_namespace('cache_repo', cache_namespace_uid) + rc_cache.clear_cache_namespace( + 'cache_repo', cache_namespace_uid, invalidate=True) def toggle_following_repo(self, follow_repo_id, user_id):