Last modified: 2013-12-09 13:11:25 UTC

Wikimedia Bugzilla is closed!

Wikimedia migrated from Bugzilla to Phabricator. Bug reports are handled in Wikimedia Phabricator.
This static website is read-only and for historical purposes. It is not possible to log in and except for displaying bug reports and their history, links might be broken. See T60189, the corresponding Phabricator task for complete and up-to-date bug report information.
Bug 58189 - LinksUpdateTest should respect database constraints
LinksUpdateTest should respect database constraints
Status: NEW
Product: MediaWiki
Classification: Unclassified
Unit tests (Other open bugs)
1.23.0
All All
: Normal normal (vote)
: ---
Assigned To: Nobody - You can work on this!
:
Depends on:
Blocks: 37702
  Show dependency treegraph
 
Reported: 2013-12-08 21:42 UTC by Marcin Cieślak
Modified: 2013-12-09 13:11 UTC (History)
5 users (show)

See Also:
Web browser: ---
Mobile Platform: ---
Assignee Huggle Beta Tester: ---


Attachments

Description Marcin Cieślak 2013-12-08 21:42:11 UTC
After enabling foreign key constraints on the database (see I326bb4a189bf881299b9fb678033a927b916efac) LinksTestUpdate gives 7 errors.

This is because wikipage content is created in memory only, why LinksUpdate attempts to operate on the database as well.

PostgreSQL in the current setup uses DEFERRED constraints, that means that all references are checked at commit time, allowing various operations in the meantime not immediately conforming to the constraints.

Sometimes fixings this kind of problem is trivial (see example at I653a8bccdaa748a9bea453cd1dbf609a30e1ff6f), but LinksUpdateTest makes it more 
difficult because it attempts to use begin() and commit() in the middle
of the test.

7 errors:

1) LinksUpdateTest::testUpdate_pagelinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrad
ing?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_pagelinks" violates foreign key constraint "u
t_pagelinks_pl_from_fkey"
DETAIL:  Key (pl_from)=(111) is not present in table "unittest_page".

/usr/home/saper/test/mytest/includes/db/Database.php:1111
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:511
/usr/home/saper/test/mytest/includes/db/Database.php:1077
/usr/home/saper/test/mytest/includes/db/Database.php:3477
/usr/home/saper/test/mytest/includes/db/Database.php:3462
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:241
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:884
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:162
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:68
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:123
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:80
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:64
/usr/home/saper/test/mytest/tests/phpunit/phpunit.php:115

2) LinksUpdateTest::testUpdate_externallinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_externallinks" violates foreign key constraint "ut_externallinks_el_from_fkey"
DETAIL:  Key (el_from)=(111) is not present in table "unittest_page".

(...)
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:178
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:102
(...)

3) LinksUpdateTest::testUpdate_categorylinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_categorylinks" violates foreign key constraint "ut_categorylinks_cl_from_fkey"
DETAIL:  Key (cl_from)=(111) is not present in table "unittest_page".

(...)
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:201
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:117
(...)

4) LinksUpdateTest::testUpdate_templatelinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_templatelinks" violates foreign key constraint "ut_templatelinks_tl_from_fkey"
DETAIL:  Key (tl_from)=(111) is not present in table "unittest_page".



/usr/home/saper/test/mytest/includes/db/Database.php:1111
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:511
/usr/home/saper/test/mytest/includes/db/Database.php:1077
/usr/home/saper/test/mytest/includes/db/Database.php:3477
/usr/home/saper/test/mytest/includes/db/Database.php:3462
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:241
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:884
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:193
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:144



5) LinksUpdateTest::testUpdate_imagelinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_imagelinks" violates foreign key constraint "ut_imagelinks_il_from_fkey"
DETAIL:  Key (il_from)=(111) is not present in table "unittest_page".



/usr/home/saper/test/mytest/includes/db/Database.php:1111
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:511
/usr/home/saper/test/mytest/includes/db/Database.php:1077
/usr/home/saper/test/mytest/includes/db/Database.php:3477
/usr/home/saper/test/mytest/includes/db/Database.php:3462
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:241
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:884
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:169
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:157
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:123
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:80
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:64
/usr/home/saper/test/mytest/tests/phpunit/phpunit.php:115



6) LinksUpdateTest::testUpdate_langlinks
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_langlinks" violates 
foreign key constraint "ut_langlinks_ll_from_fkey"
DETAIL:  Key (ll_from)=(111) is not present in table "unittest_page".



/usr/home/saper/test/mytest/includes/db/Database.php:1111
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:511
/usr/home/saper/test/mytest/includes/db/Database.php:1077
/usr/home/saper/test/mytest/includes/db/Database.php:3477
/usr/home/saper/test/mytest/includes/db/Database.php:3462
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:241
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:884
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:183
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:170
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:123
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:80
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:64
/usr/home/saper/test/mytest/tests/phpunit/phpunit.php:115



7) LinksUpdateTest::testUpdate_page_props
DBQueryError: A database error has occurred. Did you forget to run maintenance/update.php after upgrading?  See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script
Query: COMMIT
Function: DatabaseBase::commit
Error: 23503 ERROR:  insert or update on table "unittest_page_props" violates foreign key constraint "ut_page_props_pp_page_fkey"
DETAIL:  Key (pp_page)=(111) is not present in table "unittest_page".

/usr/home/saper/test/mytest/includes/db/Database.php:1111
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:511
/usr/home/saper/test/mytest/includes/db/Database.php:1077
/usr/home/saper/test/mytest/includes/db/Database.php:3477
/usr/home/saper/test/mytest/includes/db/Database.php:3462
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:241
/usr/home/saper/test/mytest/includes/db/DatabasePostgres.php:884
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:334
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:215
/usr/home/saper/test/mytest/includes/deferred/LinksUpdate.php:151
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:193
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:183
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:123
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:80
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:64
/usr/home/saper/test/mytest/tests/phpunit/phpunit.php:115


Question #1: are LinksUpdates needed at all on the DB engine using triggers (ON DELETE CASCADE) to remove dependent rows? If yes, what can we do to make it create consistent contents of the database during this test?

Simplistic changes like


diff --git a/tests/phpunit/includes/LinksUpdateTest.php b/tests/phpunit/includes/LinksUpdateTest.php
index b37ff2e..60ad76e 100644
--- a/tests/phpunit/includes/LinksUpdateTest.php
+++ b/tests/phpunit/includes/LinksUpdateTest.php
@@ -49,6 +49,10 @@ class LinksUpdateTest extends MediaWikiTestCase {
 		$po = new ParserOutput();
 		$po->setTitleText( $t->getPrefixedText() );
 
+	    $pg = WikiPage::factory( $t );
+		$dbw = wfGetDB ( DB_MASTER );
+		$pg->insertOn( $dbw );
+
 		return array( $t, $po );
 	}

don't fix the problem and make even more tests to fail, like on MySQL:

1) LinksUpdateTest::testUpdate_pagelinks
row #1 missing
Failed asserting that a boolean is not empty.

/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:678
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:200
/usr/home/saper/test/mytest/tests/phpunit/includes/LinksUpdateTest.php:72
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiTestCase.php:123
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:80
/usr/home/saper/test/mytest/tests/phpunit/MediaWikiPHPUnitCommand.php:64
/usr/home/saper/test/mytest/tests/phpunit/phpunit.php:115

Note You need to log in before you can comment on or make changes to this bug.


Navigation
Links