From d4cb1968c844fcd4e29e6ba40751f6639dca0e53 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sat, 6 Jul 2019 15:57:20 -0700 Subject: [PATCH] Reduce contention of getScopedLockAndFlush() callers by using the DB domain in the key Change-Id: Ie9fb6a9ff384c72cca559f74d8e409d108207ae3 --- includes/deferred/LinksUpdate.php | 2 +- includes/jobqueue/jobs/CategoryMembershipChangeJob.php | 2 +- includes/jobqueue/jobs/ClearUserWatchlistJob.php | 2 +- includes/user/UserGroupMembership.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/deferred/LinksUpdate.php b/includes/deferred/LinksUpdate.php index 5b68ff86ed..603e49c5ac 100644 --- a/includes/deferred/LinksUpdate.php +++ b/includes/deferred/LinksUpdate.php @@ -212,7 +212,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { * @since 1.27 */ public static function acquirePageLock( IDatabase $dbw, $pageId, $why = 'atomicity' ) { - $key = "LinksUpdate:$why:pageid:$pageId"; + $key = "{$dbw->getDomainID()}:LinksUpdate:$why:pageid:$pageId"; // per-wiki $scopedLock = $dbw->getScopedLockAndFlush( $key, __METHOD__, 15 ); if ( !$scopedLock ) { $logger = LoggerFactory::getInstance( 'SecondaryDataUpdate' ); diff --git a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php index be76fc63b3..882ae6430b 100644 --- a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php +++ b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php @@ -99,7 +99,7 @@ class CategoryMembershipChangeJob extends Job { } // Use a named lock so that jobs for this page see each others' changes - $lockKey = "CategoryMembershipUpdates:{$page->getId()}"; + $lockKey = "{$dbw->getDomainID()}:CategoryMembershipChange:{$page->getId()}"; // per-wiki $scopedLock = $dbw->getScopedLockAndFlush( $lockKey, __METHOD__, 3 ); if ( !$scopedLock ) { $this->setLastError( "Could not acquire lock '$lockKey'" ); diff --git a/includes/jobqueue/jobs/ClearUserWatchlistJob.php b/includes/jobqueue/jobs/ClearUserWatchlistJob.php index 1793053a45..74b90ed6d7 100644 --- a/includes/jobqueue/jobs/ClearUserWatchlistJob.php +++ b/includes/jobqueue/jobs/ClearUserWatchlistJob.php @@ -50,7 +50,7 @@ class ClearUserWatchlistJob extends Job implements GenericParameterJob { } // Use a named lock so that jobs for this user see each others' changes - $lockKey = "ClearUserWatchlistJob:$userId"; + $lockKey = "{{$dbw->getDomainID()}}:ClearUserWatchlist:$userId"; // per-wiki $scopedLock = $dbw->getScopedLockAndFlush( $lockKey, __METHOD__, 10 ); if ( !$scopedLock ) { $this->setLastError( "Could not acquire lock '$lockKey'" ); diff --git a/includes/user/UserGroupMembership.php b/includes/user/UserGroupMembership.php index e06df9fd23..170e6a0d53 100644 --- a/includes/user/UserGroupMembership.php +++ b/includes/user/UserGroupMembership.php @@ -250,7 +250,7 @@ class UserGroupMembership { $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ ); $dbw = $services->getDBLoadBalancer()->getConnection( DB_MASTER ); - $lockKey = $dbw->getDomainID() . ':usergroups-prune'; // specific to this wiki + $lockKey = "{$dbw->getDomainID()}:UserGroupMembership:purge"; // per-wiki $scopedLock = $dbw->getScopedLockAndFlush( $lockKey, __METHOD__, 0 ); if ( !$scopedLock ) { return false; // already running -- 2.20.1