diff options
author | Amir Sarabadani <ladsgroup@gmail.com> | 2022-05-20 18:25:36 +0200 |
---|---|---|
committer | Ladsgroup <Ladsgroup@gmail.com> | 2022-05-23 15:37:42 +0000 |
commit | 24115a8f4cc0f079f30894bc07eb7476f2dffb3e (patch) | |
tree | ca8a2bc2d105c09244f9ede64a28d1e031efe6cb | |
parent | 384074a32a21902d63a0f87376190cb7c1dd1b54 (diff) | |
download | mediawikicore-24115a8f4cc0f079f30894bc07eb7476f2dffb3e.tar.gz mediawikicore-24115a8f4cc0f079f30894bc07eb7476f2dffb3e.zip |
Start clean up of revision_actor_temp table
It is being dropped in production
Bug: T215466
Change-Id: I66b2cb8653252e720c897351065978119f040ba7
34 files changed, 49 insertions, 533 deletions
diff --git a/RELEASE-NOTES-1.39 b/RELEASE-NOTES-1.39 index bcfe621a9979..265394588792 100644 --- a/RELEASE-NOTES-1.39 +++ b/RELEASE-NOTES-1.39 @@ -49,6 +49,7 @@ For notes on 1.38.x and older releases, see HISTORY. and disabled by default. * $wgPriorityHints and $wgPriorityHintsRatio have been removed. This feature was experimental, and disabled by default. +* $wgActorTableSchemaMigrationStage has been removed. Migration is over. * … === New user-facing features in 1.39 === diff --git a/autoload.php b/autoload.php index 4535398ed0f0..1e699670a670 100644 --- a/autoload.php +++ b/autoload.php @@ -254,7 +254,6 @@ $wgAutoloadLocalClasses = [ 'CleanupInvalidDbKeys' => __DIR__ . '/maintenance/cleanupInvalidDbKeys.php', 'CleanupPreferences' => __DIR__ . '/maintenance/cleanupPreferences.php', 'CleanupRemovedModules' => __DIR__ . '/maintenance/cleanupRemovedModules.php', - 'CleanupRevActorPage' => __DIR__ . '/maintenance/cleanupRevActorPage.php', 'CleanupSpam' => __DIR__ . '/maintenance/cleanupSpam.php', 'CleanupUploadStash' => __DIR__ . '/maintenance/cleanupUploadStash.php', 'CleanupUsersWithNoId' => __DIR__ . '/maintenance/cleanupUsersWithNoId.php', diff --git a/docs/config-schema.yaml b/docs/config-schema.yaml index f916c7f1d561..0d5c6c8ebefe 100644 --- a/docs/config-schema.yaml +++ b/docs/config-schema.yaml @@ -1906,23 +1906,6 @@ config-schema: Max execution time for queries of several expensive special pages such as RecentChanges in milliseconds. @since 1.38 - ActorTableSchemaMigrationStage: - default: 48 - type: integer - description: |- - Actor table schema migration stage, for migration from the temporary table - revision_actor_temp to the revision.rev_actor field. - Use the SCHEMA_COMPAT_XXX flags. Supported values: - - SCHEMA_COMPAT_TEMP - - SCHEMA_COMPAT_WRITE_TEMP_AND_NEW | SCHEMA_COMPAT_READ_TEMP - - SCHEMA_COMPAT_WRITE_TEMP_AND_NEW | SCHEMA_COMPAT_READ_NEW - - SCHEMA_COMPAT_NEW - History: - - 1.31: Added - - 1.32: Now uses SCHEMA_COMPAT_XXX flags - - 1.34: Removed, implicitly SCHEMA_COMPAT_NEW always - - 1.37: Re-added with SCHEMA_COMPAT_NEW renamed to SCHEMA_COMPAT_TEMP for - a new migration which removes temporary tables. TemplateLinksSchemaMigrationStage: default: 3 type: integer diff --git a/includes/MainConfigNames.php b/includes/MainConfigNames.php index 3981e91296b9..302f060921b6 100644 --- a/includes/MainConfigNames.php +++ b/includes/MainConfigNames.php @@ -1232,12 +1232,6 @@ class MainConfigNames { public const MaxExecutionTimeForExpensiveQueries = 'MaxExecutionTimeForExpensiveQueries'; /** - * Name constant for the ActorTableSchemaMigrationStage setting, for use with Config::get() - * @see MainConfigSchema::ActorTableSchemaMigrationStage - */ - public const ActorTableSchemaMigrationStage = 'ActorTableSchemaMigrationStage'; - - /** * Name constant for the TemplateLinksSchemaMigrationStage setting, for use with Config::get() * @see MainConfigSchema::TemplateLinksSchemaMigrationStage */ diff --git a/includes/MainConfigSchema.php b/includes/MainConfigSchema.php index e95130c75c1e..213a8ac69b5a 100644 --- a/includes/MainConfigSchema.php +++ b/includes/MainConfigSchema.php @@ -3000,29 +3000,6 @@ class MainConfigSchema { ]; /** - * Actor table schema migration stage, for migration from the temporary table - * revision_actor_temp to the revision.rev_actor field. - * - * Use the SCHEMA_COMPAT_XXX flags. Supported values: - * - * - SCHEMA_COMPAT_TEMP - * - SCHEMA_COMPAT_WRITE_TEMP_AND_NEW | SCHEMA_COMPAT_READ_TEMP - * - SCHEMA_COMPAT_WRITE_TEMP_AND_NEW | SCHEMA_COMPAT_READ_NEW - * - SCHEMA_COMPAT_NEW - * - * History: - * - 1.31: Added - * - 1.32: Now uses SCHEMA_COMPAT_XXX flags - * - 1.34: Removed, implicitly SCHEMA_COMPAT_NEW always - * - 1.37: Re-added with SCHEMA_COMPAT_NEW renamed to SCHEMA_COMPAT_TEMP for - * a new migration which removes temporary tables. - */ - public const ActorTableSchemaMigrationStage = [ - 'default' => SCHEMA_COMPAT_TEMP, - 'type' => 'integer', - ]; - - /** * Templatelinks table schema migration stage, for normalizing tl_namespace and tl_title fields. * * Use the SCHEMA_COMPAT_XXX flags. Supported values: diff --git a/includes/MergeHistory.php b/includes/MergeHistory.php index b7c8eb0bc55e..26c9c829cc2b 100644 --- a/includes/MergeHistory.php +++ b/includes/MergeHistory.php @@ -25,8 +25,6 @@ use MediaWiki\Content\IContentHandlerFactory; use MediaWiki\EditPage\SpamChecker; use MediaWiki\HookContainer\HookContainer; use MediaWiki\HookContainer\HookRunner; -use MediaWiki\MainConfigNames; -use MediaWiki\MediaWikiServices; use MediaWiki\Page\PageIdentity; use MediaWiki\Page\WikiPageFactory; use MediaWiki\Permissions\Authority; @@ -304,9 +302,6 @@ class MergeHistory { * @return Status status of the history merge */ public function merge( Authority $performer, $reason = '' ) { - $actorTableSchemaMigrationStage = MediaWikiServices::getInstance() - ->getMainConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ); - $status = new Status(); // Check validity and permissions required for merge @@ -335,20 +330,6 @@ class MergeHistory { return $status->fatal( 'mergehistory-fail-no-change' ); } - // Update denormalized revactor_page too - if ( $actorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_TEMP ) { - $this->dbw->update( - 'revision_actor_temp', - [ 'revactor_page' => $this->dest->getId() ], - [ - 'revactor_page' => $this->source->getId(), - // Slightly hacky, but should work given the values assigned in this class - str_replace( 'rev_timestamp', 'revactor_timestamp', $this->getTimeWhere() ?? '' ) - ], - __METHOD__ - ); - } - $haveRevisions = $this->dbw->lockForUpdate( 'revision', [ 'rev_page' => $this->source->getId() ], diff --git a/includes/Rest/Handler/PageHistoryCountHandler.php b/includes/Rest/Handler/PageHistoryCountHandler.php index d93aa0b24a9b..7a67a6dcd501 100644 --- a/includes/Rest/Handler/PageHistoryCountHandler.php +++ b/includes/Rest/Handler/PageHistoryCountHandler.php @@ -440,17 +440,9 @@ class PageHistoryCountHandler extends SimpleHandler { "OR rev_timestamp > {$oldTs}"; } - // This redundant join condition tells MySQL that rev_page and revactor_page are the - // same, so it can propagate the condition - if ( isset( $revQuery['tables']['temp_rev_user'] ) /* SCHEMA_COMPAT_READ_TEMP */ ) { - $revQuery['joins']['temp_rev_user'][1] = - "temp_rev_user.revactor_rev = rev_id AND revactor_page = rev_page"; - } - $edits = $dbr->selectRowCount( [ 'revision', - // @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset False positive ] + $revQuery['tables'], '1', $cond, diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 9fc68a0ea75e..d832a1c4f592 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -201,7 +201,7 @@ return [ 'ActorMigration' => static function ( MediaWikiServices $services ): ActorMigration { return new ActorMigration( - $services->getMainConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ), + SCHEMA_COMPAT_NEW, $services->getActorStoreFactory() ); }, diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php index 7e4011cc8f47..c3364d9e69be 100644 --- a/includes/actions/InfoAction.php +++ b/includes/actions/InfoAction.php @@ -94,9 +94,6 @@ class InfoAction extends FormlessAction { /** @var LinksMigration */ private $linksMigration; - /** @var int */ - private $actorTableSchemaMigrationStage; - /** * @param Page $page * @param IContextSource $context @@ -156,7 +153,6 @@ class InfoAction extends FormlessAction { $this->redirectLookup = $redirectLookup; $this->restrictionStore = $restrictionStore; $this->linksMigration = $linksMigration; - $this->actorTableSchemaMigrationStage = $config->get( MainConfigNames::ActorTableSchemaMigrationStage ); } /** @@ -946,17 +942,10 @@ class InfoAction extends FormlessAction { ); $setOpts += Database::getCacheSetOptions( $dbr, $dbrWatchlist ); - if ( $this->actorTableSchemaMigrationStage & SCHEMA_COMPAT_READ_NEW ) { - $tables = [ 'revision' ]; - $field = 'rev_actor'; - $pageField = 'rev_page'; - $tsField = 'rev_timestamp'; - } else /* SCHEMA_COMPAT_READ_TEMP */ { - $tables = [ 'revision_actor_temp' ]; - $field = 'revactor_actor'; - $pageField = 'revactor_page'; - $tsField = 'revactor_timestamp'; - } + $tables = [ 'revision' ]; + $field = 'rev_actor'; + $pageField = 'rev_page'; + $tsField = 'rev_timestamp'; $joins = []; $watchedItemStore = $this->watchedItemStore; diff --git a/includes/api/ApiQueryAllRevisions.php b/includes/api/ApiQueryAllRevisions.php index 1aee5e5f7a3e..d1e85d98f109 100644 --- a/includes/api/ApiQueryAllRevisions.php +++ b/includes/api/ApiQueryAllRevisions.php @@ -101,16 +101,6 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase { $tsField = 'rev_timestamp'; $idField = 'rev_id'; $pageField = 'rev_page'; - if ( $params['user'] !== null && - ( $this->getConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ) & - SCHEMA_COMPAT_READ_TEMP ) - ) { - // The query is probably best done using the actor_timestamp index on - // revision_actor_temp. Use the denormalized fields from that table. - $tsField = 'revactor_timestamp'; - $idField = 'revactor_rev'; - $pageField = 'revactor_page'; - } // Namespace check is likely to be desired, but can't be done // efficiently in SQL. @@ -159,24 +149,6 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase { } } - // If we're going to be using actor_timestamp, we need to swap the order of `revision` - // and `revision_actor_temp` in the query (for the straight join) and adjust some field aliases. - if ( $idField !== 'rev_id' && isset( $revQuery['tables']['temp_rev_user'] ) ) { - $aliasFields = [ 'rev_id' => $idField, 'rev_timestamp' => $tsField, 'rev_page' => $pageField ]; - $revQuery['fields'] = array_merge( - $aliasFields, - array_diff( $revQuery['fields'], array_keys( $aliasFields ) ) - ); - unset( $revQuery['tables']['temp_rev_user'] ); - $revQuery['tables'] = array_merge( - [ 'temp_rev_user' => 'revision_actor_temp' ], - $revQuery['tables'] - ); - $revQuery['joins']['revision'] = $revQuery['joins']['temp_rev_user']; - unset( $revQuery['joins']['temp_rev_user'] ); - } - - // @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset False positive $this->addTables( $revQuery['tables'] ); $this->addFields( $revQuery['fields'] ); $this->addJoinConds( $revQuery['joins'] ); diff --git a/includes/api/ApiQueryContributors.php b/includes/api/ApiQueryContributors.php index 8c35cf2cf1fd..110165861b23 100644 --- a/includes/api/ApiQueryContributors.php +++ b/includes/api/ApiQueryContributors.php @@ -23,7 +23,6 @@ * @since 1.23 */ -use MediaWiki\MainConfigNames; use MediaWiki\Permissions\GroupPermissionsLookup; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\RevisionStore; @@ -111,19 +110,9 @@ class ApiQueryContributors extends ApiQueryBase { $result = $this->getResult(); $revQuery = $this->revisionStore->getQueryInfo(); - - // For SCHEMA_COMPAT_READ_TEMP, target indexes on the - // revision_actor_temp table, otherwise on the revision table. - if ( $this->getConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ) & - SCHEMA_COMPAT_READ_TEMP ) { - $pageField = 'revactor_page'; - $idField = 'revactor_actor'; - $countField = 'revactor_actor'; - } else { - $pageField = 'rev_page'; - $idField = 'rev_actor'; - $countField = 'rev_actor'; - } + $pageField = 'rev_page'; + $idField = 'rev_actor'; + $countField = 'rev_actor'; // First, count anons $this->addTables( $revQuery['tables'] ); diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php index 67e80dab6b26..6fa90d0cd1f9 100644 --- a/includes/api/ApiQueryRevisions.php +++ b/includes/api/ApiQueryRevisions.php @@ -23,7 +23,6 @@ use MediaWiki\Content\IContentHandlerFactory; use MediaWiki\Content\Renderer\ContentRenderer; use MediaWiki\Content\Transform\ContentTransformer; -use MediaWiki\MainConfigNames; use MediaWiki\ParamValidator\TypeDef\UserDef; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\RevisionStore; @@ -148,18 +147,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase { 'revision' => 'rev_timestamp', ]; $useIndex = []; - - if ( $params['user'] !== null && - ( $this->getConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ) - & SCHEMA_COMPAT_READ_TEMP ) - ) { - // We're going to want to use the page_actor_timestamp index (on revision_actor_temp) - // so use that table's denormalized fields. - $idField = 'revactor_rev'; - $tsField = 'revactor_timestamp'; - $pageField = 'revactor_page'; - } - if ( $resultPageSet === null ) { $this->parseParameters( $params ); $opts = [ 'page' ]; @@ -167,15 +154,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase { $opts[] = 'user'; } $revQuery = $this->revisionStore->getQueryInfo( $opts ); - - if ( $idField !== 'rev_id' ) { - $aliasFields = [ 'rev_id' => $idField, 'rev_timestamp' => $tsField, 'rev_page' => $pageField ]; - $revQuery['fields'] = array_merge( - $aliasFields, - array_diff( $revQuery['fields'], array_keys( $aliasFields ) ) - ); - } - $this->addTables( $revQuery['tables'] ); $this->addFields( $revQuery['fields'] ); $this->addJoinConds( $revQuery['joins'] ); diff --git a/includes/api/ApiQueryUserContribs.php b/includes/api/ApiQueryUserContribs.php index 4c3fe6ca26d3..07b0df5dbef1 100644 --- a/includes/api/ApiQueryUserContribs.php +++ b/includes/api/ApiQueryUserContribs.php @@ -316,36 +316,10 @@ class ApiQueryUserContribs extends ApiQueryBase { $revQuery = $this->revisionStore->getQueryInfo( [ 'page' ] ); $revWhere = $this->actorMigration->getWhere( $db, 'rev_user', $users ); - if ( $this->getConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ) & - SCHEMA_COMPAT_READ_TEMP ) { - $orderUserField = 'rev_actor'; - $userField = $this->orderBy === 'actor' ? 'revactor_actor' : 'actor_name'; - $tsField = 'revactor_timestamp'; - $idField = 'revactor_rev'; - - // T221511: MySQL/MariaDB (10.1.37) can sometimes irrationally decide that querying `actor` - // before `revision_actor_temp` and filesorting is somehow better than querying $limit+1 rows - // from `revision_actor_temp`. Tell it not to reorder the query (and also reorder it ourselves - // because as generated by RevisionStore it'll have `revision` first rather than - // `revision_actor_temp`). But not when uctag is used, as it seems as likely to be harmed as - // helped in that case, and not when there's only one User because in that case it fetches - // the one `actor` row as a constant and doesn't filesort. - if ( count( $users ) > 1 && !isset( $this->params['tag'] ) ) { - $revQuery['joins']['revision'] = $revQuery['joins']['temp_rev_user']; - unset( $revQuery['joins']['temp_rev_user'] ); - $this->addOption( 'STRAIGHT_JOIN' ); - // It isn't actually necessary to reorder $revQuery['tables'] as Database does the right thing - // when join conditions are given for all joins, but Gergő is wary of relying on that so pull - // `revision_actor_temp` to the start. - $revQuery['tables'] = - [ 'temp_rev_user' => $revQuery['tables']['temp_rev_user'] ] + $revQuery['tables']; - } - } else /* SCHEMA_COMPAT_READ_NEW */ { - $orderUserField = 'rev_actor'; - $userField = $this->orderBy === 'actor' ? 'rev_actor' : 'actor_name'; - $tsField = 'rev_timestamp'; - $idField = 'rev_id'; - } + $orderUserField = 'rev_actor'; + $userField = $this->orderBy === 'actor' ? 'rev_actor' : 'actor_name'; + $tsField = 'rev_timestamp'; + $idField = 'rev_id'; $this->addTables( $revQuery['tables'] ); $this->addJoinConds( $revQuery['joins'] ); diff --git a/includes/config-schema.php b/includes/config-schema.php index ff1e241555df..e1294b85d633 100644 --- a/includes/config-schema.php +++ b/includes/config-schema.php @@ -380,7 +380,6 @@ return [ 'DatabaseReplicaLagWarning' => 10, 'DatabaseReplicaLagCritical' => 30, 'MaxExecutionTimeForExpensiveQueries' => 0, - 'ActorTableSchemaMigrationStage' => 48, 'TemplateLinksSchemaMigrationStage' => 3, 'ContentHandlers' => [ 'wikitext' => 'WikitextContentHandler', @@ -2533,7 +2532,6 @@ return [ ], 'LBFactoryConf' => 'object', 'LocalDatabases' => 'array', - 'ActorTableSchemaMigrationStage' => 'integer', 'TemplateLinksSchemaMigrationStage' => 'integer', 'ContentHandlers' => 'object', 'NamespaceContentModels' => 'object', diff --git a/includes/config-vars.php b/includes/config-vars.php index 1fb7a6c13804..fe6189369649 100644 --- a/includes/config-vars.php +++ b/includes/config-vars.php @@ -1216,12 +1216,6 @@ $wgDatabaseReplicaLagCritical = null; $wgMaxExecutionTimeForExpensiveQueries = null; /** - * Config variable stub for the ActorTableSchemaMigrationStage setting, for use by phpdoc and IDEs. - * @see MediaWiki\MainConfigSchema::ActorTableSchemaMigrationStage - */ -$wgActorTableSchemaMigrationStage = null; - -/** * Config variable stub for the TemplateLinksSchemaMigrationStage setting, for use by phpdoc and IDEs. * @see MediaWiki\MainConfigSchema::TemplateLinksSchemaMigrationStage */ diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php index 09ab53bc7134..cec668fea525 100644 --- a/includes/installer/MysqlUpdater.php +++ b/includes/installer/MysqlUpdater.php @@ -32,6 +32,9 @@ use Wikimedia\Rdbms\MySQLField; class MysqlUpdater extends DatabaseUpdater { protected function getCoreUpdateList() { return [ + // 1.35 but it must come first + [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], + // 1.31 [ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ], [ 'migrateComments' ], @@ -43,7 +46,6 @@ class MysqlUpdater extends DatabaseUpdater { [ 'addTable', 'content_models', 'patch-content_models.sql' ], [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], - [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], [ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ], [ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ], [ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ], @@ -120,7 +122,6 @@ class MysqlUpdater extends DatabaseUpdater { [ 'modifyField', 'page', 'page_restrictions', 'patch-page_restrictions-null.sql' ], [ 'renameIndex', 'ipblocks', 'ipb_address', 'ipb_address_unique', false, 'patch-ipblocks-rename-ipb_address.sql' ], - [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], [ 'dropField', 'archive', 'ar_text_id', 'patch-archive-MCR.sql' ], [ 'doLanguageLinksLengthSync' ], [ 'doFixIpbAddressUniqueIndex' ], @@ -145,7 +146,6 @@ class MysqlUpdater extends DatabaseUpdater { [ 'modifyField', 'protected_titles', 'pt_title', 'patch-protected_titles-pt_title-varbinary.sql' ], [ 'dropDefault', 'protected_titles', 'pt_expiry' ], [ 'dropDefault', 'ip_changes', 'ipc_rev_timestamp' ], - [ 'dropDefault', 'revision_actor_temp', 'revactor_timestamp' ], [ 'modifyField', 'ipblocks_restrictions', 'ir_type', 'patch-ipblocks_restrictions-ir_type.sql' ], [ 'renameIndex', 'watchlist', 'namespace_title', 'wl_namespace_title', false, 'patch-watchlist-namespace_title-rename-index.sql' ], @@ -216,6 +216,8 @@ class MysqlUpdater extends DatabaseUpdater { [ 'modifyField', 'ipblocks_restrictions', 'ir_ipb_id', 'patch-ipblocks_restrictions-ir_ipb_id.sql' ], [ 'modifyField', 'ipblocks', 'ipb_id', 'patch-ipblocks-ipb_id.sql' ], [ 'modifyField', 'user', 'user_editcount', 'patch-user-user_editcount.sql' ], + [ 'runMaintenance', MigrateRevisionActorTemp::class, 'maintenance/migrateRevisionActorTemp.php' ], + [ 'dropTable', 'revision_actor_temp' ], ]; } diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php index 4211fd786ad8..cb81ee02bc62 100644 --- a/includes/installer/PostgresUpdater.php +++ b/includes/installer/PostgresUpdater.php @@ -41,6 +41,11 @@ class PostgresUpdater extends DatabaseUpdater { */ protected function getCoreUpdateList() { return [ + // 1.35 but must come first + [ 'addPgField', 'revision', 'rev_actor', 'INTEGER NOT NULL DEFAULT 0' ], + [ 'addPgIndex', 'revision', 'rev_actor_timestamp', '(rev_actor,rev_timestamp,rev_id)' ], + [ 'addPgIndex', 'revision', 'rev_page_actor_timestamp', '(rev_page,rev_actor,rev_timestamp)' ], + // Exception to the sequential updates. Renaming pagecontent and mwuser. // Introduced in 1.36. [ 'renameTable', 'pagecontent', 'text' ], @@ -66,7 +71,6 @@ class PostgresUpdater extends DatabaseUpdater { [ 'addTable', 'slot_roles', 'patch-slot_roles-table.sql' ], [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], - [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], [ 'setDefault', 'revision', 'rev_user', 0 ], [ 'setDefault', 'revision', 'rev_user_text', '' ], [ 'setDefault', 'archive', 'ar_user', 0 ], @@ -219,9 +223,6 @@ class PostgresUpdater extends DatabaseUpdater { [ 'setDefault', 'user_newtalk', 'user_ip', '' ], [ 'changeNullableField', 'user_newtalk', 'user_ip', 'NOT NULL', true ], [ 'setDefault', 'user_newtalk', 'user_id', 0 ], - [ 'renameIndex', 'revision_actor_temp', 'rev_actor_timestamp', 'revactor_actor_timestamp' ], - [ 'renameIndex', 'revision_actor_temp', - 'rev_page_actor_timestamp', 'revactor_page_actor_timestamp' ], [ 'dropPgIndex', 'revision', 'rev_user_idx' ], [ 'dropPgIndex', 'revision', 'rev_user_text_idx' ], [ 'dropPgIndex', 'revision', 'rev_text_id_idx' ], @@ -232,9 +233,6 @@ class PostgresUpdater extends DatabaseUpdater { [ 'dropPgField', 'revision', 'rev_content_model' ], [ 'dropPgField', 'revision', 'rev_content_format' ], [ 'addPgField', 'revision', 'rev_comment_id', 'INTEGER NOT NULL DEFAULT 0' ], - [ 'addPgField', 'revision', 'rev_actor', 'INTEGER NOT NULL DEFAULT 0' ], - [ 'addPgIndex', 'revision', 'rev_actor_timestamp', '(rev_actor,rev_timestamp,rev_id)' ], - [ 'addPgIndex', 'revision', 'rev_page_actor_timestamp', '(rev_page,rev_actor,rev_timestamp)' ], [ 'dropPgField', 'archive', 'ar_text_id' ], [ 'dropPgField', 'archive', 'ar_content_model' ], [ 'dropPgField', 'archive', 'ar_content_format' ], @@ -380,9 +378,6 @@ class PostgresUpdater extends DatabaseUpdater { [ 'changeField', 'ip_changes', 'ipc_hex', 'TEXT', "ipc_hex::TEXT DEFAULT ''" ], [ 'setDefault', 'ip_changes', 'ipc_rev_id', 0 ], [ 'changeField', 'revision_comment_temp', 'revcomment_comment_id', 'BIGINT', '' ], - [ 'dropFkey', 'revision_actor_temp', 'revactor_page' ], - [ 'changeField', 'revision_actor_temp', 'revactor_actor', 'BIGINT', '' ], - [ 'changeNullableField', 'revision_actor_temp', 'revactor_page', 'NOT NULL', true ], [ 'renameIndex', 'watchlist', 'namespace_title', 'wl_namespace_title' ], [ 'dropFkey', 'page_props', 'pp_page' ], // page_props primary key change moved from the Schema SQL file to here in 1.36 @@ -601,6 +596,8 @@ class PostgresUpdater extends DatabaseUpdater { // 1.39 [ 'addTable', 'user_autocreate_serial', 'patch-user_autocreate_serial.sql' ], + [ 'runMaintenance', MigrateRevisionActorTemp::class, 'maintenance/migrateRevisionActorTemp.php' ], + [ 'dropTable', 'revision_actor_temp' ], ]; } diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php index d27126cbcb8a..d4533f03773c 100644 --- a/includes/installer/SqliteUpdater.php +++ b/includes/installer/SqliteUpdater.php @@ -32,6 +32,9 @@ class SqliteUpdater extends DatabaseUpdater { protected function getCoreUpdateList() { return [ + // 1.35 but must come first + [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], + // 1.31 [ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ], [ 'migrateComments' ], @@ -44,7 +47,6 @@ class SqliteUpdater extends DatabaseUpdater { [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], [ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ], - [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], [ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ], [ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ], [ 'addField', 'oldimage', 'oi_actor', 'patch-oldimage-oi_actor.sql' ], @@ -114,7 +116,6 @@ class SqliteUpdater extends DatabaseUpdater { [ 'modifyField', 'page', 'page_restrictions', 'patch-page_restrictions-null.sql' ], [ 'renameIndex', 'ipblocks', 'ipb_address', 'ipb_address_unique', false, 'patch-ipblocks-rename-ipb_address.sql' ], - [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], [ 'dropField', 'archive', 'ar_text_id', 'patch-archive-MCR.sql' ], [ 'doFixIpbAddressUniqueIndex' ], [ 'modifyField', 'actor', 'actor_name', 'patch-actor-actor_name-varbinary.sql' ], @@ -134,7 +135,6 @@ class SqliteUpdater extends DatabaseUpdater { [ 'modifyField', 'protected_titles', 'pt_title', 'patch-protected_titles-pt_title-varbinary.sql' ], [ 'modifyField', 'protected_titles', 'pt_expiry', 'patch-protected_titles-pt_expiry-drop-default.sql' ], [ 'modifyField', 'ip_changes', 'ipc_rev_timestamp', 'patch-ip_changes-pc_rev_timestamp-drop-default.sql' ], - [ 'modifyField', 'revision_actor_temp', 'revactor_timestamp', 'patch-revactor_timestamp-drop-default.sql' ], [ 'renameIndex', 'watchlist', 'namespace_title', 'wl_namespace_title', false, 'patch-watchlist-namespace_title-rename-index.sql' ], [ 'modifyField', 'job', 'job_title', 'patch-job-job_title-varbinary.sql' ], @@ -188,6 +188,8 @@ class SqliteUpdater extends DatabaseUpdater { [ 'modifyField', 'ipblocks_restrictions', 'ir_ipb_id', 'patch-ipblocks_restrictions-ir_ipb_id.sql' ], [ 'modifyField', 'ipblocks', 'ipb_id', 'patch-ipblocks-ipb_id.sql' ], [ 'modifyField', 'user', 'user_editcount', 'patch-user-user_editcount.sql' ], + [ 'runMaintenance', MigrateRevisionActorTemp::class, 'maintenance/migrateRevisionActorTemp.php' ], + [ 'dropTable', 'revision_actor_temp' ], ]; } diff --git a/includes/page/DeletePage.php b/includes/page/DeletePage.php index d83fdbbc4eec..11fe442611e9 100644 --- a/includes/page/DeletePage.php +++ b/includes/page/DeletePage.php @@ -55,7 +55,6 @@ class DeletePage { */ public const CONSTRUCTOR_OPTIONS = [ MainConfigNames::DeleteRevisionsBatchSize, - MainConfigNames::ActorTableSchemaMigrationStage, MainConfigNames::DeleteRevisionsLimit, ]; @@ -756,7 +755,7 @@ class DeletePage { $dbw->lockForUpdate( array_intersect( $revQuery['tables'], - [ 'revision', 'revision_comment_temp', 'revision_actor_temp' ] + [ 'revision', 'revision_comment_temp' ] ), [ 'rev_page' => $id ], __METHOD__, @@ -821,11 +820,6 @@ class DeletePage { $dbw->delete( 'revision', [ 'rev_id' => $revids ], __METHOD__ ); $dbw->delete( 'revision_comment_temp', [ 'revcomment_rev' => $revids ], __METHOD__ ); - if ( $this->options->get( MainConfigNames::ActorTableSchemaMigrationStage ) - & SCHEMA_COMPAT_WRITE_TEMP ) { - $dbw->delete( 'revision_actor_temp', [ 'revactor_rev' => $revids ], __METHOD__ ); - } - // Also delete records from ip_changes as applicable. if ( count( $ipRevIds ) > 0 ) { $dbw->delete( 'ip_changes', [ 'ipc_rev_id' => $ipRevIds ], __METHOD__ ); diff --git a/includes/revisiondelete/RevisionDeleteUser.php b/includes/revisiondelete/RevisionDeleteUser.php index 08528ef76d9c..9b1cba663643 100644 --- a/includes/revisiondelete/RevisionDeleteUser.php +++ b/includes/revisiondelete/RevisionDeleteUser.php @@ -21,8 +21,6 @@ * @ingroup RevisionDelete */ -use MediaWiki\MainConfigNames; -use MediaWiki\MediaWikiServices; use MediaWiki\Revision\RevisionRecord; use Wikimedia\Rdbms\IDatabase; @@ -46,9 +44,6 @@ class RevisionDeleteUser { * @return bool True on success, false on failure (e.g. invalid user ID) */ private static function setUsernameBitfields( $name, $userId, $op, IDatabase $dbw = null ) { - $actorTableSchemaMigrationStage = MediaWikiServices::getInstance() - ->getMainConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ); - if ( !$userId || ( $op !== '|' && $op !== '&' ) ) { return false; } @@ -75,30 +70,12 @@ class RevisionDeleteUser { $actorId = $dbw->selectField( 'actor', 'actor_id', [ 'actor_name' => $name ], __METHOD__ ); if ( $actorId ) { # Hide name from live edits - # This query depends on the actor migration read stage, not the - # write stage, because the stage determines how we find the rows to - # delete. The write stage determines whether or not to write to - # rev_actor and revision_actor_temp which is not relevant here. - if ( $actorTableSchemaMigrationStage & SCHEMA_COMPAT_READ_TEMP ) { - $ids = $dbw->selectFieldValues( - 'revision_actor_temp', 'revactor_rev', [ 'revactor_actor' => $actorId ], __METHOD__ - ); - if ( $ids ) { - $dbw->update( - 'revision', - [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], - [ 'rev_id' => $ids ], - __METHOD__ - ); - } - } else /* SCHEMA_COMPAT_READ_NEW */ { - $dbw->update( - 'revision', - [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], - [ 'rev_actor' => $actorId ], - __METHOD__ - ); - } + $dbw->update( + 'revision', + [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], + [ 'rev_actor' => $actorId ], + __METHOD__ + ); # Hide name from deleted edits $dbw->update( diff --git a/includes/specials/pagers/ContribsPager.php b/includes/specials/pagers/ContribsPager.php index dd421ebc87c1..6cee42c3877b 100644 --- a/includes/specials/pagers/ContribsPager.php +++ b/includes/specials/pagers/ContribsPager.php @@ -355,11 +355,6 @@ class ContribsPager extends RangeChronologicalPager { ? null : $this->getIpRangeConds( $dbr, $this->target ); if ( $ipRangeConds ) { return 'ip_changes'; - } else { - $conds = $this->actorMigration->getWhere( $dbr, 'rev_user', $this->targetUser ); - if ( isset( $conds['orconds']['actor'] ) ) { - return 'revision_actor_temp'; - } } return 'revision'; @@ -523,8 +518,6 @@ class ContribsPager extends RangeChronologicalPager { return 'rev_timestamp'; case 'ip_changes': return 'ipc_rev_timestamp'; - case 'revision_actor_temp': - return 'revactor_timestamp'; default: wfWarn( __METHOD__ . ": Unknown value '$target' from " . static::class . '::getTargetTable()', 0 @@ -575,8 +568,6 @@ class ContribsPager extends RangeChronologicalPager { return [ 'rev_id' ]; case 'ip_changes': return [ 'ipc_rev_id' ]; - case 'revision_actor_temp': - return [ 'revactor_rev' ]; default: wfWarn( __METHOD__ . ": Unknown value '$target' from " . static::class . '::getTargetTable()', 0 diff --git a/includes/user/UserEditTracker.php b/includes/user/UserEditTracker.php index ba02e9ddab8d..be5a3e80bab5 100644 --- a/includes/user/UserEditTracker.php +++ b/includes/user/UserEditTracker.php @@ -172,16 +172,13 @@ class UserEditTracker { $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA ); $actorWhere = $this->actorMigration->getWhere( $dbr, 'rev_user', $user ); - $tsField = isset( $actorWhere['tables']['temp_rev_user'] ) // SCHEMA_COMPAT_READ_TEMP - ? 'revactor_timestamp' : 'rev_timestamp'; - $sortOrder = ( $type === self::FIRST_EDIT ) ? 'ASC' : 'DESC'; $time = $dbr->selectField( [ 'revision' ] + $actorWhere['tables'], - $tsField, + 'rev_timestamp', [ $actorWhere['conds'] ], __METHOD__, - [ 'ORDER BY' => "$tsField $sortOrder" ], + [ 'ORDER BY' => "rev_timestamp $sortOrder" ], $actorWhere['joins'] ); diff --git a/maintenance/cleanupRevActorPage.php b/maintenance/cleanupRevActorPage.php deleted file mode 100644 index 69b3023f02a9..000000000000 --- a/maintenance/cleanupRevActorPage.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php - -require_once __DIR__ . '/Maintenance.php'; - -use MediaWiki\MediaWikiServices; - -/** - * Maintenance script that cleans up cases where rev_page and revactor_page - * became desynced, e.g. from T232464. - * - * @ingroup Maintenance - * @since 1.34 - */ -class CleanupRevActorPage extends LoggedUpdateMaintenance { - - public function __construct() { - parent::__construct(); - $this->addDescription( - 'Resyncs revactor_page with rev_page when they differ, e.g. from T232464.' - ); - $this->setBatchSize( 1000 ); - } - - protected function getUpdateKey() { - return __CLASS__; - } - - protected function doDBUpdates() { - $dbw = $this->getDB( DB_PRIMARY ); - $max = $dbw->selectField( 'revision', 'MAX(rev_id)', '', __METHOD__ ); - $batchSize = $this->mBatchSize; - - $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); - - $this->output( "Resyncing revactor_page with rev_page...\n" ); - - $count = 0; - for ( $start = 1; $start <= $max; $start += $batchSize ) { - $end = $start + $batchSize - 1; - $this->output( "... rev_id $start - $end, $count changed\n" ); - - // Fetch the rows needing update - $res = $dbw->select( - [ 'revision', 'revision_actor_temp' ], - [ 'rev_id', 'rev_page' ], - [ - 'rev_page != revactor_page', - "rev_id >= $start", - "rev_id <= $end", - ], - __METHOD__, - [], - [ 'revision_actor_temp' => [ 'JOIN', 'rev_id = revactor_rev' ] ] - ); - - if ( !$res->numRows() ) { - continue; - } - - // Update the existing rows - foreach ( $res as $row ) { - $dbw->update( - 'revision_actor_temp', - [ 'revactor_page' => $row->rev_page ], - [ 'revactor_rev' => $row->rev_id ], - __METHOD__ - ); - $count += $dbw->affectedRows(); - } - - $lbFactory->waitForReplication(); - } - - $this->output( "Completed resync, $count row(s) updated\n" ); - - return true; - } -} - -$maintClass = CleanupRevActorPage::class; -require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/findMissingActors.php b/maintenance/findMissingActors.php index 2ec0068db3ca..e53d48400799 100644 --- a/maintenance/findMissingActors.php +++ b/maintenance/findMissingActors.php @@ -107,8 +107,6 @@ class FindMissingActors extends Maintenance { * @return array */ private function getTables() { - global $wgActorTableSchemaMigrationStage; - if ( !$this->tables ) { $tables = [ 'ar_actor' => [ 'archive', 'ar_actor', 'ar_id' ], @@ -118,14 +116,8 @@ class FindMissingActors extends Maintenance { 'fa_actor' => [ 'filearchive', 'fa_actor', 'fa_id' ], 'rc_actor' => [ 'recentchanges', 'rc_actor', 'rc_id' ], 'log_actor' => [ 'logging', 'log_actor', 'log_id' ], + 'rev_actor' => [ 'revision', 'rev_actor', 'rev_id' ], ]; - - if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_TEMP ) { - $tables['revactor_actor'] = [ 'revision_actor_temp', 'revactor_actor', 'revactor_rev' ]; - } - if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) { - $tables['rev_actor'] = [ 'revision', 'rev_actor', 'rev_id' ]; - } $this->tables = $tables; } return $this->tables; diff --git a/maintenance/postgres/tables-generated.sql b/maintenance/postgres/tables-generated.sql index 9fb0ad1a9468..55c5f5472aad 100644 --- a/maintenance/postgres/tables-generated.sql +++ b/maintenance/postgres/tables-generated.sql @@ -484,25 +484,6 @@ CREATE TABLE revision_comment_temp ( CREATE UNIQUE INDEX revcomment_rev ON revision_comment_temp (revcomment_rev); -CREATE TABLE revision_actor_temp ( - revactor_rev INT NOT NULL, - revactor_actor BIGINT NOT NULL, - revactor_timestamp TIMESTAMPTZ NOT NULL, - revactor_page INT NOT NULL, - PRIMARY KEY(revactor_rev, revactor_actor) -); - -CREATE UNIQUE INDEX revactor_rev ON revision_actor_temp (revactor_rev); - -CREATE INDEX actor_timestamp ON revision_actor_temp ( - revactor_actor, revactor_timestamp -); - -CREATE INDEX page_actor_timestamp ON revision_actor_temp ( - revactor_page, revactor_actor, revactor_timestamp -); - - CREATE TABLE page_props ( pp_page INT NOT NULL, pp_propname TEXT NOT NULL, diff --git a/maintenance/reassignEdits.php b/maintenance/reassignEdits.php index 93ddf88cf128..3921ada1d599 100644 --- a/maintenance/reassignEdits.php +++ b/maintenance/reassignEdits.php @@ -23,7 +23,6 @@ * @license GPL-2.0-or-later */ -use MediaWiki\MainConfigNames; use MediaWiki\MediaWikiServices; require_once __DIR__ . '/Maintenance.php'; @@ -77,7 +76,6 @@ class ReassignEdits extends Maintenance { * @return int Number of entries changed, or that would be changed */ private function doReassignEdits( &$from, &$to, $updateRC = false, $report = false ) { - $actorTableSchemaMigrationStage = $this->getConfig()->get( MainConfigNames::ActorTableSchemaMigrationStage ); $dbw = $this->getDB( DB_PRIMARY ); $this->beginTransaction( $dbw, __METHOD__ ); $actorNormalization = MediaWikiServices::getInstance()->getActorNormalization(); @@ -128,22 +126,12 @@ class ReassignEdits extends Maintenance { if ( $revisionRows ) { # Reassign edits $this->output( "Reassigning current edits..." ); - if ( $actorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_TEMP ) { - $dbw->update( - 'revision_actor_temp', - [ 'revactor_actor' => $toActorId ], - [ 'revactor_actor' => $fromActorId ], - __METHOD__ - ); - } - if ( $actorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) { - $dbw->update( - 'revision', - [ 'rev_actor' => $toActorId ], - [ 'rev_actor' => $fromActorId ], - __METHOD__ - ); - } + $dbw->update( + 'revision', + [ 'rev_actor' => $toActorId ], + [ 'rev_actor' => $fromActorId ], + __METHOD__ + ); $this->output( "done.\n" ); } diff --git a/maintenance/sqlite/tables-generated.sql b/maintenance/sqlite/tables-generated.sql index 38dd9b9cc227..2c1159909348 100644 --- a/maintenance/sqlite/tables-generated.sql +++ b/maintenance/sqlite/tables-generated.sql @@ -465,25 +465,6 @@ CREATE TABLE /*_*/revision_comment_temp ( CREATE UNIQUE INDEX revcomment_rev ON /*_*/revision_comment_temp (revcomment_rev); -CREATE TABLE /*_*/revision_actor_temp ( - revactor_rev INTEGER UNSIGNED NOT NULL, - revactor_actor BIGINT UNSIGNED NOT NULL, - revactor_timestamp BLOB NOT NULL, - revactor_page INTEGER UNSIGNED NOT NULL, - PRIMARY KEY(revactor_rev, revactor_actor) -); - -CREATE UNIQUE INDEX revactor_rev ON /*_*/revision_actor_temp (revactor_rev); - -CREATE INDEX actor_timestamp ON /*_*/revision_actor_temp ( - revactor_actor, revactor_timestamp -); - -CREATE INDEX page_actor_timestamp ON /*_*/revision_actor_temp ( - revactor_page, revactor_actor, revactor_timestamp -); - - CREATE TABLE /*_*/page_props ( pp_page INTEGER UNSIGNED NOT NULL, pp_propname BLOB NOT NULL, diff --git a/maintenance/tables-generated.sql b/maintenance/tables-generated.sql index bbc183f0e6ac..969f7191ceb9 100644 --- a/maintenance/tables-generated.sql +++ b/maintenance/tables-generated.sql @@ -432,22 +432,6 @@ CREATE TABLE /*_*/revision_comment_temp ( ) /*$wgDBTableOptions*/; -CREATE TABLE /*_*/revision_actor_temp ( - revactor_rev INT UNSIGNED NOT NULL, - revactor_actor BIGINT UNSIGNED NOT NULL, - revactor_timestamp BINARY(14) NOT NULL, - revactor_page INT UNSIGNED NOT NULL, - UNIQUE INDEX revactor_rev (revactor_rev), - INDEX actor_timestamp ( - revactor_actor, revactor_timestamp - ), - INDEX page_actor_timestamp ( - revactor_page, revactor_actor, revactor_timestamp - ), - PRIMARY KEY(revactor_rev, revactor_actor) -) /*$wgDBTableOptions*/; - - CREATE TABLE /*_*/page_props ( pp_page INT UNSIGNED NOT NULL, pp_propname VARBINARY(60) NOT NULL, diff --git a/maintenance/tables.json b/maintenance/tables.json index 790376445293..d05c15ad8d5b 100644 --- a/maintenance/tables.json +++ b/maintenance/tables.json @@ -1386,42 +1386,6 @@ "pk": [ "revcomment_rev", "revcomment_comment_id" ] }, { - "name": "revision_actor_temp", - "comment": "Temporary table to avoid blocking on an alter of revision. On large wikis like the English Wikipedia, altering the revision table is a months-long process. This table is being created to avoid such an alter, and will be merged back into revision in the future", - "columns": [ - { - "name": "revactor_rev", - "comment": "Key to rev_id", - "type": "integer", - "options": { "unsigned": true, "notnull": true } - }, - { - "name": "revactor_actor", - "comment": "Key to actor_id", - "type": "bigint", - "options": { "unsigned": true, "notnull": true } - }, - { - "name": "revactor_timestamp", - "comment": "Copy field from revision for indexes", - "type": "mwtimestamp", - "options": { "notnull": true } - }, - { - "name": "revactor_page", - "comment": "Copy field from revision for indexes", - "type": "integer", - "options": { "unsigned": true, "notnull": true } - } - ], - "indexes": [ - { "name": "revactor_rev", "columns": [ "revactor_rev" ], "unique": true }, - { "name": "actor_timestamp", "columns": [ "revactor_actor", "revactor_timestamp" ], "unique": false }, - { "name": "page_actor_timestamp", "columns": [ "revactor_page", "revactor_actor", "revactor_timestamp" ], "unique": false } - ], - "pk": [ "revactor_rev", "revactor_actor" ] - }, - { "name": "page_props", "comment": "Name/value pairs indexed by page_id", "columns": [ diff --git a/tests/phpunit/MediaWikiIntegrationTestCase.php b/tests/phpunit/MediaWikiIntegrationTestCase.php index b8f9395d7312..90be6d19e4fc 100644 --- a/tests/phpunit/MediaWikiIntegrationTestCase.php +++ b/tests/phpunit/MediaWikiIntegrationTestCase.php @@ -1887,7 +1887,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase { $extraTables = [ 'user' => [ 'user', 'user_groups', 'user_properties', 'actor' ], 'page' => [ 'page', 'revision', 'ip_changes', 'revision_comment_temp', 'comment', 'archive', - 'revision_actor_temp', 'slots', 'content', 'content_models', 'slot_roles', + 'slots', 'content', 'content_models', 'slot_roles', 'change_tag' ], 'logging' => [ 'logging', 'log_search', 'change_tag' ], ]; diff --git a/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php b/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php index 717befd8bca7..5ee1a6dbe137 100644 --- a/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php +++ b/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php @@ -136,48 +136,8 @@ class RevisionQueryInfoTest extends MediaWikiIntegrationTestCase { public function provideQueryInfo() { // TODO: more option variations - yield 'page and user option, actor-temp' => [ - [ - 'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_TEMP, - ], - [ 'page', 'user' ], - [ - 'tables' => [ - 'revision', - 'page', - 'user', - 'temp_rev_user' => 'revision_actor_temp', - 'temp_rev_comment' => 'revision_comment_temp', - 'actor_rev_user' => 'actor', - 'comment_rev_comment' => 'comment', - ], - 'fields' => array_merge( - $this->getRevisionQueryFields( false ), - $this->getPageQueryFields(), - $this->getUserQueryFields(), - $this->getActorQueryFields( 'rev', 'temp_rev_user.revactor_actor' ), - $this->getCommentQueryFields( 'rev' ) - ), - 'joins' => [ - 'page' => [ 'JOIN', [ 'page_id = rev_page' ] ], - 'user' => [ - 'LEFT JOIN', - [ 'actor_rev_user.actor_user != 0', 'user_id = actor_rev_user.actor_user' ], - ], - 'comment_rev_comment' => [ - 'JOIN', - 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id', - ], - 'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ], - 'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ], - 'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ], - ], - ] - ]; yield 'page and user option, actor-new' => [ - [ - 'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_NEW, - ], + [], [ 'page', 'user' ], [ 'tables' => [ @@ -210,39 +170,8 @@ class RevisionQueryInfoTest extends MediaWikiIntegrationTestCase { ], ] ]; - yield 'no options, actor-temp' => [ - [ - 'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_TEMP, - ], - [], - [ - 'tables' => [ - 'revision', - 'temp_rev_user' => 'revision_actor_temp', - 'temp_rev_comment' => 'revision_comment_temp', - 'actor_rev_user' => 'actor', - 'comment_rev_comment' => 'comment', - ], - 'fields' => array_merge( - $this->getRevisionQueryFields( false ), - $this->getActorQueryFields( 'rev', 'temp_rev_user.revactor_actor' ), - $this->getCommentQueryFields( 'rev' ) - ), - 'joins' => [ - 'comment_rev_comment' => [ - 'JOIN', - 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id', - ], - 'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ], - 'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ], - 'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ], - ] - ] - ]; yield 'no options, actor-new' => [ - [ - 'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_NEW, - ], + [], [], [ 'tables' => [ diff --git a/tests/phpunit/structure/DatabaseIntegrationTest.php b/tests/phpunit/structure/DatabaseIntegrationTest.php index f97ac4a7bdd7..0a74735e6c24 100644 --- a/tests/phpunit/structure/DatabaseIntegrationTest.php +++ b/tests/phpunit/structure/DatabaseIntegrationTest.php @@ -30,7 +30,6 @@ class DatabaseIntegrationTest extends MediaWikiIntegrationTestCase { // @todo Remove exception once these tables are fixed $excludeList = [ 'user_newtalk', - 'revision_actor_temp', 'objectcache', ]; diff --git a/tests/phpunit/unit/includes/page/DeletePageTest.php b/tests/phpunit/unit/includes/page/DeletePageTest.php index b80bba6c3032..f414ab899299 100644 --- a/tests/phpunit/unit/includes/page/DeletePageTest.php +++ b/tests/phpunit/unit/includes/page/DeletePageTest.php @@ -62,7 +62,6 @@ class DeletePageTest extends MediaWikiUnitTestCase { DeletePage::CONSTRUCTOR_OPTIONS, [ 'DeleteRevisionsBatchSize' => 100, - 'ActorTableSchemaMigrationStage' => SCHEMA_COMPAT_NEW, 'DeleteRevisionsLimit' => $deleteLimit ] ); diff --git a/tests/phpunit/unit/includes/page/PageCommandFactoryTest.php b/tests/phpunit/unit/includes/page/PageCommandFactoryTest.php index 1fc65c496a1d..17b39e934336 100644 --- a/tests/phpunit/unit/includes/page/PageCommandFactoryTest.php +++ b/tests/phpunit/unit/includes/page/PageCommandFactoryTest.php @@ -40,7 +40,6 @@ class PageCommandFactoryTest extends MediaWikiUnitTestCase { // DeletePage 'DeleteRevisionsBatchSize' => 10, - 'ActorTableSchemaMigrationStage' => SCHEMA_COMPAT_NEW, 'DeleteRevisionsLimit' => 10, ] ); |