Page MenuHomePhabricator

[{reqId}] {exception_url} UnexpectedValueException: Wikimedia\Rdbms\InsertQueryBuilder::execute can't have empty $rows value (via UserAgentClientHintsManager)
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
message
[{reqId}] {exception_url}   UnexpectedValueException: Wikimedia\Rdbms\InsertQueryBuilder::execute can't have empty $rows value
trace
from /srv/mediawiki/php-1.41.0-wmf.23/includes/libs/rdbms/querybuilder/InsertQueryBuilder.php(206)
#0 /srv/mediawiki/php-1.41.0-wmf.23/extensions/CheckUser/src/Services/UserAgentClientHintsManager.php(171): Wikimedia\Rdbms\InsertQueryBuilder->execute()
#1 /srv/mediawiki/php-1.41.0-wmf.23/extensions/CheckUser/src/Services/UserAgentClientHintsManager.php(105): MediaWiki\CheckUser\Services\UserAgentClientHintsManager->insertMappingRows(MediaWiki\CheckUser\ClientHints\ClientHintsData, integer, string, boolean)
#2 /srv/mediawiki/php-1.41.0-wmf.23/extensions/CheckUser/src/Api/Rest/Handler/UserAgentClientHintsHandler.php(94): MediaWiki\CheckUser\Services\UserAgentClientHintsManager->insertClientHintValues(MediaWiki\CheckUser\ClientHints\ClientHintsData, integer, string)
#3 /srv/mediawiki/php-1.41.0-wmf.23/includes/Rest/SimpleHandler.php(38): MediaWiki\CheckUser\Api\Rest\Handler\UserAgentClientHintsHandler->run(string, integer)
#4 /srv/mediawiki/php-1.41.0-wmf.23/includes/Rest/Router.php(517): MediaWiki\Rest\SimpleHandler->execute()
#5 /srv/mediawiki/php-1.41.0-wmf.23/includes/Rest/Router.php(422): MediaWiki\Rest\Router->executeHandler(MediaWiki\CheckUser\Api\Rest\Handler\UserAgentClientHintsHandler)
#6 /srv/mediawiki/php-1.41.0-wmf.23/includes/Rest/EntryPoint.php(195): MediaWiki\Rest\Router->execute(MediaWiki\Rest\RequestFromGlobals)
#7 /srv/mediawiki/php-1.41.0-wmf.23/includes/Rest/EntryPoint.php(135): MediaWiki\Rest\EntryPoint->execute()
#8 /srv/mediawiki/php-1.41.0-wmf.23/rest.php(31): MediaWiki\Rest\EntryPoint::main()
#9 /srv/mediawiki/w/rest.php(3): require(string)
#10 {main}
Impact

Caused by users submitting no Client Hints data in the API request.

Impact is limited and no data is lost by the exception occurring as no data was submitted.

Notes

Can be simulated by providing a body to the POST request of the empty dictionary.

Event Timeline

Change 952018 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] clienthints: Return early on no DB rows in ::insertClientHintValues

https://gerrit.wikimedia.org/r/952018

Suggested QA steps:

  • Make an edit using Chrome with the network tab open
  • Right click on the API request to the client hints API (should be the item with the integer title) and click on "Copy as fetch"
  • Using the same account, make an edit on Firefox
  • Paste the fetch command into the Firefox console
  • Modify the command so that the body argument is defined as {}
  • Run the command
  • Ensure that the API request returns a 200 (and not a 500).

Change 952018 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] clienthints: Return early on no DB rows in ::insertClientHintValues

https://gerrit.wikimedia.org/r/952018

dom_walden subscribed.

I no longer see an error when making a client hint request with {}.

Test environment: local docker CheckUser 2.5 (9ed2b65) 18:12, 29 August 2023.

Umherirrender renamed this task from [{reqId}] {exception_url} UnexpectedValueException: Wikimedia\Rdbms\InsertQueryBuilder::execute can't have empty $rows value to [{reqId}] {exception_url} UnexpectedValueException: Wikimedia\Rdbms\InsertQueryBuilder::execute can't have empty $rows value (via UserAgentClientHintsManager).May 7 2024, 6:26 PM
Umherirrender subscribed.

Seeing a spike in these errors on jobrunner hosts today.

The error message is a bit generic, so not every exception is related to this bug, I have created T364251 to help with that in logstash.