Remove Revision::getRevisionText from migrateArchiveText
authorPetr Pchelko <ppchelko@wikimedia.org>
Thu, 19 Sep 2019 17:53:19 +0000 (10:53 -0700)
committerPetr Pchelko <ppchelko@wikimedia.org>
Fri, 20 Sep 2019 19:23:45 +0000 (12:23 -0700)
The script is used to migrate archive text from pre-1.5 schema.
It's safe it just use the `ar_text` field directly instead of going
to Revision::getRevisionText since migrating this field is the whole
proing of the script. Per execution it checks that the field exists
in the schema, the SQL query reads the field.

We don't need to do `expandBlob` either, cause we already know that
the data is not in external store, thus Revision::decompressData
is enough.

Bug: T198343
Change-Id: Ic838bdf680d73522dd508dd86056eb945535b368

maintenance/migrateArchiveText.php

index 2271c39..7bbf3d0 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -57,6 +59,10 @@ class MigrateArchiveText extends LoggedUpdateMaintenance {
        protected function doDBUpdates() {
                $replaceMissing = $this->hasOption( 'replace-missing' );
                $defaultExternalStore = $this->getConfig()->get( 'DefaultExternalStore' );
+               // @phan-suppress-next-line PhanAccessMethodInternal
+               $blobStore = MediaWikiServices::getInstance()
+                       ->getBlobStoreFactory()
+                       ->newSqlBlobStore();
                $batchSize = $this->getBatchSize();
 
                $dbr = $this->getDB( DB_REPLICA, [ 'vslow' ] );
@@ -90,8 +96,9 @@ class MigrateArchiveText extends LoggedUpdateMaintenance {
 
                                // Recompress the text (and store in external storage, if
                                // applicable) if it's not already in external storage.
-                               if ( !in_array( 'external', explode( ',', $row->ar_flags ), true ) ) {
-                                       $data = Revision::getRevisionText( $row, 'ar_' );
+                               $arFlags = explode( ',', $row->ar_flags );
+                               if ( !in_array( 'external', $arFlags, true ) ) {
+                                       $data = $blobStore->decompressData( $row->ar_text, $arFlags );
                                        if ( $data !== false ) {
                                                $flags = Revision::compressRevisionText( $data );