Show More
@@ -1147,7 +1147,7 b' class Repository(Base, BaseModel):' | |||
|
1147 | 1147 | |
|
1148 | 1148 | def set_invalidate(self): |
|
1149 | 1149 | """ |
|
1150 | set a cache for invalidation for this instance | |
|
1150 | Mark caches of this repo as invalid. | |
|
1151 | 1151 | """ |
|
1152 | 1152 | CacheInvalidation.set_invalidate(repo_name=self.repo_name) |
|
1153 | 1153 | |
@@ -1636,14 +1636,15 b' class CacheInvalidation(Base, BaseModel)' | |||
|
1636 | 1636 | cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
|
1637 | 1637 | # cache_key as created by _get_cache_key |
|
1638 | 1638 | cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
|
1639 | # cache_args is usually a repo_name, possibly with _README/_RSS/_ATOM suffix | |
|
1639 | # cache_args is a repo_name | |
|
1640 | 1640 | cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
|
1641 |
# instance sets cache_active True when it is caching, |
|
|
1641 | # instance sets cache_active True when it is caching, | |
|
1642 | # other instances set cache_active to False to indicate that this cache is invalid | |
|
1642 | 1643 | cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False) |
|
1643 | 1644 | |
|
1644 |
def __init__(self, cache_key, |
|
|
1645 | def __init__(self, cache_key, repo_name=''): | |
|
1645 | 1646 | self.cache_key = cache_key |
|
1646 |
self.cache_args = |
|
|
1647 | self.cache_args = repo_name | |
|
1647 | 1648 | self.cache_active = False |
|
1648 | 1649 | |
|
1649 | 1650 | def __unicode__(self): |
@@ -1664,20 +1665,20 b' class CacheInvalidation(Base, BaseModel)' | |||
|
1664 | 1665 | def _get_cache_key(cls, key): |
|
1665 | 1666 | """ |
|
1666 | 1667 | Wrapper for generating a unique cache key for this instance and "key". |
|
1668 | key must / will start with a repo_name which will be stored in .cache_args . | |
|
1667 | 1669 | """ |
|
1668 | 1670 | import rhodecode |
|
1669 | 1671 | prefix = rhodecode.CONFIG.get('instance_id', '') |
|
1670 | 1672 | return "%s%s" % (prefix, key) |
|
1671 | 1673 | |
|
1672 | 1674 | @classmethod |
|
1673 |
def _get_or_create_inv_obj(cls, key, repo_name |
|
|
1675 | def _get_or_create_inv_obj(cls, key, repo_name): | |
|
1674 | 1676 | inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() |
|
1675 | 1677 | if not inv_obj: |
|
1676 | 1678 | try: |
|
1677 | 1679 | inv_obj = CacheInvalidation(key, repo_name) |
|
1678 | 1680 | Session().add(inv_obj) |
|
1679 |
|
|
|
1680 | Session().commit() | |
|
1681 | Session().commit() | |
|
1681 | 1682 | except Exception: |
|
1682 | 1683 | log.error(traceback.format_exc()) |
|
1683 | 1684 | Session().rollback() |
@@ -1686,11 +1687,8 b' class CacheInvalidation(Base, BaseModel)' | |||
|
1686 | 1687 | @classmethod |
|
1687 | 1688 | def invalidate(cls, key): |
|
1688 | 1689 | """ |
|
1689 |
Returns Invalidation object if th |
|
|
1690 | None otherwise. `cache_active = False` means that this cache | |
|
1691 | state is not valid and needs to be invalidated | |
|
1692 | ||
|
1693 | :param key: | |
|
1690 | Returns Invalidation object if the local cache with the given key is invalid, | |
|
1691 | None otherwise. | |
|
1694 | 1692 | """ |
|
1695 | 1693 | repo_name = key |
|
1696 | 1694 | repo_name = remove_suffix(repo_name, '_README') |
@@ -1698,10 +1696,12 b' class CacheInvalidation(Base, BaseModel)' | |||
|
1698 | 1696 | repo_name = remove_suffix(repo_name, '_ATOM') |
|
1699 | 1697 | |
|
1700 | 1698 | cache_key = cls._get_cache_key(key) |
|
1701 | inv = cls._get_or_create_inv_obj(cache_key, repo_name) | |
|
1699 | inv_obj = cls._get_or_create_inv_obj(cache_key, repo_name) | |
|
1702 | 1700 | |
|
1703 | if inv and not inv.cache_active: | |
|
1704 | return inv | |
|
1701 | if inv_obj and not inv_obj.cache_active: | |
|
1702 | # `cache_active = False` means that this cache | |
|
1703 | # no longer is valid | |
|
1704 | return inv_obj | |
|
1705 | 1705 | |
|
1706 | 1706 | @classmethod |
|
1707 | 1707 | def set_invalidate(cls, key=None, repo_name=None): |
@@ -1734,13 +1734,11 b' class CacheInvalidation(Base, BaseModel)' | |||
|
1734 | 1734 | return invalidated_keys |
|
1735 | 1735 | |
|
1736 | 1736 | @classmethod |
|
1737 | def set_valid(cls, key): | |
|
1737 | def set_valid(cls, cache_key): | |
|
1738 | 1738 | """ |
|
1739 | 1739 | Mark this cache key as active and currently cached |
|
1740 | ||
|
1741 | :param key: | |
|
1742 | 1740 | """ |
|
1743 | inv_obj = cls.query().filter(cls.cache_key == key).scalar() | |
|
1741 | inv_obj = cls.query().filter(cls.cache_key == cache_key).scalar() | |
|
1744 | 1742 | inv_obj.cache_active = True |
|
1745 | 1743 | Session().add(inv_obj) |
|
1746 | 1744 | Session().commit() |
@@ -297,10 +297,9 b' class ScmModel(BaseModel):' | |||
|
297 | 297 | |
|
298 | 298 | def mark_for_invalidation(self, repo_name): |
|
299 | 299 | """ |
|
300 | Puts cache invalidation task into db for | |
|
301 | further global cache invalidation | |
|
300 | Mark caches of this repo invalid in the database. | |
|
302 | 301 | |
|
303 |
:param repo_name: th |
|
|
302 | :param repo_name: the repo for which caches should be marked invalid | |
|
304 | 303 | """ |
|
305 | 304 | invalidated_keys = CacheInvalidation.set_invalidate(repo_name=repo_name) |
|
306 | 305 | repo = Repository.get_by_repo_name(repo_name) |
General Comments 0
You need to be logged in to leave comments.
Login now