Page MenuHomePhabricator

Moving pages is completely broken in 1.21wmf12
Closed, ResolvedPublic

Description

Trying to move any page to a title that didn't previously exist causes an exception in 1.21wmf12.

I captured the following backtrace from nlwikimedia, using a debugging hack that includes $title->getPrefixedText() (which turned out to be the title the page was being moved to) in the exception message. I could also reproduce this my trying to move [[Test]] to [[Test2]] on test2.wikipedia.org .

2013-03-21 01:51:52 mw1055 nlwikimedia: [458e1031] /w/index.php?title=Speciaal:PaginaHernoemen&action=submit Exception from line 71 of /usr/local/apache/common-local/php-1.21wmf12/includes/LinksUpdate.php: The Title object for Wikimedia:De kroeg/Archief/2007 did not provide an article ID. Perhaps the page doesn't exist?
#0 /usr/local/apache/common-local/php-1.21wmf12/includes/parser/ParserOutput.php(474): LinksUpdate->__construct(Object(Title), Object(ParserOutput), true)
#1 /usr/local/apache/common-local/php-1.21wmf12/includes/content/AbstractContent.php(242): ParserOutput->getSecondaryDataUpdates(Object(Title), true)
#2 /usr/local/apache/common-local/php-1.21wmf12/includes/WikiPage.php(2066): AbstractContent->getSecondaryDataUpdates(Object(Title), NULL, true, Object(ParserOutput))
#3 /usr/local/apache/common-local/php-1.21wmf12/includes/Title.php(3847): WikiPage->doEditUpdates(Object(Revision), Object(User), Array)
#4 /usr/local/apache/common-local/php-1.21wmf12/includes/Title.php(3683): Title->moveToInternal(Object(Title), '', false)
#5 /usr/local/apache/common-local/php-1.21wmf12/includes/specials/SpecialMovepage.php(462): Title->moveTo(Object(Title), true, '', false)
#6 /usr/local/apache/common-local/php-1.21wmf12/includes/specials/SpecialMovepage.php(97): MovePageForm->doSubmit()
#7 /usr/local/apache/common-local/php-1.21wmf12/includes/SpecialPage.php(613): MovePageForm->execute(NULL)
#8 /usr/local/apache/common-local/php-1.21wmf12/includes/SpecialPageFactory.php(487): SpecialPage->run(NULL)
#9 /usr/local/apache/common-local/php-1.21wmf12/includes/Wiki.php(291): SpecialPageFactory::executePath(Object(Title), Object(RequestContext))
#10 /usr/local/apache/common-local/php-1.21wmf12/includes/Wiki.php(565): MediaWiki->performRequest()
#11 /usr/local/apache/common-local/php-1.21wmf12/includes/Wiki.php(458): MediaWiki->main()
#12 /usr/local/apache/common-local/php-1.21wmf12/index.php(59): MediaWiki->run()
#13 /usr/local/apache/common-local/live-1.5/index.php(3): require('/usr/local/apac...')
#14 {main}


Version: unspecified
Severity: critical

Details

Reference
bz46397

Related Objects

Event Timeline

bzimport raised the priority of this task from to Unbreak Now!.Nov 22 2014, 1:35 AM
bzimport set Reference to bz46397.

If this isn't able to be fixed by tomorrow afternoon, let's roll back the wmf12 deploy.

Tim: Since you're awake first, can you debug and update us here, please?

Chris: Is this functionality covered in our test suite? If not, let's put it in the backlog.

On test2.wikipedia.org, moved "Title A" to "Title B". "Title A" now has an incorrect page_latest, an incorrect page_len, and an incorrect page_is_redirect:


mysql> select * from page where page_title = 'Title_A' and page_namespace = 0\G

  • 1. row ******* page_id: 6762 page_namespace: 0 page_title: Title_A

page_restrictions:

page_counter: 0

page_is_redirect: 0

 page_is_new: 1
 page_random: 0.523019457806
page_touched: 20130321061504
 page_latest: 0
    page_len: 0

1 row in set (0.00 sec)

  • Bug 46403 has been marked as a duplicate of this bug. ***

This is most likely due to Iea16d672 (thanks Robla for pointing me in this direction).

Title::moveToInternal() moves the page and then calls $nt->resetArticleID($oldid) to reset the article ID. Then a new WikiPage is constructed with the title $nt, and updates are called on this WikiPage object. Before Iea16d672, $newpage->getId() would have returned the new ID due to it being stored in $nt->mArticleId, but after Iea16d672, $newpage->getId() calls $newpage->loadPageData(), which fetches the page_id from the *slave* database. Of course, it is not in the slave yet, since the update query and the select query are separated by microseconds.

It is easy to reproduce locally with $wgAllDBsAreLocalhost = true, with zero master load.

(In reply to comment #5)

It is easy to reproduce locally with $wgAllDBsAreLocalhost = true, with zero
master load.

That is to say, the update transaction is still open, so even a separate master connection does not see the new page_id. It's not necessary to actually have replication to see the issue.

I have rolled back all wikis to MW 1.21wmf11 and thus will lower the priority.

  • Bug 46411 has been marked as a duplicate of this bug. ***

(In reply to comment #10)

One more change needed: https://gerrit.wikimedia.org/r/#/c/55218/

Merged.

(In reply to comment #11)

see also https://bugzilla.wikimedia.org/46427

That bug is still present.

I don't get this error, but some people are still getting "LinkCache doesn't know about this title".