Mercurial > kallithea
changeset 791:06a98912325c beta
fixed bug when invalidation was making to many queries when there was no list of invalidation
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 29 Nov 2010 03:31:29 +0100 |
parents | 0142dac6f3c7 |
children | 4c16ed1eb699 22eca93bea97 |
files | rhodecode/model/scm.py |
diffstat | 1 files changed, 21 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/model/scm.py Mon Nov 29 01:59:49 2010 +0100 +++ b/rhodecode/model/scm.py Mon Nov 29 03:31:29 2010 +0100 @@ -121,6 +121,7 @@ all_repos = self.sa.query(Repository)\ .order_by(Repository.repo_name).all() + #get the repositories that should be invalidated invalidation_list = [str(x.cache_key) for x in \ self.sa.query(CacheInvalidation.cache_key)\ .filter(CacheInvalidation.cache_active == False)\ @@ -158,13 +159,33 @@ """ Get's repository from given name, creates BackendInstance and propagates it's data from database with all additional information + :param repo_name: + :param invalidation_list: if a invalidation list is given the get + method should not manually check if this repository needs + invalidation and just invalidate the repositories in list + """ if not HasRepoPermissionAny('repository.read', 'repository.write', 'repository.admin')(repo_name, 'get repo check'): return + pre_invalidate = True + if invalidation_list is not None: + pre_invalidate = repo_name in invalidation_list + if pre_invalidate: + invalidate = self._should_invalidate(repo_name) + + if invalidate: + log.info('invalidating cache for repository %s', repo_name) + region_invalidate(_get_repo, None, repo_name) + self._mark_invalidated(invalidate) + + + #====================================================================== + # CACHE FUNCTION + #====================================================================== @cache_region('long_term') def _get_repo(repo_name): @@ -203,18 +224,6 @@ repo.dbrepo = dbrepo return repo - pre_invalidate = True - if invalidation_list: - pre_invalidate = repo_name in invalidation_list - - if pre_invalidate: - invalidate = self._should_invalidate(repo_name) - - if invalidate: - log.info('invalidating cache for repository %s', repo_name) - region_invalidate(_get_repo, None, repo_name) - self._mark_invalidated(invalidate) - return _get_repo(repo_name)