Whilst preparing an unrelated deployment and testing something on nl.wikipedia.org, I noticed the following warning in the application logs:
Expectation (writes <=) 0 by MediaWiki::main not met (actual: {actual}) in trx #831889b42a:
query-m: INSERT /* MediaWiki\User\UserOptionsManager::saveOptionsInternal */ IGNORE INTO `user_properties` (up_user,up_property,up_value) VALUES (N,'X')#8 /srv/mediawiki/php-1.38.0-wmf.22/includes/user/UserOptionsManager.php(465): Wikimedia\Rdbms\DBConnRef->insert(string, array, string, array) #9 /srv/mediawiki/php-1.38.0-wmf.22/includes/user/UserOptionsManager.php(390): MediaWiki\User\UserOptionsManager->saveOptionsInternal(User, Wikimedia\Rdbms\DBConnRef) #10 /srv/mediawiki/php-1.38.0-wmf.22/extensions/DiscussionTools/includes/Hooks/HookUtils.php(185): MediaWiki\User\UserOptionsManager->saveOptions(User) #11 /srv/mediawiki/php-1.38.0-wmf.22/extensions/DiscussionTools/includes/Hooks/HookUtils.php(106): MediaWiki\Extension\DiscussionTools\Hooks\HookUtils::determineUserABTestBucket(User, string) #12 /srv/mediawiki/php-1.38.0-wmf.22/extensions/DiscussionTools/includes/Hooks/PreferenceHooks.php(79): MediaWiki\Extension\DiscussionTools\Hooks\HookUtils::isFeatureAvailableToUser(User, string) #13 /srv/mediawiki/php-1.38.0-wmf.22/includes/HookContainer/HookContainer.php(160): MediaWiki\Extension\DiscussionTools\Hooks\PreferenceHooks->onGetPreferences(User, array) #14 /srv/mediawiki/php-1.38.0-wmf.22/includes/HookContainer/HookRunner.php(1913): MediaWiki\HookContainer\HookContainer->run(string, array) #15 /srv/mediawiki/php-1.38.0-wmf.22/includes/preferences/DefaultPreferencesFactory.php(249): MediaWiki\HookContainer\HookRunner->onGetPreferences(User, array)
Source: DiscussionTools.git:HookUtils.php#165
$optionsManager->setOption( $user, 'discussiontools-abtest2', $abstate ); $optionsManager->saveOptions( $user );
Impact
The code is synchronously writing to the database regardless of request context. This violates DBPerformance restrictions and is incompatible with performance and multi-dc constraints.
I'd consider it high priority to be written a different way. I don't know if this is intended to go to other wikis, but I'd also consider this a blocker for wider enablement of $wgDiscussionToolsABTest, which I believe to be controlling this particular code.
Consider reviewing how other extensions use this core API (Codesearch). If a viable pattern isn't available or clear, I'm happy to help find or create one.
