Page MenuHomePhabricator

Broken protect history link causing database errors for PostgreSQL backend
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • protect any page
  • visit Special:Log/protect or Special:RecentChanges
  • click a "hist" link of a protect log

What happens?:

A database error is reported:

Error 22008: ERROR: date/time field value out of range: "20230906122205"
LINE 1: ...r)) WHERE rev_page = 3495 AND (rev_timestamp >= '202309061...
^
HINT: Perhaps you need a different "datestyle" setting.

Function: IndexPager::buildQueryInfo (history page unfiltered)
Query: SELECT rev_id,rev_page,rev_timestamp,rev_minor_edit,rev_deleted,rev_len,rev_parent_id,rev_sha1,comment_rev_comment.comment_text AS "rev_comment_text",comment_rev_comment.comment_data AS "rev_comment_data",comment_rev_comment.comment_id AS "rev_comment_cid",actor_rev_user.actor_user AS "rev_user",actor_rev_user.actor_name AS "rev_user_text",rev_actor,user_name,(SELECT array_to_string(array_agg(ctd_name),',') FROM "change_tag" JOIN "change_tag_def" ON ((ct_tag_id=ctd_id)) WHERE ct_rev_id=rev_id ) AS "ts_tags" FROM "revision" JOIN "revision_comment_temp" "temp_rev_comment" ON ((temp_rev_comment.revcomment_rev = rev_id)) JOIN "comment" "comment_rev_comment" ON ((comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id)) JOIN "actor" "actor_rev_user" ON ((actor_rev_user.actor_id = rev_actor)) LEFT JOIN "user" ON ((actor_rev_user.actor_user != 0) AND (user_id = actor_rev_user.actor_user)) WHERE rev_page = 3495 AND (rev_timestamp >= '20230906122205') ORDER BY rev_timestamp,rev_id LIMIT 1

Backtrace:

from /usr/share/webapps/mediawiki/includes/libs/rdbms/database/Database.php(1524)
#0 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/Database.php(1508): Wikimedia\Rdbms\Database->getQueryException()
#1 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/Database.php(1482): Wikimedia\Rdbms\Database->getQueryExceptionAndLog()
#2 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/Database.php(855): Wikimedia\Rdbms\Database->reportQueryError()
#3 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/Database.php(1629): Wikimedia\Rdbms\Database->query()
#4 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/DBConnRef.php(119): Wikimedia\Rdbms\Database->select()
#5 /usr/share/webapps/mediawiki/includes/libs/rdbms/database/DBConnRef.php(344): Wikimedia\Rdbms\DBConnRef->__call()
#6 /usr/share/webapps/mediawiki/includes/pager/IndexPager.php(461): Wikimedia\Rdbms\DBConnRef->select()
#7 /usr/share/webapps/mediawiki/includes/pager/IndexPager.php(278): IndexPager->reallyDoQuery()
#8 /usr/share/webapps/mediawiki/includes/pager/IndexPager.php(737): IndexPager->doQuery()
#9 /usr/share/webapps/mediawiki/includes/actions/pagers/HistoryPager.php(630): IndexPager->getNumRows()
#10 /usr/share/webapps/mediawiki/includes/pager/ReverseChronologicalPager.php(168): HistoryPager->isNavigationBarShown()
#11 /usr/share/webapps/mediawiki/includes/actions/HistoryAction.php(321): ReverseChronologicalPager->getNavigationBar()
#12 /usr/share/webapps/mediawiki/includes/actions/FormlessAction.php(48): HistoryAction->onView()
#13 /usr/share/webapps/mediawiki/includes/MediaWiki.php(556): FormlessAction->show()
#14 /usr/share/webapps/mediawiki/includes/MediaWiki.php(333): MediaWiki->performAction()
#15 /usr/share/webapps/mediawiki/includes/MediaWiki.php(923): MediaWiki->performRequest()
#16 /usr/share/webapps/mediawiki/includes/MediaWiki.php(576): MediaWiki->main()
#17 /usr/share/webapps/mediawiki/index.php(50): MediaWiki->run()
#18 /usr/share/webapps/mediawiki/index.php(46): wfIndexMain()
#19 {main}

What should have happened instead?:

Software version (skip for WMF-hosted wikis like Wikipedia):
See https://wiki.archlinuxcn.org/wiki/Special:Version
Other information (browser name/version, screenshots, etc.):

In T352359, @tstarling wrote:

Note that a conventional 14-char timestamp is not a valid PG timestamp, so any client that constructs its own offset parameter, following normal MediaWiki conventions, will cause an exception in the server.
The simplest way to fix this would be to convert all the TIMESTAMPTZ fields to CHAR or VARCHAR for consistency with MySQL.

Event Timeline

Ammarpad subscribed.

Hope to find a reviewer for this.

@Ammarpad Add me as reviewer, I'll take care of it.

@Ammarpad Add me as reviewer, I'll take care of it.

OK, thanks. Will do that

Change #1200672 had a related patch set uploaded (by Ammarpad; author: Ammarpad):

[mediawiki/core@master] pagers: Make history pager work with Postgres

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

Change #1200672 merged by jenkins-bot:

[mediawiki/core@master] pagers: Make history pager work with Postgres

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

Change #1202129 had a related patch set uploaded (by Ammarpad; author: Ammarpad):

[mediawiki/core@REL1_45] pagers: Make history pager work with Postgres

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

Change #1202130 had a related patch set uploaded (by Ammarpad; author: Ammarpad):

[mediawiki/core@REL1_44] pagers: Make history pager work with Postgres

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

Change #1202132 had a related patch set uploaded (by Ammarpad; author: Ammarpad):

[mediawiki/core@REL1_43] pagers: Make history pager work with Postgres

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

Change #1202132 abandoned by Ammarpad:

[mediawiki/core@REL1_43] pagers: Make history pager work with Postgres

Reason:

IndexPager::getOffset exists only in >= 1.45

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

Change #1202130 abandoned by Ammarpad:

[mediawiki/core@REL1_44] pagers: Make history pager work with Postgres

Reason:

IndexPager::getOffset exists only in >= 1.45

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

Change #1202129 merged by jenkins-bot:

[mediawiki/core@REL1_45] pagers: Make history pager work with Postgres

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

This change created a regression in T409831 which currently blocks the deployment train.

https://gerrit.wikimedia.org/r/c/1203855 has been merged (which I assume should hopefully remove the train-blocker for -wmf.3). To confirm, should that patch be backported to REL1_45?

https://gerrit.wikimedia.org/r/c/1203855 has been merged (which I assume should hopefully remove the train-blocker for -wmf.3). To confirm, should that patch be backported to REL1_45?

Done in https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1206918

A_smart_kitten added a subscriber: Atieno.

Brilliant, thanks @Atieno & @ABreault-WMF :)
I believe that's now everything that's left to do on this ticket; so boldly re-resolving.