```
MediaWiki 1.30.0-alpha (3d26a96)
PHP 7.1.1 (apache2handler)
MariaDB 10.1.21-MariaDB
ICU 57.1
```
```
[Bug56269] Exception thrown with an uncommited database transaction: [d8d3f093942c3e9b92a83e61] /mw-master/index.php/Special:Browse/:Recurring-5Fevents-2F41 Wikimedia\Rdbms\DBTransactionError from line 200 of ...\includes\libs\rdbms\lbfactory\LBFactory.php: MWCallableUpdate::doUpdate: transaction round 'SMW\MediaWiki\Jobs\UpdateJob::run' already started.
#0 ...\includes\deferred\DeferredUpdates.php(265): Wikimedia\Rdbms\LBFactory->beginMasterChanges(string)
#1 ...\includes\deferred\DeferredUpdates.php(228): DeferredUpdates::runUpdate(MWCallableUpdate, Wikimedia\Rdbms\LBFactorySimple, integer)
#2 ...\includes\deferred\DeferredUpdates.php(136): DeferredUpdates::execute(array, string, integer)
#3 ...\includes\deferred\DeferredUpdates.php(95): DeferredUpdates::doUpdates(string)
#4 ...\includes\deferred\DeferredUpdates.php(119): DeferredUpdates::addUpdate(MWCallableUpdate, integer)
#5 ...\includes\libs\objectcache\BagOStuff.php(216): DeferredUpdates::addCallableUpdate(Closure)
#6 ...\includes\libs\objectcache\BagOStuff.php(183): BagOStuff->trackDuplicateKeys(string)
#7 ...\includes\parser\Preprocessor.php(110): BagOStuff->get(string)
#8 ...\includes\parser\Preprocessor_DOM.php(152): Preprocessor->cacheGetTree(string, integer)
#9 ...\includes\parser\Parser.php(2889): Preprocessor_DOM->preprocessToObj(string, integer)
#10 ...\includes\parser\Parser.php(4121): Parser->preprocessToDom(string)
#11 ...\includes\parser\Parser.php(1339): Parser->formatHeadings(string, string, boolean)
#12 ...\includes\parser\Parser.php(451): Parser->internalParse(string)
#13 ...\includes\content\WikitextContent.php(330): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)
#14 ...\includes\content\AbstractContent.php(497): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput)
#15 ...\extensions\SemanticMediaWiki\includes\ContentParser.php(203): AbstractContent->getParserOutput(Title, integer, ParserOptions, boolean)
#16 ...\extensions\SemanticMediaWiki\includes\ContentParser.php(156): SMW\ContentParser->fetchFromContent()
#17 ...\extensions\SemanticMediaWiki\src\MediaWiki\Jobs\UpdateJob.php(139): SMW\ContentParser->parse()
#18 ...\extensions\SemanticMediaWiki\src\MediaWiki\Jobs\UpdateJob.php(112): SMW\MediaWiki\Jobs\UpdateJob->needToParsePageContentBeforeUpdate()
#19 ...\extensions\SemanticMediaWiki\src\MediaWiki\Jobs\UpdateJob.php(80): SMW\MediaWiki\Jobs\UpdateJob->doPrepareForUpdate()
#20 ...\extensions\SemanticMediaWiki\src\MediaWiki\Jobs\UpdateJob.php(61): SMW\MediaWiki\Jobs\UpdateJob->doUpdate()
#21 ...\includes\jobqueue\JobRunner.php(289): SMW\MediaWiki\Jobs\UpdateJob->run()
#22 ...\includes\jobqueue\JobRunner.php(189): JobRunner->executeJob(SMW\MediaWiki\Jobs\UpdateJob, Wikimedia\Rdbms\LBFactorySimple, BufferingStatsdDataFactory, integer)
#23 ...\includes\MediaWiki.php(973): JobRunner->run(array)
#24 ...\includes\MediaWiki.php(959): MediaWiki->triggerSyncJobs(integer, MediaWiki\Logger\LegacyLogger)
#25 ...\includes\MediaWiki.php(911): MediaWiki->triggerJobs()
#26 ...\includes\MediaWiki.php(731): MediaWiki->restInPeace(string)
#27 ...\includes\MediaWiki.php(750): MediaWiki->{closure}()
#28 ...\includes\MediaWiki.php(554): MediaWiki->doPostOutputShutdown(string)
#29 ...\index.php(43): MediaWiki->run()
```
## Issue
The issue appears with `BagOStuff::trackDuplicateKeys` invoking `DeferredUpdates::addCallableUpdate` while a job is active and causes a "MWCallableUpdate::doUpdate: transaction round 'SMW\MediaWiki\Jobs\UpdateJob::run' already started."
... and before someone (as it has been so in the past) to declare this to be a SMW issue and closes the issue before investigating, here is an example that doesn't involved SMW at all.
```
[Bug56269] Exception thrown with an uncommited database transaction: [dcf60ceb63f75441b711c08b] /mw-master/index.php?search=Lorem%20ipsum-1d&title=Special%3ASearch Wikimedia\Rdbms\DBTransactionError from line 200 of ...\includes\libs\rdbms\lbfactory\LBFactory.php: MWCallableUpdate::doUpdate: transaction round 'RefreshLinksJob::run' already started.
#0 ...\includes\deferred\DeferredUpdates.php(265): Wikimedia\Rdbms\LBFactory->beginMasterChanges(string)
#1 ...\includes\deferred\DeferredUpdates.php(228): DeferredUpdates::runUpdate(MWCallableUpdate, Wikimedia\Rdbms\LBFactorySimple, integer)
#2 ...\includes\deferred\DeferredUpdates.php(136): DeferredUpdates::execute(array, string, integer)
#3 ...\includes\deferred\DeferredUpdates.php(95): DeferredUpdates::doUpdates(string)
#4 ...\includes\deferred\DeferredUpdates.php(119): DeferredUpdates::addUpdate(MWCallableUpdate, integer)
#5 ...\includes\libs\objectcache\BagOStuff.php(216): DeferredUpdates::addCallableUpdate(Closure)
#6 ...\includes\libs\objectcache\BagOStuff.php(183): BagOStuff->trackDuplicateKeys(string)
#7 ...\includes\parser\Preprocessor.php(110): BagOStuff->get(string)
#8 ...\includes\parser\Preprocessor_DOM.php(152): Preprocessor->cacheGetTree(string, integer)
#9 ...\includes\parser\Parser.php(2889): Preprocessor_DOM->preprocessToObj(string, integer)
#10 ...\includes\parser\Parser.php(4121): Parser->preprocessToDom(string)
#11 ...\includes\parser\Parser.php(1339): Parser->formatHeadings(string, string, boolean)
#12 ...\includes\parser\Parser.php(451): Parser->internalParse(string)
#13 ...\includes\StubObject.php(113): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)
#14 ...\includes\StubObject.php(139): StubObject->_call(string, array)
#15 ...\includes\content\WikitextContent.php(330): StubObject->__call(string, array)
#16 ...\includes\content\AbstractContent.php(497): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput)
#17 ...\includes\jobqueue\jobs\RefreshLinksJob.php(227): AbstractContent->getParserOutput(Title, integer, ParserOptions, boolean)
#18 ...\includes\jobqueue\jobs\RefreshLinksJob.php(122): RefreshLinksJob->runForTitle(Title)
#19 ...\includes\jobqueue\JobRunner.php(289): RefreshLinksJob->run()
#20 ...\includes\jobqueue\JobRunner.php(189): JobRunner->executeJob(RefreshLinksJob, Wikimedia\Rdbms\LBFactorySimple, BufferingStatsdDataFactory, integer)
#21 ...\includes\MediaWiki.php(973): JobRunner->run(array)
#22 ...\includes\MediaWiki.php(959): MediaWiki->triggerSyncJobs(integer, MediaWiki\Logger\LegacyLogger)
#23 ...\includes\MediaWiki.php(911): MediaWiki->triggerJobs()
#24 ...\includes\MediaWiki.php(731): MediaWiki->restInPeace(string)
#25 ...\includes\MediaWiki.php(750): MediaWiki->{closure}()
#26 ...\includes\MediaWiki.php(554): MediaWiki->doPostOutputShutdown(string)
#27 ...\index.php(43): MediaWiki->run()
```