-
-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Closed
Description
Symfony version(s) affected: 5.3 (possibly earlier)
Description
We use symfony-messenger
with multiple workers handling messages from the same queue using DoctrineTransport
with a mysql database. When the workers are being utilized fully, a deadlock occasionally occurs when removing a message from the queue.
How to reproduce
Define a simple queue:
# config/packages/messenger.yaml
framework:
messenger:
transports:
default:
dsn: "%env(MESSENGER_TRANSPORT_DSN)%"
retry_strategy:
max_retries: 10
delay: 60000
multiplier: 1
Run multiple workers (3 in our case) handling the same queue:
bin/console messenger:consume default --limit=200 --time-limit=3600 --memory-limit=64M
If a lot of messages are handled causing the workers to run full-time, sometimes the exception in the stacktrace below is thrown.
Additional context
Stacktrace:
Symfony\Component\Messenger\Exception\TransportException: An exception occurred while executing 'DELETE FROM messenger_messages WHERE id = ?' with params ["26628"]:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
#12 /vendor/symfony/doctrine-messenger/Transport/Connection.php(238): Symfony\Component\Messenger\Bridge\Doctrine\Transport\Connection::reject
#11 /vendor/symfony/doctrine-messenger/Transport/DoctrineReceiver.php(91): Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineReceiver::reject
#10 /vendor/symfony/doctrine-messenger/Transport/DoctrineTransport.php(61): Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport::reject
#9 /vendor/symfony/messenger/Worker.php(132): Symfony\Component\Messenger\Worker::handleMessage
#8 /vendor/symfony/messenger/Worker.php(77): Symfony\Component\Messenger\Worker::run
#7 /vendor/symfony/messenger/Command/ConsumeMessagesCommand.php(198): Symfony\Component\Messenger\Command\ConsumeMessagesCommand::execute
#6 /vendor/symfony/console/Command/Command.php(256): Symfony\Component\Console\Command\Command::run
#5 /vendor/symfony/console/Application.php(989): Symfony\Component\Console\Application::doRunCommand
#4 /vendor/symfony/framework-bundle/Console/Application.php(96): Symfony\Bundle\FrameworkBundle\Console\Application::doRunCommand
#3 /vendor/symfony/console/Application.php(290): Symfony\Component\Console\Application::doRun
#2 /vendor/symfony/framework-bundle/Console/Application.php(82): Symfony\Bundle\FrameworkBundle\Console\Application::doRun
#1 /vendor/symfony/console/Application.php(166): Symfony\Component\Console\Application::run
#0 /bin/console(43): null
This could be related to #39041.
sjadema, jnbeaver, francoispienaar, weph, Vaalyn and 1 moresjadema and jeroennoten