Page MenuHomePhabricator

NameTableAccessException: Expected unused ID from database insert for 'mw-changed-redirect-target' into 'change_tag_def',
Closed, InvalidPublic

Description

MW: e93fdaca0
PHP: 7.1 / 7.2

Issue

Just got a CI email because starting with [0] our integration tests fail with:

1) SMW\Tests\Integration\MediaWiki\RedirectTargetFinderIntegrationTest::testManualRemovalOfRedirectTarget
MediaWiki\Storage\NameTableAccessException: Expected unused ID from database insert for 'mw-changed-redirect-target'  into 'change_tag_def', but ID 1 is already associated with the name 'mw-new-redirect'! This may indicate database corruption!
/home/travis/build/SemanticMediaWiki/mw/includes/Storage/NameTableStore.php:177
/home/travis/build/SemanticMediaWiki/mw/includes/changetags/ChangeTags.php:351
/home/travis/build/SemanticMediaWiki/mw/includes/changetags/ChangeTags.php:226
/home/travis/build/SemanticMediaWiki/mw/includes/changes/RecentChange.php:447
/home/travis/build/SemanticMediaWiki/mw/includes/changes/RecentChange.php:724
/home/travis/build/SemanticMediaWiki/mw/includes/deferred/MWCallableUpdate.php:34
/home/travis/build/SemanticMediaWiki/mw/includes/deferred/DeferredUpdates.php:268
/home/travis/build/SemanticMediaWiki/mw/includes/deferred/DeferredUpdates.php:214
/home/travis/build/SemanticMediaWiki/mw/includes/deferred/DeferredUpdates.php:134
/home/travis/build/SemanticMediaWiki/mw/includes/deferred/DeferredUpdates.php:307
/home/travis/build/SemanticMediaWiki/mw/maintenance/Maintenance.php:673
/home/travis/build/SemanticMediaWiki/mw/includes/libs/rdbms/database/Database.php:3543
/home/travis/build/SemanticMediaWiki/mw/includes/libs/rdbms/database/Database.php:3881
/home/travis/build/SemanticMediaWiki/mw/includes/libs/rdbms/database/Database.php:3664
/home/travis/build/SemanticMediaWiki/mw/includes/libs/rdbms/database/DBConnRef.php:49
/home/travis/build/SemanticMediaWiki/mw/includes/libs/rdbms/database/DBConnRef.php:519
/home/travis/build/SemanticMediaWiki/mw/includes/Storage/PageUpdater.php:996
/home/travis/build/SemanticMediaWiki/mw/includes/Storage/PageUpdater.php:733
/home/travis/build/SemanticMediaWiki/mw/includes/page/WikiPage.php:1878
/home/travis/build/SemanticMediaWiki/mw/extensions/SemanticMediaWiki/tests/phpunit/Utils/PageCreator.php:92
/home/travis/build/SemanticMediaWiki/mw/extensions/SemanticMediaWiki/tests/phpunit/Integration/MediaWiki/RedirectTargetFinderIntegrationTest.php:122
/home/travis/build/SemanticMediaWiki/mw/extensions/SemanticMediaWiki/tests/phpunit/DatabaseTestCase.php:133
/home/travis/build/SemanticMediaWiki/mw/maintenance/doMaintenance.php:94

Cause

I believe it is caused by either [1] or [2].

[0] https://travis-ci.org/SemanticMediaWiki/SemanticMediaWiki/jobs/425424625
[1] https://github.com/wikimedia/mediawiki/commit/ccc2925f920b360d0ddd8bf311c340355d243c04
[2] https://github.com/wikimedia/mediawiki/commit/e0aff15e348e1dd4b370e4ce544778a7591fb1a8

Event Timeline

@Ladsgroup I believe this is caused by one of your changes.

@mwjames From what I see, it's probably because the cache for change tag is not flushed between tests but the table (change_tag) got emptied. Do you do something similar in the tests?

tests but the table (change_tag) got emptied. Do you do something similar in the tests?

... and by that you mean "MediaWikiServices::getInstance()->resetServiceForTesting( 'NameTableStoreFactory' );" ?

This isn't really intuitive and only after some browsing I found [0] which suggests resetting the service to be required if I make the connection between ChangeTagDefStore, NameTableAccessException, and change_tag_def.

[0] https://github.com/wikimedia/mediawiki/commit/0ecfe75502b5a7a7224cf79531b1fd90662048cb

mwjames claimed this task.

... and by that you mean "MediaWikiServices::getInstance()->resetServiceForTesting( 'NameTableStoreFactory' );" ?

Doing so made the issue disappear [0].

[0] https://github.com/SemanticMediaWiki/SemanticMediaWiki/pull/3417

Aklapper changed the task status from Resolved to Invalid.Sep 8 2018, 10:14 AM

No code got changed in MediaWiki core hence closing task as invalid.