Improve BlazorJob application#3
Conversation
- Ajout de la décrémentation automatique de retriesLeft lors des échecs - Implémentation du backoff exponentiel (1s, 2s, 4s, 8s...) - Mise à jour du champ lastError dans la base de données - Replanification automatique des tâches avec le délai de backoff - Marquage des tâches comme 'failed' après épuisement des retries - Appel du callback onEnd avec les statistiques correctes - Ajout d'un test complet pour valider la logique de retry Le test confirme que : - Les tâches sont replanifiées avec le bon délai - retriesLeft est correctement décrémenté - lastError est bien sauvegardé - Les statistiques finales sont exactes
…bhook - Ajout de trois stratégies de retry : exponential (défaut), linear, et fixed - Configuration personnalisable du délai de base (delayMs) et délai maximum (maxDelayMs) - Notifications webhook lors de chaque tentative de retry avec détails (attemptNumber, retriesLeft, nextRetryAt) - Notifications webhook améliorées pour les échecs définitifs avec totalAttempts - Ajout des types RetryStrategy et RetryConfig - Extension
- Added comparison table highlighting key differences (infrastructure, setup, performance, scaling) - Documented when to choose BlazerJob (zero dependencies, simple deployment, <5k tasks/s) - Documented when to choose BullMQ (high throughput, distributed architecture, >10k tasks/s) - Emphasized BlazerJob's philosophy: simplicity and zero dependencies vs BullMQ's scalability focus - Added blockchain-native features as BlazerJob advantage
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4bf44b4d35
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // Décrémenter retriesLeft | ||
| const newRetriesLeft = Math.max(0, task.retriesLeft - 1); | ||
|
|
||
| if (newRetriesLeft > 0) { | ||
| // Récupérer la configuration de retry |
There was a problem hiding this comment.
The retry decision is based on newRetriesLeft > 0, but newRetriesLeft is already decremented. That means a task configured with retriesLeft = 1 never retries (the first failure sets newRetriesLeft to 0 and falls into the permanent-failure path). More generally, a task configured for N retries will only get N-1 retries. Given the documented semantics (“number of retry attempts”), this causes fewer attempts than configured; consider checking task.retriesLeft > 0 before decrementing or adjusting the condition so a task with 1 retry actually gets one retry.
Useful? React with 👍 / 👎.
Le test confirme que :