Changeset - 3a007d806f0f
[Not reviewed]
beta
0 2 0
Marcin Kuzminski - 13 years ago 2012-09-05 22:09:25
marcin@python-works.com
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
2 files changed with 12 insertions and 6 deletions:
0 comments (0 inline, 0 general)
rhodecode/lib/utils.py
Show inline comments
 
@@ -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
 

	
 

	
rhodecode/model/db.py
Show inline comments
 
@@ -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()
0 comments (0 inline, 0 general)