Krinkle has uploaded a new change for review. https://gerrit.wikimedia.org/r/255042
Change subject: [WIP] Update refreshMessageBlobs.php to no longer use msg_resource table ...................................................................... [WIP] Update refreshMessageBlobs.php to no longer use msg_resource table Requires Id8c26f41a82597e in MediaWiki core Change-Id: Ifa74e8eabda2ab282851fad3a82a4e1e124d2b2e --- M refreshMessageBlobs.php 1 file changed, 7 insertions(+), 66 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaMaintenance refs/changes/42/255042/1 diff --git a/refreshMessageBlobs.php b/refreshMessageBlobs.php index bb9d44c..2ceb434 100644 --- a/refreshMessageBlobs.php +++ b/refreshMessageBlobs.php @@ -1,75 +1,16 @@ <?php +require_once __DIR__ . '/WikimediaMaintenance.php'; + /** - * Refresh the msg_resource table when cdb message files have been updated + * Invalidate MessageBlobStore cache keys */ - -require_once( __DIR__ . '/WikimediaMaintenance.php' ); - class RefreshMessageBlobs extends WikimediaMaintenance { - function execute() { - global $IP; - - # Get modification timesatmp for English (fallback) from the l10n cache - $enModTime = filemtime( "$IP/cache/l10n/l10n_cache-en.cdb" ); - $langModTime = array( 'en' => $enModTime ); - - # To avoid cache stampede, fetch all the non-empty resource message - # blobs and update them one at a time manually. To avoid excess memory - # usage in LocalisationCache, order by language and clear the cache - # between each language. - $dbr = wfGetDB( DB_SLAVE ); - $dbw = wfGetDB( DB_MASTER ); - $res = $dbr->select( 'msg_resource', - array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ), - "mr_blob != '{}'", - __METHOD__, - array( 'ORDER BY' => 'mr_lang' ) - ); - $prevLang = false; - foreach ( $res as $row ) { - # Check modification time for this language - if ( !isset( $langModTime[$row->mr_lang] ) ) { - $file = "$IP/cache/l10n/l10n_cache-$row->mr_lang.cdb"; - if ( file_exists( $file ) ) { - $langModTime[$row->mr_lang] = filemtime( $file ); - } else { - $langModTime[$row->mr_lang] = $enModTime; - } - } - if ( wfTimestamp( TS_UNIX, $row->mr_timestamp ) >= $langModTime[$row->mr_lang] ) { - continue; - } - - # Clear LocalisationCache of the old language to reduce memory usage - if ( $prevLang !== false && $prevLang !== $row->mr_lang ) { - Language::getLocalisationCache()->unload( $prevLang ); - } - $prevLang = $row->mr_lang; - - # Update message blob. Even though we read from a slave and are - # writing to master, it should be safe because we're including - # mr_timestamp in the WHERE clause. - $messages = FormatJson::decode( $row->mr_blob, true ); - foreach ( $messages as $key => $value ) { - $messages[$key] = wfMessage( $key )->inLanguage( $row->mr_lang )->plain(); - } - $dbw->update( 'msg_resource', - array( - 'mr_blob' => FormatJson::encode( (object)$messages ), - 'mr_timestamp' => $dbw->timestamp(), - ), - array( - 'mr_resource' => $row->mr_resource, - 'mr_lang' => $row->mr_lang, - 'mr_timestamp' => $row->mr_timestamp, - ), - __METHOD__ - ); - wfWaitForSlaves(); - } + public function execute() { + MessageBlobStore::clear(); + wfWaitForSlaves(); } } $maintClass = 'RefreshMessageBlobs'; -require_once( DO_MAINTENANCE ); +require_once DO_MAINTENANCE; -- To view, visit https://gerrit.wikimedia.org/r/255042 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifa74e8eabda2ab282851fad3a82a4e1e124d2b2e Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikimediaMaintenance Gerrit-Branch: master Gerrit-Owner: Krinkle <krinklem...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits