Page MenuHomePhabricator

LinksDeletionUpdate skipped, causing revisions to disappear on undelete
Closed, ResolvedPublic

Description

See https://nl.wikipedia.org/wiki/Speciaal:Terugplaatsen/Robert_Hardeman

Deletion log

(show/hide) 15:31, 1 September 2013 Kattenkruid (Talk | contribs | block) deleted page Robert Hardeman (dit gaat niet goed) (view/restore)
(show/hide) 22:31, 31 August 2013 Kattenkruid (Talk | contribs | block) deleted page Robert Hardeman (Geklieder of ander vandalisme: De inhoud was: "Robert ook steunt Robert de jacht op dolfijnen want die hebben het dol fijn in de zee en smaken lekker net als kip!!, zelf is hij ook een grote Fan van ..." ([[Special:Contrib...) (view/restore)

Suppression log
No matching items in log.

Page history

There is no edit history for this page.

The page wasn't restored and renamed. It was deleted two times (why? went the deletion wrong?) and the deleted edits suddenly disappeared. The edit, however, is still visible in the recent changes as it seems and can't be marked.

Can someone look at this and maybe fix it so that the items are visible again?


Version: unspecified
Severity: critical

Details

Reference
bz53687

Event Timeline

bzimport raised the priority of this task from to High.Nov 22 2014, 2:13 AM
bzimport set Reference to bz53687.

Most likely WMW issue; data loss -> critical.

Why was this moved to media storage. Page is not an image (?)

The binlogs show:

  • The article was created by an anonymous user at 2013-08-31 20:30:09
  • The article was edited by Ronn at 20:31:00, apparently tagging it for deletion
  • Later in the same second (20:31:00), the article was deleted by Kattenkruid

The deletion action went awry. The revisions were copied into the archive table, but they were never deleted from the revision table. The most likely reason for this appears to be a failure of WikiPage::getContent(). The binlog shows WikiPage::onArticleDelete() and SiteStatsUpdate completing successfully, and there was no exception log entry, so it seems that DataUpdate::runUpdates( $updates ) silently did nothing. The !$content case in WikiPage::getDeletionUpdates() seems like a possible culprit.

With the ContentHandler project, the critical database consistency action of deleting the revisions from the revision table was moved to LinksDeletionUpdate, and is dependent on the content type. This appears to be an error -- page/revision/archive consistency is not content-type-dependent. In MW 1.5, the revision table delete was well-separated from the link table updates, but they were brought together in r15707, and subsequent refactoring inappropriately maintained this close association.

After the botched deletion, the binlogs show:

  • At 2013-09-01 13:29:57, Kattenkruid attempted to undelete the article. No revisions were inserted into the revision table, presumably because the if ( $exists ) case was hit in PageArchive::undeleteRevisions(). The archive table rows were deleted. The action was not logged, so presumably there was some kind of additional failure. At this point, there would have been a page with no revisions, which is not normally possible.
  • At 13:31:21, Kattenkruid deleted the revisionless page.
  • At 2013-09-04 20:26:37, "Look Sharp!" recreated the page by editing it.
  • At 20:26:47, "Look Sharp!" deleted the page, generating one archive row.

The orphaned revision rows are still present in the table (rev_ids 38833406, 38833414), and I can easily recover them by connecting them to a page.

Added Daniel Kinzler to the CC list, since he is a relevant developer.

Created attachment 13415
Binlog excerpt

Some relevant binlog entries, with annotations

attachment bug 53687 binlog.txt ignored as obsolete

(In reply to comment #4)

The binlogs show:

  • The article was created by an anonymous user at 2013-08-31 20:30:09
  • The article was edited by Ronn at 20:31:00, apparently tagging it for

deletion

  • Later in the same second (20:31:00), the article was deleted by Kattenkruid

The deletion action went awry. The revisions were copied into the archive
table, but they were never deleted from the revision table. The most likely
reason for this appears to be a failure of WikiPage::getContent(). The binlog
shows WikiPage::onArticleDelete() and SiteStatsUpdate completing
successfully,
and there was no exception log entry, so it seems that
DataUpdate::runUpdates(
$updates ) silently did nothing. The !$content case in
WikiPage::getDeletionUpdates() seems like a possible culprit.

With the ContentHandler project, the critical database consistency action of
deleting the revisions from the revision table was moved to
LinksDeletionUpdate, and is dependent on the content type. This appears to be
an error -- page/revision/archive consistency is not content-type-dependent.
In
MW 1.5, the revision table delete was well-separated from the link table
updates, but they were brought together in r15707, and subsequent refactoring
inappropriately maintained this close association.

After the botched deletion, the binlogs show:

  • At 2013-09-01 13:29:57, Kattenkruid attempted to undelete the article. No

revisions were inserted into the revision table, presumably because the if (
$exists ) case was hit in PageArchive::undeleteRevisions(). The archive table
rows were deleted. The action was not logged, so presumably there was some
kind
of additional failure. At this point, there would have been a page with no
revisions, which is not normally possible.

  • At 13:31:21, Kattenkruid deleted the revisionless page.
  • At 2013-09-04 20:26:37, "Look Sharp!" recreated the page by editing it.
  • At 20:26:47, "Look Sharp!" deleted the page, generating one archive row.

The orphaned revision rows are still present in the table (rev_ids 38833406,
38833414), and I can easily recover them by connecting them to a page.

Thanks for the detailed explanation, Tim! Yes, please, could you recover the deleted edits? (if it's not too much) I'm intended to restore the page or so, but it's always useful to have all the contribs and deleted contribs around.

Also: is it possible to check whether this has happened elsewhere too?

(In reply to comment #7)

Thanks for the detailed explanation, Tim! Yes, please, could you recover the
deleted edits? (if it's not too much) I'm intended to restore the page or so,
but it's always useful to have all the contribs and deleted contribs around.

Done.

Also: is it possible to check whether this has happened elsewhere too?

I will work on it.

The content of attachment 13415 has been deleted by

Tim Starling <tstarling@wikimedia.org>

who provided the following reason:

contains private IP address

The token used to delete this attachment was generated at 2013-10-04 02:22:01 UTC.

Change 87505 had a related patch set uploaded by Tim Starling:
Fix revision table cleanup on delete

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

Change 87505 merged by jenkins-bot:
Fix revision table cleanup on delete

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

Change 88632 had a related patch set uploaded by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88632 merged by jenkins-bot:
Fix revision table cleanup on delete

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

Change 88667 had a related patch set uploaded by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88667 merged by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88671 had a related patch set uploaded by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88671 abandoned by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88686 had a related patch set uploaded by Aaron Schulz:
Fix revision table cleanup on delete

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

Change 88686 merged by jenkins-bot:
Fix revision table cleanup on delete

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

Change 88761 had a related patch set uploaded by Aaron Schulz:
Fixed trx isolation bug that could cause text not to be found

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

Change 88761 merged by jenkins-bot:
Fixed trx isolation bug that could cause text not to be found

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

Is more work needed or can this be considered FIXED?

Change 93645 had a related patch set uploaded by Tim Starling:
[WIP] Script to fix bug 53687 (failure of revision row deletion)

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

Change 93645 merged by jenkins-bot:
Script to fix bug 53687 (failure of revision row deletion)

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

I ran the cleanup script on all affected wikis except Wikidata. On wikidatawiki, the dry run output was unusual, indicating the presence of another bug. So this bug is close enough to fixed for me.