// Make sure all links update threads see the changes of each other.
// This handles the case when updates have to batched into several COMMITs.
$scopedLock = LinksUpdate::acquirePageLock( $this->getDB(), $id );
+ if ( !$scopedLock ) {
+ throw new RuntimeException( "Could not acquire lock for page ID '{$id}'." );
+ }
}
$title = $this->page->getTitle();
if ( $title->getNamespace() === NS_CATEGORY ) {
// T166757: do the update after the main job DB commit
DeferredUpdates::addCallableUpdate( function () use ( $title ) {
- $this->refreshCategoryIfEmpty( $title );
+ $cat = Category::newFromName( $title->getDBkey() );
+ $cat->refreshCountsIfEmpty();
} );
}
ScopedCallback::consume( $scopedLock );
}
- /**
- * @param Title $title
- */
- private function refreshCategoryIfEmpty( Title $title ) {
- $dbw = $this->getDB();
-
- $row = $dbw->selectRow(
- 'category',
- [ 'cat_id', 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files' ],
- [ 'cat_title' => $title->getDBkey(), 'cat_pages <= 100' ],
- __METHOD__
- );
-
- if ( !$row ) {
- return; // nothing to delete
- }
-
- $cat = Category::newFromRow( $row, $title );
- $hasLink = $dbw->selectField(
- 'categorylinks',
- '1',
- [ 'cl_to' => $title->getDBkey() ],
- __METHOD__
- );
- if ( !$hasLink ) {
- $cat->refreshCounts(); // delete the category table entry
- }
- }
-
private function batchDeleteByPK( $table, array $conds, array $pk, $bSize ) {
$services = MediaWikiServices::getInstance();
$lbFactory = $services->getDBLoadBalancerFactory();