Page MenuHomePhabricator

Page can't be restored if contains hidden revisions
Closed, ResolvedPublicPRODUCTION ERROR

Description

List of steps to reproduce (step by step, including full links if applicable):

What happens?:

Произошла ошибка в базе данных. Это может указывать на ошибку в программном обеспечении.
[79509345-bae4-48cc-ad11-c462216a5985] 2021-07-03 09:28:51: Неустранимое исключение типа «Wikimedia\Rdbms\DBTransactionStateError»

Database error. Unhandled exception type «Wikimedia\Rdbms\DBTransactionStateError»

Uncancelable atomic section canceled (got PageArchive::undeleteRevisions)

What should have happened instead?:
Best case: page should be undeleted
Worst case: An error message like "You can't undelete this page. Please check if some revisions were hidden using RevisionDelete"

Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc:

Event Timeline

Aklapper changed the subtype of this task from "Bug Report" to "Production Error".Jul 3 2021, 12:09 PM
Aklapper set Phatality ID (Deprecated) to 9e6bc2614f7903586c8ddcfc6ed0f327d71c7d5e27407f22981da0beb4c67698.
Aklapper updated the task description. (Show Details)

The whole stacktrace which I get when reproducing this on beta.

[YOCHMHVn7C6n6OXJASSvfgAAAAA] /w/index.php?title=Special:Undelete&action=submit Wikimedia\Rdbms\DBTransactionStateError: Cannot execute query from Wikimedia\Rdbms\Database::ping while transaction status is ERROR

Backtrace:

from /srv/mediawiki/php-master/includes/libs/rdbms/database/Database.php(1570)
#0 /srv/mediawiki/php-master/includes/libs/rdbms/database/Database.php(1276): Wikimedia\Rdbms\Database->assertQueryIsCurrentlyAllowed(string, string)
#1 /srv/mediawiki/php-master/includes/libs/rdbms/database/Database.php(5021): Wikimedia\Rdbms\Database->query(string, string, integer)
#2 /srv/mediawiki/php-master/includes/libs/rdbms/database/Database.php(760): Wikimedia\Rdbms\Database->ping(NULL)
#3 /srv/mediawiki/php-master/includes/libs/rdbms/database/Database.php(748): Wikimedia\Rdbms\Database->pingAndCalculateLastTrxApplyTime()
#4 /srv/mediawiki/php-master/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1746): Wikimedia\Rdbms\Database->pendingWriteQueryDuration(string)
#5 /srv/mediawiki/php-master/includes/libs/rdbms/loadbalancer/LoadBalancer.php(2265): Wikimedia\Rdbms\LoadBalancer::Wikimedia\Rdbms\{closure}(Wikimedia\Rdbms\DatabaseMysqli)
#6 /srv/mediawiki/php-master/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1762): Wikimedia\Rdbms\LoadBalancer->forEachOpenMasterConnection(Closure)
#7 /srv/mediawiki/php-master/includes/libs/rdbms/lbfactory/LBFactory.php(249): Wikimedia\Rdbms\LoadBalancer->approveMasterChanges(array, string, integer)
#8 /srv/mediawiki/php-master/includes/libs/rdbms/lbfactory/LBFactoryMulti.php(236): Wikimedia\Rdbms\LBFactory::Wikimedia\Rdbms\{closure}(Wikimedia\Rdbms\LoadBalancer, string, array)
#9 /srv/mediawiki/php-master/includes/libs/rdbms/lbfactory/LBFactory.php(251): Wikimedia\Rdbms\LBFactoryMulti->forEachLB(Closure, array)
#10 /srv/mediawiki/php-master/includes/libs/rdbms/lbfactory/LBFactory.php(310): Wikimedia\Rdbms\LBFactory->forEachLBCallMethod(string, array)
#11 /srv/mediawiki/php-master/includes/MediaWiki.php(684): Wikimedia\Rdbms\LBFactory->commitMasterChanges(string, array)
#12 /srv/mediawiki/php-master/includes/MediaWiki.php(654): MediaWiki::preOutputCommit(RequestContext, Closure)
#13 /srv/mediawiki/php-master/includes/MediaWiki.php(948): MediaWiki->doPreOutputCommit(Closure)
#14 /srv/mediawiki/php-master/includes/MediaWiki.php(559): MediaWiki->main()
#15 /srv/mediawiki/php-master/index.php(53): MediaWiki->run()
#16 /srv/mediawiki/php-master/index.php(46): wfIndexMain()
#17 /srv/mediawiki/w/index.php(3): require(string)
#18 {main}

Undeletion works if not the last page is revision deleted.

The last version is getting the current one and it is not possible that the current version of a page is revision deleted (the content), thats why it throws original.

MediaWiki is detecting this situation and should show the undeleterevdel message, but while doing that the transaction are out of sync

Change 703871 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/core@master] undelete: Start atomic section with IDatabase::ATOMIC_CANCELABLE

https://gerrit.wikimedia.org/r/703871

Change 703871 merged by jenkins-bot:

[mediawiki/core@master] undelete: Start atomic section with IDatabase::ATOMIC_CANCELABLE

https://gerrit.wikimedia.org/r/703871

Umherirrender claimed this task.
Umherirrender triaged this task as Medium priority.