From: Aaron Schulz Date: Sat, 14 May 2016 10:54:05 +0000 (-0700) Subject: Improve edit stash hit rate for logged-out users X-Git-Tag: 1.31.0-rc.0~6946 X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=commitdiff_plain;h=ba6844e21c67158c268926c3ffe6ef6214eb3668;p=lhc%2Fweb%2Fwiklou.git Improve edit stash hit rate for logged-out users Check whether they made intervening edits just like logged-in users. Bug: T134620 Change-Id: Id1e0808caee0e474570c4f2e4b1cf845572e17e0 --- diff --git a/includes/api/ApiStashEdit.php b/includes/api/ApiStashEdit.php index 3539eed4f0..93003ccfc0 100644 --- a/includes/api/ApiStashEdit.php +++ b/includes/api/ApiStashEdit.php @@ -294,9 +294,17 @@ class ApiStashEdit extends ApiBase { $logger->debug( "Timestamp-based cache hit for key '$key' (age: $age sec)." ); return $editInfo; // assume nothing changed } elseif ( isset( $editInfo->edits ) && $editInfo->edits === $user->getEditCount() ) { + // Logged-in user made no local upload/template edits in the meantime $stats->increment( 'editstash.cache_hits.presumed_fresh' ); $logger->debug( "Edit count based cache hit for key '$key' (age: $age sec)." ); - return $editInfo; // use made no local upload/template edits in the meantime + return $editInfo; + } elseif ( $user->isAnon() + && self::lastEditTime( $user ) < $editInfo->output->getCacheTime() + ) { + // Logged-out user made no local upload/template edits in the meantime + $stats->increment( 'editstash.cache_hits.presumed_fresh' ); + $logger->debug( "Edit check based cache hit for key '$key' (age: $age sec)." ); + return $editInfo; } $dbr = wfGetDB( DB_SLAVE ); @@ -359,6 +367,21 @@ class ApiStashEdit extends ApiBase { return $editInfo; } + /** + * @param User $user + * @return string|null TS_MW timestamp or null + */ + private static function lastEditTime( User $user ) { + $time = wfGetDB( DB_SLAVE )->selectField( + 'recentchanges', + 'MAX(rc_timestamp)', + [ 'rc_user_text' => $user->getName() ], + __METHOD__ + ); + + return wfTimestampOrNull( TS_MW, $time ); + } + /** * Get the temporary prepared edit stash key for a user * @@ -371,7 +394,7 @@ class ApiStashEdit extends ApiBase { * @param User $user User to get parser options from * @return string */ - protected static function getStashKey( Title $title, Content $content, User $user ) { + private static function getStashKey( Title $title, Content $content, User $user ) { $hash = sha1( implode( ':', [ $content->getModel(), $content->getDefaultFormat(), @@ -394,7 +417,7 @@ class ApiStashEdit extends ApiBase { * @param User $user * @return array (stash info array, TTL in seconds) or (null, 0) */ - protected static function buildStashValue( + private static function buildStashValue( Content $pstContent, ParserOutput $parserOutput, $timestamp, User $user ) { // If an item is renewed, mind the cache TTL determined by config and parser functions.