ExposedTransactionRunner: Exposed's default 3x retry re-runs claim+delivery on SQLException, multiplying duplicate deliveries
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- Une demi-journée
- Accessibilité débutants
- 62/100
Piste de recherche
Start with ExposedTransactionRunner.runInTransaction in the okapi-exposed module, which wraps the block in Exposed's transaction(database), and with processNext() to see the claim, deliver, update sequence. Check how Exposed's DatabaseConfig retry setting reaches that call. Done when a test shows the deliverer is invoked once when the store update throws SQLException, and the existing tests still pass.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Severity: Medium (duplicate delivery amplification) · Area: okapi-exposed ExposedTransactionRunner · Found in: code review of main @ e5630a1
Problem
ExposedTransactionRunner.runInTransaction is transaction(database) { block() }. Exposed retries the entire block on SQLException up to DatabaseConfig.defaultMaxAttempts times. The default is 3, which I confirmed in the bytecode of exposed-core 1.6.0.
For the outbox scheduler the block is processNext(): claim → network delivery → update. If the update or commit fails with an SQLException (deadlock victim, serialization failure, connection reset, oversized last_error, see the related issue), Exposed rolls back and re-runs the whole cycle immediately. It re-claims the same rows and delivers them again, up to 3 times per tick, with no backoff. The delivery side effect isn't transactional, so these retries only add duplicates and load on the downstream.
The purger and the metrics reads are idempotent, so retries are harmless there. The processor path is the problem.
Suggested fix
Disable Exposed's automatic retry for okapi's runner, e.g. transaction(database) { maxAttempts = 1; block() } (or the equivalent DatabaseConfig), and let okapi's own scheduler retry on the next tick. Add a test asserting that a deliverer is invoked once when the store update throws SQLException.
- Langage dominant
- Kotlin
- Étoiles
- 14
- Forks
- 0
- Merge moyen
- 9 h 54 min
- PR mergées (30 j)
- 11
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de softwaremill/okapi
-
bug
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
softwaremill/okapi#141 ·
Les mainteneurs répondent en général sous 1 jour
-
OutboxProcessorListener events are emitted before the transaction commits; metrics over-count on commit failurePeut-être pris @rawo l’a pris aujourd’hui. Ouvertebreaking-change bug
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
softwaremill/okapi#137 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 1-2 jours Accessibilité débutants 42/100
softwaremill/okapi#136 ·
Les mainteneurs répondent en général sous 1 jour
-
breaking-change bug
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
softwaremill/okapi#135 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 22/100
softwaremill/okapi#133 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de softwaremill/okapi
Issues similaires
-
autoteam community connectors/destination/mssql connectors/source/hubspot team/use
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
airbytehq/airbyte#91201 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug javascript
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Source: c7 Type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
2.23
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
ankidroid/Anki-Android#23042 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
[Submission] AI通话助手Ouvertesubmit-adaption submit-adaption-pre
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
BetterAndroid/android-notification-icon-project#828 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour