"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

Reply via email to