jenkins-bot has submitted this change and it was merged. Change subject: Reduce database locking ......................................................................
Reduce database locking Bug: T89359 Change-Id: I0e19b3f7017fc25d3382eea0c98c38516312e91c (cherry picked from commit 0927b63933952400b8a90fae350cdd92e49ad5f0) --- M includes/QuestionStore.php 1 file changed, 30 insertions(+), 13 deletions(-) Approvals: MaxSem: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/QuestionStore.php b/includes/QuestionStore.php index c7af37b..01f5eb0 100644 --- a/includes/QuestionStore.php +++ b/includes/QuestionStore.php @@ -20,6 +20,36 @@ } $dbw = wfGetDB( DB_MASTER ); + + // Select rows to be deleted instead of deadlocking with blind DELETE over mostly 0 rows + // Old versions + $or = 'wgq_version <> ' . self::FORMAT_VERSION; + // Campaigns not in the new list + if ( $campaigns ) { + $names = self::campaignList( array_keys( $campaigns ) ); + $or .= " OR wgq_campaign NOT IN($names)"; + } + $conds = array( + 'wgq_page' => $pageId, + $or, + ); + $res = $dbw->select( + 'wikigrok_questions', + array( 'wgq_page', 'wgq_campaign', 'wgq_version' ), + $conds, + __METHOD__ + ); + foreach ( $res as $row ) { + $dbw->delete( 'wikigrok_questions', + array( + 'wgq_page' => $row->wgq_page, + 'wgq_campaign' => $row->wgq_campaign, + 'wgq_version' => $row->wgq_version, + ), + __METHOD__ + ); + } + $rows = array(); foreach ( $campaigns as $name => $data ) { $rows[] = array( @@ -33,19 +63,6 @@ if ( $rows ) { $dbw->insert( 'wikigrok_questions', $rows, __METHOD__, array( 'IGNORE' ) ); } - - $conds = array( 'wgq_page' => $pageId ); - // Kill old versions - $dbw->delete( 'wikigrok_questions', - $conds + array( 'wgq_version <> ' . self::FORMAT_VERSION ), - __METHOD__ - ); - if ( $campaigns ) { - $names = self::campaignList( array_keys( $campaigns ) ); - $conds[] = "wgq_campaign NOT IN($names)"; - } - // Delete campaigns not in the new list - $dbw->delete( 'wikigrok_questions', $conds, __METHOD__ ); } /** -- To view, visit https://gerrit.wikimedia.org/r/191182 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I0e19b3f7017fc25d3382eea0c98c38516312e91c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikiGrok Gerrit-Branch: wmf/1.25wmf17 Gerrit-Owner: MaxSem <maxsem.w...@gmail.com> Gerrit-Reviewer: MaxSem <maxsem.w...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits