[MediaWiki-commits] [Gerrit] Cut down on deadlocks in invalidatePages() - change (mediawiki/core)
jenkins-bot has submitted this change and it was merged. Change subject: Cut down on deadlocks in invalidatePages() .. Cut down on deadlocks in invalidatePages() Bug: T94992 Change-Id: I70f9d931b624e46ccc19f890d61de8d11326e686 --- M includes/deferred/SqlDataUpdate.php 1 file changed, 33 insertions(+), 32 deletions(-) Approvals: Anomie: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/deferred/SqlDataUpdate.php b/includes/deferred/SqlDataUpdate.php index 5823b2e..49164e3 100644 --- a/includes/deferred/SqlDataUpdate.php +++ b/includes/deferred/SqlDataUpdate.php @@ -111,39 +111,40 @@ return; } - /** -* Determine which pages need to be updated -* This is necessary to prevent the job queue from smashing the DB with -* large numbers of concurrent invalidations of the same page -*/ - $now = $this->mDb->timestamp(); - $ids = array(); - $res = $this->mDb->select( 'page', array( 'page_id' ), - array( - 'page_namespace' => $namespace, - 'page_title' => $dbkeys, - 'page_touched < ' . $this->mDb->addQuotes( $now ) - ), __METHOD__ - ); + $dbw = $this->mDb; + $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) { + /** +* Determine which pages need to be updated +* This is necessary to prevent the job queue from smashing the DB with +* large numbers of concurrent invalidations of the same page +*/ + $now = $dbw->timestamp(); + $ids = $dbw->selectFieldValues( 'page', + 'page_id', + array( + 'page_namespace' => $namespace, + 'page_title' => $dbkeys, + 'page_touched < ' . $dbw->addQuotes( $now ) + ), + __METHOD__ + ); - foreach ( $res as $row ) { - $ids[] = $row->page_id; - } + if ( $ids === array() ) { + return; + } - if ( $ids === array() ) { - return; - } - - /** -* Do the update -* We still need the page_touched condition, in case the row has changed since -* the non-locking select above. -*/ - $this->mDb->update( 'page', array( 'page_touched' => $now ), - array( - 'page_id' => $ids, - 'page_touched < ' . $this->mDb->addQuotes( $now ) - ), __METHOD__ - ); + /** +* Do the update +* We still need the page_touched condition, in case the row has changed since +* the non-locking select above. +*/ + $dbw->update( 'page', + array( 'page_touched' => $now ), + array( + 'page_id' => $ids, + 'page_touched < ' . $dbw->addQuotes( $now ) + ), __METHOD__ + ); + } ); } } -- To view, visit https://gerrit.wikimedia.org/r/201729 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I70f9d931b624e46ccc19f890d61de8d11326e686 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Aaron Schulz Gerrit-Reviewer: Aaron Schulz Gerrit-Reviewer: Anomie Gerrit-Reviewer: Chad Gerrit-Reviewer: jenkins-bot <> ___ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
[MediaWiki-commits] [Gerrit] Cut down on deadlocks in invalidatePages() - change (mediawiki/core)
Aaron Schulz has uploaded a new change for review. https://gerrit.wikimedia.org/r/201729 Change subject: Cut down on deadlocks in invalidatePages() .. Cut down on deadlocks in invalidatePages() Bug: T94992 Change-Id: I70f9d931b624e46ccc19f890d61de8d11326e686 --- M includes/deferred/SqlDataUpdate.php 1 file changed, 33 insertions(+), 32 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/29/201729/1 diff --git a/includes/deferred/SqlDataUpdate.php b/includes/deferred/SqlDataUpdate.php index 5823b2e..49164e3 100644 --- a/includes/deferred/SqlDataUpdate.php +++ b/includes/deferred/SqlDataUpdate.php @@ -111,39 +111,40 @@ return; } - /** -* Determine which pages need to be updated -* This is necessary to prevent the job queue from smashing the DB with -* large numbers of concurrent invalidations of the same page -*/ - $now = $this->mDb->timestamp(); - $ids = array(); - $res = $this->mDb->select( 'page', array( 'page_id' ), - array( - 'page_namespace' => $namespace, - 'page_title' => $dbkeys, - 'page_touched < ' . $this->mDb->addQuotes( $now ) - ), __METHOD__ - ); + $dbw = $this->mDb; + $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) { + /** +* Determine which pages need to be updated +* This is necessary to prevent the job queue from smashing the DB with +* large numbers of concurrent invalidations of the same page +*/ + $now = $dbw->timestamp(); + $ids = $dbw->selectFieldValues( 'page', + 'page_id', + array( + 'page_namespace' => $namespace, + 'page_title' => $dbkeys, + 'page_touched < ' . $dbw->addQuotes( $now ) + ), + __METHOD__ + ); - foreach ( $res as $row ) { - $ids[] = $row->page_id; - } + if ( $ids === array() ) { + return; + } - if ( $ids === array() ) { - return; - } - - /** -* Do the update -* We still need the page_touched condition, in case the row has changed since -* the non-locking select above. -*/ - $this->mDb->update( 'page', array( 'page_touched' => $now ), - array( - 'page_id' => $ids, - 'page_touched < ' . $this->mDb->addQuotes( $now ) - ), __METHOD__ - ); + /** +* Do the update +* We still need the page_touched condition, in case the row has changed since +* the non-locking select above. +*/ + $dbw->update( 'page', + array( 'page_touched' => $now ), + array( + 'page_id' => $ids, + 'page_touched < ' . $dbw->addQuotes( $now ) + ), __METHOD__ + ); + } ); } } -- To view, visit https://gerrit.wikimedia.org/r/201729 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I70f9d931b624e46ccc19f890d61de8d11326e686 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Aaron Schulz ___ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits