Page MenuHomePhabricator

Ignore duplicate key errors when creating Flow posts from LQT
Closed, ResolvedPublic

Description

It rare situations (about 1 in 1,000) it seems we try to insert a Flow revision with the same ID twice. As revision IDs contain a random seed, this means it must be the same object being inserted twice, so I'm fairly confident we will not be losing data.

Example error:

[2025-10-15 12:56:22] Wikimedia\Rdbms\DBQueryError: Error 1062: Duplicate entry '\x04\xA2\x9D\xBF\xB0\x15\x16\xCA\x7F\xFA\x90' for key 'PRIMARY'
Function: Flow\Data\Storage\RevisionStorage::insert
Query: INSERT INTO `flow_revision` (rev_id,rev_user_id,rev_user_ip,rev_user_wiki,rev_parent_id,rev_change_type,rev_type,rev_type_id,rev_content,rev_flags,rev_mod_state,rev_mod_user_id,rev_mod_user_ip,rev_mod_user_wiki,rev_mod_timestamp,rev_mod_reason,rev_last_edit_id,rev_edit_user_id,rev_edit_user_ip,rev_edit_user_wiki,rev_content_length,rev_previous_content_length) VALUES ('�������',8006,NULL,'enwiktionary',NULL,'reply','post','�������','DB://cluster30/4173353','utf-8,gzip,html,external','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,224,0),('�������',8006,NULL,'enwiktionary',NULL,'reply','post','�������','DB://cluster31/4173620','utf-8,gzip,html,external','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,224,0)
 in /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/Database.php:1225
Stack trace:
#0 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/Database.php(1209): Wikimedia\Rdbms\Database->getQueryException('Duplicate entry...', 1062, 'INSERT INTO `fl...', 'Flow\\Data\\Stora...')
#1 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/Database.php(1183): Wikimedia\Rdbms\Database->getQueryExceptionAndLog('Duplicate entry...', 1062, 'INSERT INTO `fl...', 'Flow\\Data\\Stora...')
#2 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/Database.php(640): Wikimedia\Rdbms\Database->reportQueryError('Duplicate entry...', 1062, 'INSERT INTO `fl...', 'Flow\\Data\\Stora...', false)
#3 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/Database.php(1505): Wikimedia\Rdbms\Database->query(Object(Wikimedia\Rdbms\Query), 'Flow\\Data\\Stora...')
#4 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/DBConnRef.php(127): Wikimedia\Rdbms\Database->insert('flow_revision', Array, 'Flow\\Data\\Stora...', Array)
#5 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/database/DBConnRef.php(455): Wikimedia\Rdbms\DBConnRef->__call('insert', Array)
#6 /srv/mediawiki/php-1.45.0-wmf.23/includes/libs/rdbms/querybuilder/InsertQueryBuilder.php(340): Wikimedia\Rdbms\DBConnRef->insert('flow_revision', Array, 'Flow\\Data\\Stora...', Array)
#7 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Data/Storage/RevisionStorage.php(373): Wikimedia\Rdbms\InsertQueryBuilder->execute()
#8 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Data/ObjectManager.php(248): Flow\Data\Storage\RevisionStorage->insert(Array)
#9 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Data/ObjectManager.php(173): Flow\Data\ObjectManager->insert(Array, Array)
#10 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Data/ManagerGroup.php(98): Flow\Data\ObjectManager->multiPut(Array, Array)
#11 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Data/ManagerGroup.php(107): Flow\Data\ManagerGroup->multiMethod('multiPut', Array, Array)
#12 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/PageImportState.php(117): Flow\Data\ManagerGroup->multiPut(Array, Array)
#13 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/TalkpageImportOperation.php(413): Flow\Import\PageImportState->put(Array, Array)
#14 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/TalkpageImportOperation.php(217): Flow\Import\TalkpageImportOperation->importPost(Object(Flow\Import\TopicImportState), Object(Flow\Import\LiquidThreadsApi\ImportPost), Object(Flow\Model\PostRevision))
#15 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/TalkpageImportOperation.php(131): Flow\Import\TalkpageImportOperation->importTopic(Object(Flow\Import\TopicImportState), Object(Flow\Import\LiquidThreadsApi\ImportTopic))
#16 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/Importer.php(114): Flow\Import\TalkpageImportOperation->import(Object(Flow\Import\PageImportState))
#17 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/Converter.php(215): Flow\Import\Importer->import(Object(Flow\Import\LiquidThreadsApi\ImportSource), Object(MediaWiki\Title\Title), Object(MediaWiki\User\User), Object(Flow\Import\SourceStore\FileImportSourceStore))
#18 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/Converter.php(157): Flow\Import\Converter->doConversion(Object(MediaWiki\Title\Title), Object(MediaWiki\Title\Title))
#19 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/includes/Import/Converter.php(113): Flow\Import\Converter->convert(Object(MediaWiki\Title\Title), false, false)
#20 /srv/mediawiki/php-1.45.0-wmf.23/extensions/Flow/maintenance/convertLqtPageOnLocalWiki.php(101): Flow\Import\Converter->convertAll(Array, false, false)
#21 /srv/mediawiki/php-1.45.0-wmf.23/maintenance/includes/MaintenanceRunner.php(696): Flow\Maintenance\ConvertLqtPageOnLocalWiki->execute()
#22 /srv/mediawiki/php-1.45.0-wmf.23/maintenance/run.php(53): MediaWiki\Maintenance\MaintenanceRunner->run()
#23 /srv/mediawiki/multiversion/MWScript.php(221): require_once('/srv/mediawiki/...')
#24 {main}
[2025-10-15 12:56:22] Imported 1 items, failed 1
[2025-10-15 12:56:22] Failed to complete import to Wiktionary:LiquidThreads testing from Wiktionary:LiquidThreads testing/LQT Archive 1
[2025-10-15 12:56:22] Finished LQT conversion of page Wiktionary:LiquidThreads testing/LQT Archive 1

Related Objects

StatusSubtypeAssignedTask
ResolvedNone
OpenNone
OpenNone
ResolvedTrizek-WMF
DuplicateNone
OpenNone
ResolvedTrizek-WMF
DuplicateNone
ResolvedSgs
ResolvedSgs
ResolvedTrizek-WMF
OpenNone
ResolvedMimurawil
ResolvedTchanders
In ProgressNone
OpenNone
DeclinedNone
ResolvedEsanders
OpenNone
ResolvedEsanders
ResolvedNone
ResolvedDLynch
OpenDLynch
ResolvedUrbanecm_WMF
ResolvedDLynch
ResolvedDLynch
OpenEsanders
ResolvedRyasmeen
ResolvedUrbanecm_WMF
ResolvedDLynch
ResolvedTrizek-WMF
Resolvedzoe
ResolvedRyasmeen
ResolvedBUG REPORTEtonkovidova
ResolvedTrizek-WMF
ResolvedNone
ResolvedPRODUCTION ERRORhubaishan
ResolvedTrizek-WMF
ResolvedDLynch
ResolvedTrizek-WMF
Resolvedppelberg
ResolvedQuiddity
Resolvedppelberg
Resolvedzoe
Resolvedzoe
ResolvedRyasmeen
Resolvedzoe
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
Resolvedmatmarex
OpenNone

Event Timeline

Change #1196444 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@master] LQT convert: Ignore duplicate key insert errors when command line flag set

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

Change #1196645 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] LQT convert: Ignore duplicate key insert errors when command line flag set

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

Change #1196444 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] LQT convert: Ignore duplicate key insert errors when command line flag set

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

Change #1196645 merged by jenkins-bot:

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] LQT convert: Ignore duplicate key insert errors when command line flag set

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

Mentioned in SAL (#wikimedia-operations) [2025-10-16T13:03:31Z] <esanders@deploy2002> Started scap sync-world: Backport for [[gerrit:1196645|LQT convert: Ignore duplicate key insert errors when command line flag set (T407357)]]

Mentioned in SAL (#wikimedia-operations) [2025-10-16T13:06:12Z] <esanders@deploy2002> esanders: Backport for [[gerrit:1196645|LQT convert: Ignore duplicate key insert errors when command line flag set (T407357)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-10-16T13:13:45Z] <esanders@deploy2002> Finished scap sync-world: Backport for [[gerrit:1196645|LQT convert: Ignore duplicate key insert errors when command line flag set (T407357)]] (duration: 10m 14s)

Change #1196864 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@master] Follow-up I6698875: Set insert-ignore on all insert queries

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

Change #1196864 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] Follow-up I6698875: Set insert-ignore on all insert queries

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

Change #1196884 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] Follow-up I6698875: Set insert-ignore on all insert queries

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

Change #1196884 merged by jenkins-bot:

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] Follow-up I6698875: Set insert-ignore on all insert queries

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

Mentioned in SAL (#wikimedia-operations) [2025-10-20T13:04:48Z] <esanders@deploy2002> Started scap sync-world: Backport for [[gerrit:1196884|Follow-up I6698875: Set insert-ignore on all insert queries (T407357)]]

Mentioned in SAL (#wikimedia-operations) [2025-10-20T13:30:05Z] <esanders@deploy2002> esanders: Backport for [[gerrit:1196884|Follow-up I6698875: Set insert-ignore on all insert queries (T407357)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-10-20T13:43:24Z] <esanders@deploy2002> Finished scap sync-world: Backport for [[gerrit:1196884|Follow-up I6698875: Set insert-ignore on all insert queries (T407357)]] (duration: 38m 36s)

Change #1197275 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@master] Follow-up Iedb6361: Set insert-ignore on all insertSelect queries

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

Change #1197275 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] Follow-up Iedb6361: Set insert-ignore on all insertSelect queries

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

Change #1197284 had a related patch set uploaded (by Esanders; author: Esanders):

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] Follow-up Iedb6361: Set insert-ignore on all insertSelect queries

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

Change #1197284 merged by jenkins-bot:

[mediawiki/extensions/Flow@wmf/1.45.0-wmf.23] Follow-up Iedb6361: Set insert-ignore on all insertSelect queries

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

Mentioned in SAL (#wikimedia-operations) [2025-10-21T07:10:54Z] <esanders@deploy2002> Started scap sync-world: Backport for [[gerrit:1197284|Follow-up Iedb6361: Set insert-ignore on all insertSelect queries (T407357)]]

Mentioned in SAL (#wikimedia-operations) [2025-10-21T07:15:50Z] <esanders@deploy2002> esanders: Backport for [[gerrit:1197284|Follow-up Iedb6361: Set insert-ignore on all insertSelect queries (T407357)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-10-21T07:22:39Z] <esanders@deploy2002> Finished scap sync-world: Backport for [[gerrit:1197284|Follow-up Iedb6361: Set insert-ignore on all insertSelect queries (T407357)]] (duration: 11m 45s)

Esanders claimed this task.

This has been worked around now.

The cause appears to be comments that are edited and then reverted back to their original state, creating two revisions with the same content. I tried to reproduce this locally but without success, so I will continue with the INSERT IGNORE strategy, as no real data is lost, only a tiny amount of edit history.