# HG changeset patch # User Marcin Kuzminski # Date 2012-09-05 20:09:25 # Node ID 3a007d806f0faef7ec6e169d6010f3c1e06e4090 # Parent 57456b1c215bab5633ef818bd9051513339104c3 Fixing issues of cache invalidation for multiple instances running in rhodecode. - during server start always register all cache keys for all repositories - Don't clear cache markers on start since multiple instances can clear each other out diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -413,6 +413,11 @@ def repo2db_mapper(initial_repo_list, re raise Exception('Missing administrative account !') added = [] +# # clear cache keys +# log.debug("Clearing cache keys now...") +# CacheInvalidation.clear_cache() +# sa.commit() + for name, repo in initial_repo_list.items(): group = map_groups(name) db_repo = rm.get_by_repo_name(name) @@ -438,6 +443,10 @@ def repo2db_mapper(initial_repo_list, re elif install_git_hook: if db_repo.repo_type == 'git': ScmModel().install_git_hook(db_repo.scm_instance) + # during starting install all cache keys for all repositories in the + # system, this will register all repos and multiple instances + key, _prefix, _org_key = CacheInvalidation._get_key(name) + CacheInvalidation._get_or_create_key(key, _prefix, _org_key, commit=False) sa.commit() removed = [] if remove_obsolete: @@ -455,10 +464,6 @@ def repo2db_mapper(initial_repo_list, re log.error(traceback.format_exc()) sa.rollback() - # clear cache keys - log.debug("Clearing cache keys now...") - CacheInvalidation.clear_cache() - sa.commit() return added, removed diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1425,13 +1425,14 @@ class CacheInvalidation(Base, BaseModel) return cls.query().filter(cls.cache_key == key).scalar() @classmethod - def _get_or_create_key(cls, key, prefix, org_key): + def _get_or_create_key(cls, key, prefix, org_key, commit=True): inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() if not inv_obj: try: inv_obj = CacheInvalidation(key, org_key) Session().add(inv_obj) - Session().commit() + if commit: + Session().commit() except Exception: log.error(traceback.format_exc()) Session().rollback()