diff --git a/zerver/__init__.py b/zerver/__init__.py index e69de29bb2..7693ebe67d 100644 --- a/zerver/__init__.py +++ b/zerver/__init__.py @@ -0,0 +1,2 @@ +# Load AppConfig app subclass by default on django applications initialization +default_app_config = 'zerver.apps.ZerverConfig' diff --git a/zerver/apps.py b/zerver/apps.py new file mode 100644 index 0000000000..d8c692d91e --- /dev/null +++ b/zerver/apps.py @@ -0,0 +1,23 @@ +from __future__ import print_function + +from django.apps import AppConfig +from django.db.models.signals import post_migrate +from django.core.cache import cache +from django.conf import settings +from typing import Any, Dict + +import logging + +def flush_cache(sender, **kwargs): + # type: (AppConfig, **Any) -> None + logging.info("Clearing memcached cache after migrations") + cache.clear() + + +class ZerverConfig(AppConfig): + name = "zerver" # type: str + + def ready(self): + # type: () -> None + if settings.POST_MIGRATION_CACHE_FLUSHING: + post_migrate.connect(flush_cache, sender=self) diff --git a/zproject/dev_settings.py b/zproject/dev_settings.py index 5a28077d5f..00cebac23d 100644 --- a/zproject/dev_settings.py +++ b/zproject/dev_settings.py @@ -36,3 +36,5 @@ SAVE_FRONTEND_STACKTRACES = True EVENT_LOGS_ENABLED = True SYSTEM_ONLY_REALMS = set() # type: Set[str] USING_PGROONGA = True +# Flush cache after migration. +POST_MIGRATION_CACHE_FLUSHING = True # type: bool diff --git a/zproject/settings.py b/zproject/settings.py index d5eb1dba75..b0d59bf8a7 100644 --- a/zproject/settings.py +++ b/zproject/settings.py @@ -178,6 +178,7 @@ DEFAULT_SETTINGS = {'TWITTER_CONSUMER_KEY': '', 'SYSTEM_ONLY_REALMS': {"zulip.com"}, 'FIRST_TIME_TOS_TEMPLATE': None, 'USING_PGROONGA': False, + 'POST_MIGRATION_CACHE_FLUSHING': False, } for setting_name, setting_val in six.iteritems(DEFAULT_SETTINGS):