Page MenuHomePhabricator

DBQueryError: Duplicate for key 'PRIMARY' in Function: MediaWiki\Extension\AbuseFilter\FilterStore::doSaveFilter
Closed, DeclinedPublicPRODUCTION ERROR

Description

Error
normalized_message
[{reqId}] {exception_url}   Wikimedia\Rdbms\DBQueryError: Error 1062: Duplicate entry '4' for key 'PRIMARY' (db1157)
Function: MediaWiki\Extension\AbuseFilter\FilterStore::doSaveFilter
Query: INSERT INTO `abuse_filter` (af_id,af_pattern,af_public_comments
exception.trace
from /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(1803)
#0 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(1787): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string)
#1 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(1761): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string)
#2 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(1310): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#3 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(2549): Wikimedia\Rdbms\Database->query(string, string, integer)
#4 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/Database.php(3574): Wikimedia\Rdbms\Database->doInsert(string, array, string)
#5 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/DBConnRef.php(69): Wikimedia\Rdbms\Database->replace(string, string, array, string)
#6 /srv/mediawiki/php-1.38.0-wmf.20/includes/libs/rdbms/database/DBConnRef.php(508): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#7 /srv/mediawiki/php-1.38.0-wmf.20/extensions/AbuseFilter/includes/FilterStore.php(148): Wikimedia\Rdbms\DBConnRef->replace(string, string, array, string)
#8 /srv/mediawiki/php-1.38.0-wmf.20/extensions/AbuseFilter/includes/FilterStore.php(108): MediaWiki\Extension\AbuseFilter\FilterStore->doSaveFilter(User, MediaWiki\Extension\AbuseFilter\Filter\MutableFilter, array, NULL, boolean)
#9 /srv/mediawiki/php-1.38.0-wmf.20/extensions/AbuseFilter/includes/View/AbuseFilterViewEdit.php(204): MediaWiki\Extension\AbuseFilter\FilterStore->saveFilter(User, NULL, MediaWiki\Extension\AbuseFilter\Filter\MutableFilter, MediaWiki\Extension\AbuseFilter\Filter\MutableFilter)
#10 /srv/mediawiki/php-1.38.0-wmf.20/extensions/AbuseFilter/includes/View/AbuseFilterViewEdit.php(155): MediaWiki\Extension\AbuseFilter\View\AbuseFilterViewEdit->attemptSave(NULL, NULL)
#11 /srv/mediawiki/php-1.38.0-wmf.20/extensions/AbuseFilter/includes/Special/SpecialAbuseFilter.php(166): MediaWiki\Extension\AbuseFilter\View\AbuseFilterViewEdit->show()
#12 /srv/mediawiki/php-1.38.0-wmf.20/includes/specialpage/SpecialPage.php(671): MediaWiki\Extension\AbuseFilter\Special\SpecialAbuseFilter->execute(string)
#13 /srv/mediawiki/php-1.38.0-wmf.20/includes/specialpage/SpecialPageFactory.php(1378): SpecialPage->run(string)
#14 /srv/mediawiki/php-1.38.0-wmf.20/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext)
#15 /srv/mediawiki/php-1.38.0-wmf.20/includes/MediaWiki.php(903): MediaWiki->performRequest()
#16 /srv/mediawiki/php-1.38.0-wmf.20/includes/MediaWiki.php(563): MediaWiki->main()
#17 /srv/mediawiki/php-1.38.0-wmf.20/index.php(53): MediaWiki->run()
#18 /srv/mediawiki/php-1.38.0-wmf.20/index.php(46): wfIndexMain()
#19 /srv/mediawiki/w/index.php(3): require(string)
#20 {main}
Notes

There was a burst of these recently. All from db1157. The primary key value ranged from 4-8.

Details

MediaWiki Version
1.38.0-wmf.20
Request URL
https://hy.wikipedia.org/wiki/Special:AbuseFilter/new

Event Timeline

Krinkle renamed this task from Wikimedia\Rdbms\DBQueryError: Error 1062: Duplicate entry '4' for key 'PRIMARY' (db1157)Function: MediaWiki\Extension\AbuseFilter\FilterStore::doSaveFilterQuery: INSERT INTO `abuse_filter` (af_id,af_pattern,af_public_comments,af_comments,af_group,af_actions,af_enabled,af_deleted,af_hidden,af_global,af_user,af_user_text,af_timestamp,af_hit_count,af_throttled) VALUES (NULL,'user_age==0 \r\n& (added_lines contains \"stub}}\" | added_lines contains \"անավարտ}}\")','Չգրանցված մասնակիցը ավելացնում է անավարտ կաղապարներ','02/03/2022 ամսից ավել է Ինդոնեզիայից չգրացված մասնակից, ում հետ անհնար է դուրս գալ կապի, լեզվի չիմացության և հասցեի փոփոխման պատճառով ավելացնում է «անավարտ» կաղապարներ։ Շատ դեպքերում դա օգտակար է, սակայն երբեմն ավելացնում է սխալ կաղապարներ, ավելացնում է բավականին ծավալուն հոդվածներում, կամ ավելացնում է այլ կաղապարներ, օրինակ {{Bot}} կաղապար հոդվածում։ Ամիսներ անց կանոնը կարելի է անջատել։ --Xelgen','default','disallow',1,0,0,0,152,'Xelgen','20220203201920',0,0) to DBQueryError: Duplicate for key 'PRIMARY' in Function: MediaWiki\Extension\AbuseFilter\FilterStore::doSaveFilter.Feb 3 2022, 9:48 PM
Krinkle changed Request URL from https://hy.wikipedia.org/wiki/%D5%8D%D5%BA%D5%A1%D5%BD%D5%A1%D6%80%D5%AF%D5%B8%D5%B2:AbuseFilter/new to https://hy.wikipedia.org/wiki/Special:AbuseFilter/new.
Daimona subscribed.

FTR, the full MySQL error is:

Error 1062 from MediaWiki\Extension\AbuseFilter\FilterStore::doSaveFilter, Duplicate entry '4' for key 'PRIMARY' (db1157) INSERT INTO `abuse_filter` (af_id,af_pattern,af_public_comments,af_comments,af_group,af_actions,af_enabled,af_deleted,af_hidden,af_global,af_user,af_user_text,af_timestamp,af_hit_count,af_throttled) VALUES (NULL,'XXX','XXX','XXX','default','XXX',1,0,0,0,XXX,'XXX','20220203201920',0,0)

I've stripped a few columns mostly to make it more readable, since the filter is public and the message was previously published anyway. That said, I have absolutely no idea how this could've happened. The primary key is af_id and it has auto_increment; the query here inserts af_id=NULL, so it should just create a new row. Also, the relevant AF code hasn't been touched in months. Perhaps it's something related to that specific database? Tagging DBA in case they know more.

It seems it's only on hywiki and only in specific time https://logstash.wikimedia.org/goto/3a64f6a2e1da3ed60c7ebfbb479189b9 I will look into this later but It's very likely a code issue.

Marostegui triaged this task as Medium priority.Feb 8 2022, 6:01 AM
Marostegui moved this task from Triage to Pending comment on the DBA board.

The primary key value ranged from 4-8.

According to Special:AbuseFilter - https://hy.wikipedia.org/wiki/Special:AbuseFilter?uselang=en - there are 12 filters

What is the current value for the auto increment value?

Not sure if, if it needs fixing:

ALTER TABLE abuse_filter AUTO_INCREMENT = 13;

it's 13 already (in a replica and master I checked):

wikiadmin@10.64.48.58(hywiki)> SELECT `AUTO_INCREMENT`
    -> FROM  INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_SCHEMA = 'hywiki'
    -> AND   TABLE_NAME   = 'abuse_filter';
+----------------+
| AUTO_INCREMENT |
+----------------+
|             13 |
+----------------+
1 row in set (0.001 sec)

wikiadmin@10.64.0.44(hywiki)> SELECT `AUTO_INCREMENT`
    -> FROM  INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_SCHEMA = 'hywiki'
    -> AND   TABLE_NAME   = 'abuse_filter';
+----------------+
| AUTO_INCREMENT |
+----------------+
|             13 |
+----------------+
1 row in set (0.001 sec)

Then it repairs itself. The filter numbers 9-12 are added in the last few days and results in the value 13 for the auto-increment.

https://hy.wikipedia.org/w/index.php?title=Special:Log&type=abusefilter&subtype=create&uselang=en

Not sure it is possible to find the root cause for this or if the other abuse_filter tables should be checked, to prevent the same issue on other wiki.

Yes. It looks like a one-time thing. Let's reopen if it happens again.