Page MenuHomePhabricator

importDump.php failing on file uploads without --username-prefix="" set
Closed, ResolvedPublic

Description

When attempting to transfer the entire history of a couple of files from one wiki to another using dumpBackup.php and importDump.php I am getting the following error:

TypeError from line 193 of /opt/htdocs/mediawiki/includes/ActorMigration.php: Argument 3 passed to ActorMigration::getInsertValues() must implement interface MediaWiki\User\UserIdentity, boolean given, called in /opt/htdocs/mediawiki/includes/filerepo/file/OldLocalFile.php on line 450

Environment:

  • MediaWiki 1.31.1 (a4c8065)
  • PHP 7.0.32 (apache2handler)
  • MariaDB 5.5.60-MariaDB
  • ICU: 50.1.2
  • Elasticsearch 5.6.12

To setup which files to import, I do:

cd /opt/htdocs
echo "File:File1.docx" > somefiles
echo "File:File2.docx" >> somefiles

Then I run the following:

# From the first wiki get files:
php dumpBackup.php --full --logs --uploads --include-files --pagelist=/opt/htdocs/somefiles > /opt/htdocs/somefiles.xml

# Into the destination wiki import files:
php importDump.php --no-updates --uploads --debug --report=100 < /opt/htdocs/somefiles.xml

I've used this method in the past to import 1000s of files without issue, though not on MediaWiki 1.31. I've been able to work around this problem for these files by adding --username-prefix="" to the importDump.php command. In includes\import\ImportableUploadRevisionImporter.php on line 88, the value of $importableRevision->getUser() is imported>ActualUserName. By setting username-prefix I'm able to remove that imported> part.

I've attempted this on one file that I know imported properly in late June 2018, using MediaWiki 1.27. I'm getting a different error that seems to have the same cause:

Error from line 1447 of /opt/htdocs/mediawiki/includes/filerepo/file/LocalFile.php: Call to a member function getId() on boolean

Again, adding --username-prefix="" fixes this issue.

Note that I'm also getting the following error, which does not go away with the addition of username-prefix in either case:

Warning: XMLReader::open(): Unable to open source data in /opt/htdocs/mediawiki/includes/libs/mime/XmlTypeCheck.php on line 158

Full output of failing command on first set of files:

Warning: XMLReader::open(): Unable to open source data in /opt/htdocs/mediawiki/includes/libs/mime/XmlTypeCheck.php on line 158

[42a9e4327b9e9efbe58bc962] [no req]   TypeError from line 193 of /opt/htdocs/mediawiki/includes/ActorMigration.php: Argument 3 passed to ActorMigration::getInsertValues() must implement interface MediaWiki\User\UserIdentity, boolean given, called in /opt/htdocs/mediawiki/includes/filerepo/file/OldLocalFile.php on line 450
Backtrace:
#0 /opt/htdocs/mediawiki/includes/filerepo/file/OldLocalFile.php(450): ActorMigration->getInsertValues(Wikimedia\Rdbms\DatabaseMysqli, string, boolean)
#1 /opt/htdocs/mediawiki/includes/filerepo/file/OldLocalFile.php(420): OldLocalFile->recordOldUpload(string, string, string, string, boolean)
#2 /opt/htdocs/mediawiki/includes/import/ImportableUploadRevisionImporter.php(93): OldLocalFile->uploadOld(string, string, string, string, boolean)
#3 /opt/htdocs/mediawiki/includes/import/WikiRevision.php(659): ImportableUploadRevisionImporter->import(WikiRevision)
#4 [internal function]: WikiRevision->importUpload()
#5 /opt/htdocs/mediawiki/includes/libs/rdbms/database/Database.php(3191): call_user_func_array(array, array)
#6 /opt/htdocs/mediawiki/maintenance/importDump.php(218): Wikimedia\Rdbms\Database->deadlockLoop(array)
#7 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(1049): BackupReader->handleUpload(WikiRevision)
#8 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(997): WikiImporter->processUpload(array, array)
#9 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(803): WikiImporter->handleUpload(array)
#10 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(608): WikiImporter->handlePage()
#11 /opt/htdocs/mediawiki/maintenance/importDump.php(345): WikiImporter->doImport()
#12 /opt/htdocs/mediawiki/maintenance/importDump.php(287): BackupReader->importFromHandle(resource)
#13 /opt/htdocs/mediawiki/maintenance/importDump.php(116): BackupReader->importFromStdin()
#14 /opt/htdocs/mediawiki/maintenance/doMaintenance.php(94): BackupReader->execute()
#15 /opt/htdocs/mediawiki/maintenance/importDump.php(350): require_once(string)
#16 {main}

Full output of failing command on second file (that had worked in June on MW 1.27):

Warning: XMLReader::open(): Unable to open source data in /opt/htdocs/mediawiki/includes/libs/mime/XmlTypeCheck.php on line 161
[d92bb55fab1f9898753d1fab] [no req]   Error from line 1447 of /opt/htdocs/mediawiki/includes/filerepo/file/LocalFile.php: Call to a member function getId() on boolean
Backtrace:
#0 /opt/htdocs/mediawiki/includes/filerepo/file/LocalFile.php(1364): LocalFile->recordUpload2(string, string, string, array, string, boolean, array)
#1 /opt/htdocs/mediawiki/includes/import/ImportableUploadRevisionImporter.php(114): LocalFile->upload(string, string, string, integer, array, string, boolean)
#2 /opt/htdocs/mediawiki/includes/import/WikiRevision.php(659): ImportableUploadRevisionImporter->import(WikiRevision)
#3 [internal function]: WikiRevision->importUpload()
#4 /opt/htdocs/mediawiki/includes/libs/rdbms/database/Database.php(3191): call_user_func_array(array, array)
#5 /opt/htdocs/mediawiki/maintenance/importDump.php(218): Wikimedia\Rdbms\Database->deadlockLoop(array)
#6 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(1049): BackupReader->handleUpload(WikiRevision)
#7 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(997): WikiImporter->processUpload(array, array)
#8 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(803): WikiImporter->handleUpload(array)
#9 /opt/htdocs/mediawiki/includes/import/WikiImporter.php(608): WikiImporter->handlePage()
#10 /opt/htdocs/mediawiki/maintenance/importDump.php(345): WikiImporter->doImport()
#11 /opt/htdocs/mediawiki/maintenance/importDump.php(287): BackupReader->importFromHandle(resource)
#12 /opt/htdocs/mediawiki/maintenance/importDump.php(116): BackupReader->importFromStdin()
#13 /opt/htdocs/mediawiki/maintenance/doMaintenance.php(94): BackupReader->execute()
#14 /opt/htdocs/mediawiki/maintenance/importDump.php(350): require_once(string)
#15 {main}

Related Objects

Event Timeline

I think this is probably resolved and can be closed, or at least it should be reevaluated and confirmed whether it's still an issue. Because:

  1. I just today ran an import of a dump from 2015 into MW 1.43, without issue, and without --username-prefix
  2. includes/ActorMigration.php (which is now includes/user/ActorMigration.php) lists getInsertValues() as deprecated since MW 1.39
  3. As such, none of the other code calls that function anymore. Other code (including include/filerepo/file/OldLocalFile.php) calls the recommended replacement, getActorNormalization()->acquireActorId()
  4. The internals have changed enough that there's no reason to think that the new code paths would continue to exhibit the old bugs, absent a report that the issue is still present in current MediaWiki versions.