Skip to content

Deadlock when deleting messages from queue #41541

@danielkoster

Description

@danielkoster

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions