From a9aadaff39bd7d5684b05d829382300572ffee52 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Mon, 30 Mar 2015 14:44:50 -0700 Subject: [PATCH] Removed "page-lastedit" cache key trick from WikiPage * Just rely on chronology protected and edit conflict handling. The time a user spends looking at and editing pages is larger than any normal slave lag anyway. * However make sure that pages just made in the request are visible. * In "master" datacenters, the slave lag will low anyway, and callers make use of $flags when needed. In other datacenters, the cache will itself be subject to lag anyway. * Logging (DBPerformance log) shows this case is very rarely hit anyway. Change-Id: If34d67c02f9a7bf0a506ee8f3990697eb403a710 --- includes/page/WikiPage.php | 38 ++++++-------------------------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index d96e2711c6..f2a3c799a8 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -367,14 +367,12 @@ class WikiPage implements Page, IDBAccessObject { $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle ); } elseif ( $from === self::READ_NORMAL ) { $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle ); - // Use a "last rev inserted" timestamp key to diminish the issue of slave lag. - // Note that DB also stores the master position in the session and checks it. - $touched = $this->getCachedLastEditTime(); - if ( $touched ) { // key set - if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) { - $from = self::READ_LATEST; - $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle ); - } + if ( !$data + && wfGetLB()->getServerCount() > 1 + && wfGetLB()->hasOrMadeRecentMasterChanges() + ) { + $from = self::READ_LATEST; + $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle ); } } else { // No idea from where the caller got this data, assume slave database. @@ -810,29 +808,6 @@ class WikiPage implements Page, IDBAccessObject { } } - /** - * Get the cached timestamp for the last time the page changed. - * This is only used to help handle slave lag by comparing to page_touched. - * @return string MW timestamp - */ - protected function getCachedLastEditTime() { - global $wgMemc; - $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) ); - return $wgMemc->get( $key ); - } - - /** - * Set the cached timestamp for the last time the page changed. - * This is only used to help handle slave lag by comparing to page_touched. - * @param string $timestamp - * @return void - */ - public function setCachedLastEditTime( $timestamp ) { - global $wgMemc; - $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) ); - $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 ); - } - /** * Determine whether a page would be suitable for being counted as an * article in the site_stats table based on the title & its content @@ -1304,7 +1279,6 @@ class WikiPage implements Page, IDBAccessObject { if ( $result ) { $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect ); $this->setLastEdit( $revision ); - $this->setCachedLastEditTime( $now ); $this->mLatest = $revision->getId(); $this->mIsRedirect = (bool)$rt; // Update the LinkCache. -- 2.20.1