nowo-tech/doctrine-deadlock-retry-bundle

Symfony bundle that retries Doctrine flush and custom operations on DBAL deadlock exceptions with configurable profiles.

Maintainers

Package info

github.com/nowo-tech/DoctrineDeadlockRetryBundle

Documentation

Type:symfony-bundle

pkg:composer/nowo-tech/doctrine-deadlock-retry-bundle

Fund package maintenance!

HecFranco

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 1

v2.0.0 2026-06-11 12:15 UTC

This package is auto-updated.

Last update: 2026-06-11 12:17:34 UTC


README

CI Packagist Version Packagist Downloads License PHP Symfony

Found this useful? Install from Packagist and give it a star on GitHub.

Symfony bundle that retries EntityManager::flush() and custom operations when Doctrine DBAL raises a deadlock (SQLSTATE[40001], MySQL error 1213).

Features

  • DeadlockRetryService: flush(?string $profile) and retry(callable $operation, ?string $profile).
  • Named profiles: configure max_retries, sleep_ms, and rollback_on_deadlock per use case.
  • Default profile: used when no profile name is passed.
  • Detects DeadlockException and related driver errors in the exception chain.

Documentation

Additional documentation

Quick example

use Nowo\DoctrineDeadlockRetryBundle\Service\DeadlockRetryService;

public function __construct(
    private readonly DeadlockRetryService $deadlockRetry,
) {
}

public function save(Order $order): void
{
    $this->entityManager->persist($order);
    $this->deadlockRetry->flush();
    $this->deadlockRetry->flush('batch');
}

Requirements

  • PHP >= 8.2, < 8.6 (Symfony 8.x requires PHP 8.4+)
  • Symfony 6.0+ | 7.4+ | 8.0+ | 8.1+ (minimum tested minors: 7.4, 8.0, 8.1)
  • Doctrine ORM and DoctrineBundle

Tests and coverage

  • Tests: PHPUnit (PHP)
  • PHP: 100%

Version policy

The Composer package is nowo-tech/doctrine-deadlock-retry-bundle. Source and issues: nowo-tech/DoctrineDeadlockRetryBundle.

We follow Semantic Versioning. See Changelog. Security support is described in the Security policy.

License

MIT. See LICENSE.