# HG changeset patch # User Mads Kiilerich # Date 2015-10-08 23:21:58 # Node ID aa1891074dd66c27b5eff2c67db89e82d013479d # Parent 92220cd013b04dc2e44e4b0852f6f68b77e8091e cache: when invalidating a cache, always just delete all 'live cache' records instead of marking them inactive Keep it simple. Adding the record again might be slightly more expensive than just updating the active flag but instead we get get a simpler model and automatic cleanup without using the cache-keys paster command. diff --git a/kallithea/controllers/admin/repos.py b/kallithea/controllers/admin/repos.py --- a/kallithea/controllers/admin/repos.py +++ b/kallithea/controllers/admin/repos.py @@ -577,7 +577,7 @@ class ReposController(BaseRepoController c.active = 'caches' if request.POST: try: - ScmModel().mark_for_invalidation(repo_name, delete=True) + ScmModel().mark_for_invalidation(repo_name) Session().commit() h.flash(_('Cache invalidation successful'), category='success') diff --git a/kallithea/controllers/admin/settings.py b/kallithea/controllers/admin/settings.py --- a/kallithea/controllers/admin/settings.py +++ b/kallithea/controllers/admin/settings.py @@ -206,7 +206,7 @@ class SettingsController(BaseController) if invalidate_cache: log.debug('invalidating all repositories cache') for repo in Repository.get_all(): - ScmModel().mark_for_invalidation(repo.repo_name, delete=True) + ScmModel().mark_for_invalidation(repo.repo_name) filesystem_repos = ScmModel().repo_scan() added, removed = repo2db_mapper(filesystem_repos, rm_obsolete, diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -2103,7 +2103,7 @@ class CacheInvalidation(Base, BaseModel) return "%s%s" % (prefix, key) @classmethod - def set_invalidate(cls, repo_name, delete=False): + def set_invalidate(cls, repo_name): """ Mark all caches of a repo as invalid in the database. """ @@ -2114,11 +2114,7 @@ class CacheInvalidation(Base, BaseModel) for inv_obj in inv_objs: log.debug('marking %s key for invalidation based on repo_name=%s', inv_obj, safe_str(repo_name)) - if delete: - Session().delete(inv_obj) - else: - inv_obj.cache_active = False - Session().add(inv_obj) + Session().delete(inv_obj) Session().commit() @classmethod diff --git a/kallithea/model/scm.py b/kallithea/model/scm.py --- a/kallithea/model/scm.py +++ b/kallithea/model/scm.py @@ -331,13 +331,13 @@ class ScmModel(BaseModel): .filter(RepoGroup.group_parent_id == None).all() return [x for x in RepoGroupList(all_groups)] - def mark_for_invalidation(self, repo_name, delete=False): + def mark_for_invalidation(self, repo_name): """ Mark caches of this repo invalid in the database. :param repo_name: the repo for which caches should be marked invalid """ - CacheInvalidation.set_invalidate(repo_name, delete=delete) + CacheInvalidation.set_invalidate(repo_name) repo = Repository.get_by_repo_name(repo_name) if repo is not None: repo.update_changeset_cache() diff --git a/kallithea/tests/other/manual_test_vcs_operations.py b/kallithea/tests/other/manual_test_vcs_operations.py --- a/kallithea/tests/other/manual_test_vcs_operations.py +++ b/kallithea/tests/other/manual_test_vcs_operations.py @@ -273,8 +273,8 @@ class TestVCSOperations(BaseTestCase): stdout, stderr = _add_files_and_push('hg', DEST, files_no=1) key = CacheInvalidation.query().filter(CacheInvalidation.cache_key - ==HG_REPO).one() - self.assertEqual(key.cache_active, False) + ==HG_REPO).all() + self.assertEqual(key, []) def test_push_invalidates_cache_git(self): key = CacheInvalidation.query().filter(CacheInvalidation.cache_key @@ -295,9 +295,8 @@ class TestVCSOperations(BaseTestCase): _check_proper_git_push(stdout, stderr) key = CacheInvalidation.query().filter(CacheInvalidation.cache_key - ==GIT_REPO).one() - print CacheInvalidation.get_all() - self.assertEqual(key.cache_active, False) + ==GIT_REPO).all() + self.assertEqual(key, []) def test_push_wrong_credentials_hg(self): DEST = _get_tmp_dir()