Fixed DuplicateKeyException: Duplicate entry 'post-123-456' for key 'content_type_id_like_user_id'

Steffen

Well-known member
Affected version
2.0.9
I think this issue is similar to the issue "DuplicateKeyException: Duplicate entry 'thread-123-456' for key 'draft_key_user'".

Code:
XF\Db\DuplicateKeyException: MySQL query error [1062]: Duplicate entry 'post-123-456' for key 'content_type_id_like_user_id' src/XF/Db/AbstractStatement.php:212
Generated by: SomeUsername Aug 30, 2018 at 12:16 PM
Stack trace
INSERT  INTO `xf_liked_content` (`content_type`, `content_id`, `like_user_id`, `content_user_id`, `is_counted`, `like_id`, `like_date`) VALUES (?, ?, ?, ?, ?, ?, ?)
------------

#0 src/XF/Db/Mysqli/Statement.php(196): XF\Db\AbstractStatement->getException('MySQL query err...', 1062, '23000')
#1 src/XF/Db/Mysqli/Statement.php(77): XF\Db\Mysqli\Statement->getException('MySQL query err...', 1062, '23000')
#2 src/XF/Db/AbstractAdapter.php(79): XF\Db\Mysqli\Statement->execute()
#3 src/XF/Db/AbstractAdapter.php(160): XF\Db\AbstractAdapter->query('INSERT  INTO `x...', Array)
#4 src/XF/Mvc/Entity/Entity.php(1389): XF\Db\AbstractAdapter->insert('xf_liked_conten...', Array, false)
#5 src/XF/Mvc/Entity/Entity.php(1121): XF\Mvc\Entity\Entity->_saveToSource()
#6 src/XF/Repository/LikedContent.php(94): XF\Mvc\Entity\Entity->save()
#7 src/XF/Repository/LikedContent.php(63): XF\Repository\LikedContent->insertLike('post', 123, Object(XF\Entity\User), true)
#8 src/XF/ControllerPlugin/Like.php(28): XF\Repository\LikedContent->toggleLike('post', 123, Object(XF\Entity\User))
#9 src/XF/Pub/Controller/Post.php(360): XF\ControllerPlugin\Like->actionToggleLike(Object(XF\Entity\Post), '/forum/posts/12...', '/forum/posts/12...', '/forum/posts/12...')
#10 src/XF/Mvc/Dispatcher.php(249): XF\Pub\Controller\Post->actionLike(Object(XF\Mvc\ParameterBag))
#11 src/XF/Mvc/Dispatcher.php(88): XF\Mvc\Dispatcher->dispatchClass('XF:Post', 'Like', 'html', Object(XF\Mvc\ParameterBag), 'forums', Object(XF\Pub\Controller\Post), NULL)
#12 src/XF/Mvc/Dispatcher.php(41): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#13 src/XF/App.php(1945): XF\Mvc\Dispatcher->run()
#14 src/XF.php(331): XF\App->run()
#15 index.php(13): XF::runApp('XF\\Pub\\App')
#16 {main}
 
We have similar errors in the log in XF1. I assume that's because we use a database replication (master/slave setup).
 
We've just logged another similar issue a few days ago (the user probably submitted two concurrent HTTP requests):

Code:
XF\Db\DuplicateKeyException: MySQL query error [1062]: Duplicate entry '2-12345' for key 'PRIMARY' src/XF/Db/AbstractStatement.php:212
Generated by: Username Sep 29, 2018 at 5:11 PM

Stack trace
INSERT  INTO `xf_user_group_promotion_log` (`promotion_id`, `user_id`, `promotion_date`, `promotion_state`) VALUES (?, ?, ?, ?)
------------

#0 src/XF/Db/Mysqli/Statement.php(196): XF\Db\AbstractStatement->getException('MySQL query err...', 1062, '23000')
#1 src/XF/Db/Mysqli/Statement.php(77): XF\Db\Mysqli\Statement->getException('MySQL query err...', 1062, '23000')
#2 src/XF/Db/AbstractAdapter.php(79): XF\Db\Mysqli\Statement->execute()
#3 src/XF/Db/AbstractAdapter.php(160): XF\Db\AbstractAdapter->query('INSERT  INTO `x...', Array)
#4 src/XF/Mvc/Entity/Entity.php(1403): XF\Db\AbstractAdapter->insert('xf_user_group_p...', Array, false)
#5 src/XF/Mvc/Entity/Entity.php(1135): XF\Mvc\Entity\Entity->_saveToSource()
#6 src/XF/Entity/UserGroupPromotion.php(44): XF\Mvc\Entity\Entity->save()
#7 src/XF/Repository/UserGroupPromotion.php(116): XF\Entity\UserGroupPromotion->promote(Object(XF\Entity\User))
#8 src/XF/Pub/App.php(169): XF\Repository\UserGroupPromotion->updatePromotionsForUser(Object(XF\Entity\User))
#9 src/XF/Pub/App.php(122): XF\Pub\App->updateUserCaches()
#10 src/XF/App.php(1941): XF\Pub\App->start(true)
#11 src/XF.php(332): XF\App->run()
#12 index.php(13): XF::runApp('XF\\Pub\\App')
#13 {main}

@nocte These errors got logged by our database master, so I don't think they are caused by replication.
 
Note that we have accounted for the race condition with reactions in 2.1. Otherwise, it can generally be ignored.

Other cases may have to be handled on an individual basis, though this is the only time I recall seeing a promotion related one. (I suppose it's more likely if you have custom criteria that takes time to calculate.)
 
Top Bottom