Page MenuHomePhabricator

Database deadlock in Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsIntoMaster query
Open, LowPublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   Wikimedia\Rdbms\DBQueryError: Error 1213: Deadlock found when trying to get lock; try restarting transaction (db1104)
Function: Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsInto
exception.trace
from /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(1759)
#0 /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(1743): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string)
#1 /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(1718): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string)
#2 /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(1282): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#3 /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(2423): Wikimedia\Rdbms\Database->query(string, string, integer)
#4 /srv/mediawiki/php-1.37.0-wmf.6/includes/libs/rdbms/database/Database.php(2383): Wikimedia\Rdbms\Database->doInsertNonConflicting(string, array, string)
#5 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/Util/ReplicaMasterAwareRecordIdsAcquirer.php(318): Wikimedia\Rdbms\Database->insert(string, array, string, array)
#6 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/Util/ReplicaMasterAwareRecordIdsAcquirer.php(181): Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer->insertNonExistingRecordsIntoMaster(array)
#7 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/Util/ReplicaMasterAwareRecordIdsAcquirer.php(131): Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer->insertNonExistingRecords(array, NULL)
#8 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermInLangIdsAcquirer.php(253): Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer->acquireIds(array)
#9 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermInLangIdsAcquirer.php(225): Wikibase\Lib\Store\Sql\Terms\DatabaseTermInLangIdsAcquirer->acquireTextInLangIds(array, Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer)
#10 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermInLangIdsAcquirer.php(417): Wikibase\Lib\Store\Sql\Terms\DatabaseTermInLangIdsAcquirer->mapToTextInLangIds(array, Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer)
#11 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermInLangIdsAcquirer.php(62): Wikibase\Lib\Store\Sql\Terms\DatabaseTermInLangIdsAcquirer->mapTermsArrayToTermIds(array)
#12 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermStoreWriterBase.php(155): Wikibase\Lib\Store\Sql\Terms\DatabaseTermInLangIdsAcquirer->acquireTermInLangIds(array, Closure)
#13 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseTermStoreWriterBase.php(62): Wikibase\Lib\Store\Sql\Terms\DatabaseTermStoreWriterBase->acquireAndInsertTerms(Wikibase\DataModel\Entity\ItemId, Wikibase\DataModel\Term\Fingerprint)
#14 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/Sql/Terms/DatabaseItemTermStoreWriter.php(23): Wikibase\Lib\Store\Sql\Terms\DatabaseTermStoreWriterBase->store(Wikibase\DataModel\Entity\ItemId, Wikibase\DataModel\Term\Fingerprint)
#15 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/lib/includes/Store/ItemTermStoreWriterAdapter.php(32): Wikibase\Lib\Store\Sql\Terms\DatabaseItemTermStoreWriter->storeTerms(Wikibase\DataModel\Entity\ItemId, Wikibase\DataModel\Term\Fingerprint)
#16 /srv/mediawiki/php-1.37.0-wmf.6/extensions/Wikibase/repo/includes/Content/DataUpdateAdapter.php(60): Wikibase\Lib\Store\ItemTermStoreWriterAdapter->saveTermsOfEntity(Wikibase\DataModel\Entity\Item)
#17 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdates.php(513): Wikibase\Repo\Content\DataUpdateAdapter->doUpdate()
#18 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/RefreshSecondaryDataUpdate.php(101): DeferredUpdates::attemptUpdate(Wikibase\Repo\Content\DataUpdateAdapter, Wikimedia\Rdbms\LBFactoryMulti)
#19 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdates.php(513): RefreshSecondaryDataUpdate->doUpdate()
#20 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdates.php(390): DeferredUpdates::attemptUpdate(RefreshSecondaryDataUpdate, Wikimedia\Rdbms\LBFactoryMulti)
#21 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdates.php(221): DeferredUpdates::run(RefreshSecondaryDataUpdate, Wikimedia\Rdbms\LBFactoryMulti, Monolog\Logger, BufferingStatsdDataFactory, string)
#22 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdatesScope.php(264): DeferredUpdates::{closure}(RefreshSecondaryDataUpdate, integer)
#23 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdatesScope.php(196): DeferredUpdatesScope->processStageQueue(integer, integer, Closure)
#24 /srv/mediawiki/php-1.37.0-wmf.6/includes/deferred/DeferredUpdates.php(242): DeferredUpdatesScope->processUpdates(integer, Closure)
#25 /srv/mediawiki/php-1.37.0-wmf.6/includes/MediaWiki.php(1128): DeferredUpdates::doUpdates(string)
#26 /srv/mediawiki/php-1.37.0-wmf.6/includes/MediaWiki.php(838): MediaWiki->restInPeace()
#27 /srv/mediawiki/php-1.37.0-wmf.6/api.php(125): MediaWiki->doPostOutputShutdown()
#28 /srv/mediawiki/php-1.37.0-wmf.6/api.php(45): wfApiMain()
#29 /srv/mediawiki/w/api.php(3): require(string)
#30 {main}
Impact
  • Happening at a low volume (35 in a few weeks)
  • started happening in 1.37.0-wmf.5
Notes

Details

Request URL
https://www.wikidata.org/w/api.php

Event Timeline

I think this might not actually be a new error?

It certainly looks new when searching for ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsInto (all screenshots are since 2021-04-20 00:00:00, i.e. covering some 30 days):

Screenshot_2021-05-20 mediawiki-errors - Elastic.png (154×660 px, 6 KB)

But if we search for ReplicaMasterAwareRecordIdsAcquirer instead the picture looks rather different:

Screenshot_2021-05-20 mediawiki-errors - Elastic.png (154×660 px, 7 KB)

And in fact the method name is insertNonExistingRecordsIntoMaster (todo rename, voice and tone), and if we search for ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsIntoMaster:

Screenshot_2021-05-20 mediawiki-errors - Elastic.png (154×660 px, 7 KB)

I’m not sure why the few insertNonExistingRecordsInto don’t seem to show up in that last screenshot – but anyways, deadlocks while acquiring terms in the Wikibase term store are not a new issue as far as I can tell, something has just caused the method name to sometimes be truncated (dropping the last word) starting with wmf.5.

Though I can’t seem to find any open task for these deadlocks in the term store, so this isn’t a duplicate issue either.

Krinkle renamed this task from Wikimedia\Rdbms\DBQueryError: Error 1213: Deadlock found when trying to get lock; try restarting transaction (db1104) Function: Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsIntoMaster Query: INSERT IGNORE INTO `wbt_text_in_lang` (wbxl_text_id,wbxl_language) VALUES ('####'y,'es'),('####x','fr') to Database deadlock in Wikibase\Lib\Store\Sql\Terms\Util\ReplicaMasterAwareRecordIdsAcquirer::insertNonExistingRecordsIntoMaster query.Oct 27 2021, 6:36 PM

As the data stored in the database are from parsing a page (via SecondaryDataUpdates), the fixes for T355877: [CLIENT] Investigate potential references to wrong ParserOutput in WikibaseClient code could be fix this as well.