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

Reply via email to