When clearing the LocalisationCache, avoid instantiating a ResourceLoader
instance. Doing so introduces a circular dependency among service
instances.
This patch introduces a static method for clearing the MessageBlobStore
without the need for a ResoruceLoader instance.
Bug: T231866
Change-Id: I404e64713fee6a534ba014981cef78af0b91f2aa
(cherry picked from commit
41415deda4c66ba52194c4df51c54c367f1f10b9)
$store,
$logger,
[ function () use ( $services ) {
$store,
$logger,
[ function () use ( $services ) {
- $services->getResourceLoader()->getMessageBlobStore()->clear();
+ // NOTE: Make sure we use the same cache object that is assigned in the
+ // constructor of the MessageBlobStore class used by ResourceLoader.
+ // T231866: Avoid circular dependency via ResourceLoader.
+ MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache() );
} ],
$services->getLanguageNameUtils()
);
} ],
$services->getLanguageNameUtils()
);
public function __construct( ResourceLoader $rl, LoggerInterface $logger = null ) {
$this->resourceloader = $rl;
$this->logger = $logger ?: new NullLogger();
public function __construct( ResourceLoader $rl, LoggerInterface $logger = null ) {
$this->resourceloader = $rl;
$this->logger = $logger ?: new NullLogger();
+
+ // NOTE: when changing this assignment, make sure the code in the instantiator for
+ // LocalisationCache which calls MessageBlobStore::clearGlobalCacheEntry() uses the
+ // same cache object.
$this->wanCache = MediaWikiServices::getInstance()->getMainWANObjectCache();
}
$this->wanCache = MediaWikiServices::getInstance()->getMainWANObjectCache();
}
/**
* Invalidate cache keys for all known modules.
/**
* Invalidate cache keys for all known modules.
- * Called by LocalisationCache after cache is regenerated.
*/
public function clear() {
*/
public function clear() {
- $cache = $this->wanCache;
+ self::clearGlobalCacheEntry( $this->wanCache );
+ }
+
+ /**
+ * Invalidate cache keys for all known modules.
+ *
+ * Called by LocalisationCache after cache is regenerated.
+ *
+ * @param WANObjectCache $cache
+ */
+ public static function clearGlobalCacheEntry( WANObjectCache $cache ) {
// Disable hold-off because:
// - LocalisationCache is populated by messages on-disk and don't have DB lag,
// thus there is no need for hold off. We only clear it after new localisation
// Disable hold-off because:
// - LocalisationCache is populated by messages on-disk and don't have DB lag,
// thus there is no need for hold off. We only clear it after new localisation