changeset 726:04c4e5f94cee beta

cache list speed improvement
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 19 Nov 2010 03:00:05 +0100
parents 7a6c971a5f0e
children 0ab5deeedbdf
files rhodecode/model/scm.py
diffstat 1 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/model/scm.py	Fri Nov 19 01:32:47 2010 +0100
+++ b/rhodecode/model/scm.py	Fri Nov 19 03:00:05 2010 +0100
@@ -106,9 +106,14 @@
             all_repos = self.sa.query(Repository)\
                 .order_by(Repository.repo_name).all()
 
+        invalidation_list = [str(x.cache_key) for x in \
+                             self.sa.query(CacheInvalidation.cache_key)\
+                             .filter(CacheInvalidation.cache_active == False)\
+                             .all()]
+
         for r in all_repos:
 
-            repo = self.get(r.repo_name)
+            repo = self.get(r.repo_name, invalidation_list)
 
             if repo is not None:
                 last_change = repo.last_change
@@ -134,7 +139,7 @@
     def get_repo(self, repo_name):
         return self.get(repo_name)
 
-    def get(self, repo_name):
+    def get(self, repo_name, invalidation_list=None):
         """
         Get's repository from given name, creates BackendInstance and
         propagates it's data from database with all additional information
@@ -172,11 +177,17 @@
             repo.dbrepo = dbrepo
             return repo
 
-        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)
+        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)