From 922e68f739f143ad13c02abe56cc92f797f60081 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 5 Apr 2017 17:25:45 -0700 Subject: [PATCH] Reduce contention during view-based category count refreshes Bug: T162121 Change-Id: I05b539922508d5e73979ccc8ea1c148b16dd13db --- includes/CategoryViewer.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php index 31369b0187..0205d708ca 100644 --- a/includes/CategoryViewer.php +++ b/includes/CategoryViewer.php @@ -742,7 +742,13 @@ class CategoryViewer extends ContextSource { $totalcnt = $rescnt; $category = $this->cat; DeferredUpdates::addCallableUpdate( function () use ( $category ) { - $category->refreshCounts(); + # Avoid excess contention on the same category (T162121) + $dbw = wfGetDB( DB_MASTER ); + $name = __METHOD__ . ':' . md5( $this->mName ); + $scopedLock = $dbw->getScopedLockAndFlush( $name, __METHOD__, 1 ); + if ( $scopedLock ) { + $category->refreshCounts(); + } } ); } else { // Case 3: hopeless. Don't give a total count at all. -- 2.20.1