"Saper" changed the status of MediaWiki.r113408 to "fixme" and commented it.
URL: http://www.mediawiki.org/wiki/Special:Code/MediaWiki/113408#c32008
Old Status: new
New Status: fixme
Commit summary for MediaWiki.r113408:
PostgreSQL: Improve SQL error handling
After a query error, PostgreSQL transaction is aborted
until it's terminated or the query is closed.
All further queries result in:
ERROR: current transaction is aborted, commands ignored
until end of transaction block
Those subsequent errors are ignored by double fault handling in
DatabaseBase::reportQueryError but they cause all localization
of error messages to fail (unable to issue queries to message
tables) and errors lke
This resulted in a broken MediaWiki screen with
<databaseerror>
<dberrortext>
instead of localized error message.
We need to fully reset database connection because after
pg_connection_reset() various session parameters need to
be set again (like "search_path"), otherwise tables will not be
found.
ERROR: relation "msg_resource" does not exist
ERROR: relation "l10n_cache" does not exist
Saper's comment:
<code>$this->reOpen();</code> seems to break emulation of "SELECT IGNORE":
For example, deleting a page you watch with leaving "Watch this page" checked
fails
Without <code>$this->reOpen();</code> the connection seems to loose
"search_path" after ROLLBACK on error:
<pre>
Query trunk (17) (slave): SELECT /* LCStore_DB::get Saper */ lc_value FROM
"l10n_cache" WHERE lc_lang = 'pl' AND lc_key = 'messages:searchresults-title'
LIMIT 1
Some query >>SELECT /* LCStore_DB::get Saper */ lc_value FROM "l10n_cache"
WHERE lc_lang = 'pl' AND lc_key = 'messages:searchresults-title' LIMIT 1 <<
returned [NULL]
Query trunk (18) (slave): SELECT /* LinkCache::addLinkObj Saper */
page_id,page_len,page_is_redirect,page_latest FROM "page" WHERE
page_namespace = '0' AND page_title = '''' LIMIT 1
Some query >>SELECT /* LinkCache::addLinkObj Saper */
page_id,page_len,page_is_redirect,page_latest FROM "page" WHERE
page_namespace = '0' AND page_title = '''' LIMIT 1 << returned [NULL]
parseQuery received: '
parseQuery returned: ''''
Query trunk (19) (slave): SELECT /* Saper */ to_tsquery('''')
Some query >>SELECT /* Saper */ to_tsquery('''')<< returned [false]
Query trunk (20) (slave): ROLLBACK
Some query >>ROLLBACK<< returned [NULL]
SQL ERROR: ERROR: syntax error in tsquery: "'"
Query trunk (21) (slave): BEGIN
Some query >>BEGIN<< returned [NULL]
Query trunk (22) (slave): SELECT /* LCStore_DB::get Saper */ lc_value FROM
"l10n_cache" WHERE lc_lang = 'pl' AND lc_key = 'messages:databaseerror' LIMIT
1
Some query >>SELECT /* LCStore_DB::get Saper */ lc_value FROM "l10n_cache"
WHERE lc_lang = 'pl' AND lc_key = 'messages:databaseerror' LIMIT 1 <<
returned [false]
Query trunk (23) (slave): ROLLBACK
Some query >>ROLLBACK<< returned [NULL]
SQL ERROR (ignored): ERROR: relation "l10n_cache" does not exist
LINE 1: ...ELECT /* LCStore_DB::get Saper */ lc_value FROM "l10n_cach...
^
Query trunk (24) (slave): BEGIN
Some query >>BEGIN<< returned [NULL]
Query trunk (25) (slave): SELECT /* LCStore_DB::get Saper */ lc_value FROM
"l10n_cache" WHERE lc_lang = 'pl' AND lc_key = 'messages:dberrortext' LIMIT 1
Some query >>SELECT /* LCStore_DB::get Saper */ lc_value FROM "l10n_cache"
WHERE lc_lang = 'pl' AND lc_key = 'messages:dberrortext' LIMIT 1 << returned
[false]
Query trunk (26) (slave): ROLLBACK
</pre>
_______________________________________________
MediaWiki-CodeReview mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-codereview