nowo-tech / doctrine-deadlock-retry-bundle
Symfony bundle that retries Doctrine flush and custom operations on DBAL deadlock exceptions with configurable profiles.
Package info
github.com/nowo-tech/DoctrineDeadlockRetryBundle
Type:symfony-bundle
pkg:composer/nowo-tech/doctrine-deadlock-retry-bundle
Fund package maintenance!
Requires
- php: >=8.2 <8.6
- doctrine/dbal: ^3.8.2 || ^4.0
- doctrine/doctrine-bundle: ^2.8 || ^3.0
- doctrine/orm: ^2.13 || ^3.0
- symfony/config: ^6.4 || ^7.0 || ^8.0 || ^8.1
- symfony/dependency-injection: ^6.4 || ^7.0 || ^8.0 || ^8.1
- symfony/http-kernel: ^6.4 || ^7.0 || ^8.0 || ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/yaml: ^6.4 || ^7.0 || ^8.0 || ^8.1
Suggests
- symfony/flex: For automatic recipe installation
This package is auto-updated.
Last update: 2026-06-11 12:17:34 UTC
README
⭐ 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)andretry(callable $operation, ?string $profile). - Named profiles: configure
max_retries,sleep_ms, androllback_on_deadlockper use case. - Default profile: used when no profile name is passed.
- Detects
DeadlockExceptionand related driver errors in the exception chain.
Documentation
- Installation
- Configuration
- Usage
- Contributing
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
Additional documentation
- Demo (Symfony 7 & 8) — run
make -C demo up-symfony8from the bundle root. - Demo with FrankenPHP (development and production) — includes FrankenPHP worker mode for production demos.
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.