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)