List of steps to reproduce (step by step, including full links if applicable):
- we use the mw javascript api to lazy-load expensive template calls that contain {{#cargo_query}} calls (see below)
- i dont know how to reproduce the issue with a minimal code example, because i dont know how cargo backlinks work
- the js example below works fine and does not cause the error; when i debug CargoBackLinks::setBackLinks, the resultsPageIds param is an empty array
- the js example was tested on a WikiPage in the main namespace with wikitext Blabla
What happens?:
the fastest xhr request suceeds, all remaining fail with deadlock errors
What should have happened instead?:
all xhr requests suceed
stacktrace
2022-05-12 10:13:21 webmo webmo_webmo: [385926f1d9b1cfdff571c080] /api.php Wikimedia\Rdbms\DBQueryError: Error 1213: Deadlock found when trying to get lock; try restarting transaction (db:3306) Function: Wikimedia\Rdbms\Database::insert Query: INSERT INTO `cargo_backlinks` (cbl_query_page_id,cbl_result_page_id) VALUES (305,'318') #0 /var/www/mediawiki/includes/libs/rdbms/database/Database.php(1590): Wikimedia\Rdbms\Database->getQueryException() #1 /var/www/mediawiki/includes/libs/rdbms/database/Database.php(1564): Wikimedia\Rdbms\Database->getQueryExceptionAndLog() #2 /var/www/mediawiki/includes/libs/rdbms/database/Database.php(1173): Wikimedia\Rdbms\Database->reportQueryError() #3 /var/www/mediawiki/includes/libs/rdbms/database/Database.php(2352): Wikimedia\Rdbms\Database->query() #4 /var/www/mediawiki/includes/libs/rdbms/database/Database.php(2332): Wikimedia\Rdbms\Database->doInsert() #5 /var/www/mediawiki/includes/libs/rdbms/database/DBConnRef.php(69): Wikimedia\Rdbms\Database->insert() #6 /var/www/mediawiki/includes/libs/rdbms/database/DBConnRef.php(375): Wikimedia\Rdbms\DBConnRef->__call() #7 /var/www/mediawiki/extensions/Cargo/includes/CargoBackLinks.php(50): Wikimedia\Rdbms\DBConnRef->insert() #8 /var/www/mediawiki/extensions/Cargo/includes/parserfunctions/CargoQuery.php(176): CargoBackLinks::setBackLinks() #9 /var/www/mediawiki/includes/parser/Parser.php(3413): CargoQuery::run() #10 /var/www/mediawiki/includes/parser/Parser.php(3096): Parser->callParserFunction() ...
js example
function parse(parseString) { var api = new mw.Api(); api.parse(parseString, { title: mw.config.values.wgTitle }) .done( function (data) { console.log(data); }) .fail( function(err) { console.error(err); }); } var parseString = "{{#cargo_query:tables=my_table}}" parse(parseString); parse(parseString); parse(parseString);