aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmir Sarabadani <ladsgroup@gmail.com>2022-05-20 18:25:36 +0200
committerLadsgroup <Ladsgroup@gmail.com>2022-05-23 15:37:42 +0000
commit24115a8f4cc0f079f30894bc07eb7476f2dffb3e (patch)
treeca8a2bc2d105c09244f9ede64a28d1e031efe6cb
parent384074a32a21902d63a0f87376190cb7c1dd1b54 (diff)
downloadmediawikicore-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
-rw-r--r--RELEASE-NOTES-1.391
-rw-r--r--autoload.php1
-rw-r--r--docs/config-schema.yaml17
-rw-r--r--includes/MainConfigNames.php6
-rw-r--r--includes/MainConfigSchema.php23
-rw-r--r--includes/MergeHistory.php19
-rw-r--r--includes/Rest/Handler/PageHistoryCountHandler.php8
-rw-r--r--includes/ServiceWiring.php2
-rw-r--r--includes/actions/InfoAction.php19
-rw-r--r--includes/api/ApiQueryAllRevisions.php28
-rw-r--r--includes/api/ApiQueryContributors.php17
-rw-r--r--includes/api/ApiQueryRevisions.php22
-rw-r--r--includes/api/ApiQueryUserContribs.php34
-rw-r--r--includes/config-schema.php2
-rw-r--r--includes/config-vars.php6
-rw-r--r--includes/installer/MysqlUpdater.php8
-rw-r--r--includes/installer/PostgresUpdater.php17
-rw-r--r--includes/installer/SqliteUpdater.php8
-rw-r--r--includes/page/DeletePage.php8
-rw-r--r--includes/revisiondelete/RevisionDeleteUser.php35
-rw-r--r--includes/specials/pagers/ContribsPager.php9
-rw-r--r--includes/user/UserEditTracker.php7
-rw-r--r--maintenance/cleanupRevActorPage.php81
-rw-r--r--maintenance/findMissingActors.php10
-rw-r--r--maintenance/postgres/tables-generated.sql19
-rw-r--r--maintenance/reassignEdits.php24
-rw-r--r--maintenance/sqlite/tables-generated.sql19
-rw-r--r--maintenance/tables-generated.sql16
-rw-r--r--maintenance/tables.json36
-rw-r--r--tests/phpunit/MediaWikiIntegrationTestCase.php2
-rw-r--r--tests/phpunit/includes/Revision/RevisionQueryInfoTest.php75
-rw-r--r--tests/phpunit/structure/DatabaseIntegrationTest.php1
-rw-r--r--tests/phpunit/unit/includes/page/DeletePageTest.php1
-rw-r--r--tests/phpunit/unit/includes/page/PageCommandFactoryTest.php1
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,
] );