From 30d0c549501f2cc7a0f821859f303e5ad89af4ee Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 24 Oct 2018 14:09:41 -0700 Subject: [PATCH] Use a pre-commit hook for change_tag_def count updates Bug: T207881 Change-Id: I3000f14d0e49482b0c90ffcfc494211fbc198a20 --- includes/changetags/ChangeTags.php | 43 +++++++++++++++++------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/includes/changetags/ChangeTags.php b/includes/changetags/ChangeTags.php index 1d303c77b5..b28983f9ef 100644 --- a/includes/changetags/ChangeTags.php +++ b/includes/changetags/ChangeTags.php @@ -351,13 +351,15 @@ class ChangeTags { foreach ( $tagsToAdd as $tag ) { $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag ); } - - $dbw->update( - 'change_tag_def', - [ 'ctd_count = ctd_count + 1' ], - [ 'ctd_name' => $tagsToAdd ], - __METHOD__ - ); + // T207881: update the counts at the end of the transaction + $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tagsToAdd ) { + $dbw->update( + 'change_tag_def', + [ 'ctd_count = ctd_count + 1' ], + [ 'ctd_name' => $tagsToAdd ], + __METHOD__ + ); + } ); } $tagsRows = []; @@ -408,18 +410,21 @@ class ChangeTags { ); $dbw->delete( 'change_tag', $conds, __METHOD__ ); if ( $dbw->affectedRows() && $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) { - $dbw->update( - 'change_tag_def', - [ 'ctd_count = ctd_count - 1' ], - [ 'ctd_name' => $tag ], - __METHOD__ - ); - - $dbw->delete( - 'change_tag_def', - [ 'ctd_name' => $tag, 'ctd_count' => 0, 'ctd_user_defined' => 0 ], - __METHOD__ - ); + // T207881: update the counts at the end of the transaction + $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tag ) { + $dbw->update( + 'change_tag_def', + [ 'ctd_count = ctd_count - 1' ], + [ 'ctd_name' => $tag ], + __METHOD__ + ); + + $dbw->delete( + 'change_tag_def', + [ 'ctd_name' => $tag, 'ctd_count' => 0, 'ctd_user_defined' => 0 ], + __METHOD__ + ); + } ); } } } -- 2.20.1