From b9ac85cbf304a65d900cda00fafe53bf82d7a227 Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 9 May 2012 13:59:27 -0700 Subject: [PATCH] [SiteStatsUpdate] Changing raw DB update calls to use SiteStatsUpdate. * Made SiteStatsUpdate fields protected * Added factory function for unretarded object construction * Changed FileRepo code to use deferred stats updates like everything else Change-Id: I93039104b14f0362509e37b6852604ffb0898dc7 --- includes/SiteStats.php | 49 ++++++++++++++++++++-------- includes/filerepo/file/LocalFile.php | 24 ++++---------- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/includes/SiteStats.php b/includes/SiteStats.php index abb11306a0..b557ca2893 100644 --- a/includes/SiteStats.php +++ b/includes/SiteStats.php @@ -223,15 +223,37 @@ class SiteStats { * Class for handling updates to the site_stats table */ class SiteStatsUpdate implements DeferrableUpdate { + protected $views = 0; + protected $edits = 0; + protected $pages = 0; + protected $goodPages = 0; + protected $users = 0; + protected $images = 0; + + // @TODO: deprecate this + function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) { + $this->views = $views; + $this->edits = $edits; + $this->goodPages = $good; + $this->pages = $pages; + $this->users = $users; + } + + /** + * @param $deltas Array + * @return SiteStatsUpdate + */ + public static function factory( array $deltas ) { + $update = new self( 0, 0, 0 ); - var $mViews, $mEdits, $mGood, $mPages, $mUsers; + $fields = array( 'views', 'edits', 'pages', 'goodPages', 'users', 'images' ); + foreach ( $fields as $field ) { + if ( isset( $deltas[$field] ) && $deltas[$field] ) { + $update->$field = $deltas[$field]; + } + } - function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) { - $this->mViews = $views; - $this->mEdits = $edits; - $this->mGood = $good; - $this->mPages = $pages; - $this->mUsers = $users; + return $update; } /** @@ -252,16 +274,17 @@ class SiteStatsUpdate implements DeferrableUpdate { } } - function doUpdate() { + public function doUpdate() { $dbw = wfGetDB( DB_MASTER ); $updates = ''; - $this->appendUpdate( $updates, 'ss_total_views', $this->mViews ); - $this->appendUpdate( $updates, 'ss_total_edits', $this->mEdits ); - $this->appendUpdate( $updates, 'ss_good_articles', $this->mGood ); - $this->appendUpdate( $updates, 'ss_total_pages', $this->mPages ); - $this->appendUpdate( $updates, 'ss_users', $this->mUsers ); + $this->appendUpdate( $updates, 'ss_total_views', $this->views ); + $this->appendUpdate( $updates, 'ss_total_edits', $this->edits ); + $this->appendUpdate( $updates, 'ss_good_articles', $this->goodPages ); + $this->appendUpdate( $updates, 'ss_total_pages', $this->pages ); + $this->appendUpdate( $updates, 'ss_users', $this->users ); + $this->appendUpdate( $updates, 'ss_images', $this->images ); if ( $updates ) { $site_stats = $dbw->tableName( 'site_stats' ); diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index af93c53e20..e2744b12cf 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -1094,16 +1094,8 @@ class LocalFile extends File { __METHOD__ ); } else { - # This is a new file - # Update the image count - $dbw->begin( __METHOD__ ); - $dbw->update( - 'site_stats', - array( 'ss_images = ss_images+1' ), - '*', - __METHOD__ - ); - $dbw->commit( __METHOD__ ); + # This is a new file, so update the image count + DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) ); } $descTitle = $this->getTitle(); @@ -1297,13 +1289,11 @@ class LocalFile extends File { # Get old version relative paths $archiveNames = $batch->addOlds(); $status = $batch->execute(); + $this->unlock(); // done + if ( $status->isOK() ) { - // Update site_stats - $dbw = $this->repo->getMasterDB(); - $site_stats = $dbw->tableName( 'site_stats' ); - $dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ ); + DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => -1 ) ) ); } - $this->unlock(); // done $this->purgeEverything(); foreach ( $archiveNames as $archiveName ) { @@ -2080,9 +2070,7 @@ class LocalFileRestoreBatch { if ( !$exists ) { wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" ); - // Update site_stats - $site_stats = $dbw->tableName( 'site_stats' ); - $dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ ); + DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) ); $this->file->purgeEverything(); } else { -- 2.20.1