Skip to content

fix: Fix MySQL deadlock issues with high-concurrency email sending#64

Merged
lucaforni merged 2 commits into
main-modalsourcefrom
fix/Mysql2--Error--Deadlock
Feb 1, 2026
Merged

fix: Fix MySQL deadlock issues with high-concurrency email sending#64
lucaforni merged 2 commits into
main-modalsourcefrom
fix/Mysql2--Error--Deadlock

Conversation

@lucaforni
Copy link
Copy Markdown

Add comprehensive solution for deadlock errors that occur when sending many emails with multiple workers and threads (e.g., 8 workers × 10 threads).

Changes include:

  • Add 4 composite database indexes to reduce row locking during updates
  • Implement automatic retry with exponential backoff for deadlock errors
  • Optimize batch updates to process in smaller chunks (100 messages)
  • Add reduced lock timeout for batchable message queries
  • Include comprehensive documentation and MySQL configuration recommendations

This resolves the issue where messages would show as 'Sent' then immediately transition to 'Error' status due to database deadlocks under high load.

Add comprehensive solution for deadlock errors that occur when sending
many emails with multiple workers and threads (e.g., 8 workers × 10 threads).

Changes include:
- Add 4 composite database indexes to reduce row locking during updates
- Implement automatic retry with exponential backoff for deadlock errors
- Optimize batch updates to process in smaller chunks (100 messages)
- Add reduced lock timeout for batchable message queries
- Include comprehensive documentation and MySQL configuration recommendations

This resolves the issue where messages would show as 'Sent' then immediately
transition to 'Error' status due to database deadlocks under high load.
- Add logged method to TestLogger for easier test assertions
- Add deadlock_sleep wrapper method to make sleep mockable in tests
- Fix test mocking to properly handle deadlock retries and backoff
- Update test expectations to correctly access MAX_DEADLOCK_RETRIES constant
- All 1449 tests now pass successfully
@lucaforni lucaforni merged commit 2016584 into main-modalsource Feb 1, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant