driver: possible data races in `kick` method
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- lua
- Domaine
- backend, distributed-systems
Piste de recherche
Commencez par les lignes 158-173 de queue/abstract/driver/fifo.lua et suivez la manière dont kick sélectionne et met à jour les tâches enfouies dans fifo, fifottl, utube et utubettl. Comparez cela avec la gestion des transactions dans put et take aux lignes 101-117, y compris le point subtil mentionné. C’est terminé lorsque des appels concurrents à kick ne peuvent pas sélectionner la même tâche ni produire un résultat incorrect.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
kick method is used to unbury several tasks in the tube. After analyzing this method for drivers fifo, fifottl, utube, utubettl, I came to the conclusion, that it still possible to get a data race and incorrect, unexpected result.
We take a task with minimal task_id and BURIED status. After that we are updating it, commiting. But lua can also yield before WAL write. So this very task could also be taken in a parallel kick call for the second time.
Possible fix: do changes inside a transaction, like in put, take methods. But there is a subtle point here (which is described in a comment below).
https://github.com/tarantool/queue/blob/aa7c092a1f2ac80d3cfc63c75595d10c5a95c908/queue/abstract/driver/fifo.lua#L101-L117
- Langage dominant
- Lua
- Étoiles
- 243
- Forks
- 56
- Merge moyen
- 6 j 8 h
- PR mergées (30 j)
- 1
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 tarantool/queue
-
tube:grant() is not documentedOuvertedocumentation good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
-
*ttl drivers: TTL branch dereferences delete() result without a nil check, killing the fiberPeut-être pris @maksimuimin l’a pris il y a 19 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 76/100
-
*ttl drivers: a dead TTL fiber cannot be restarted and wedges the queue in ENDING on the next RO switchPeut-être pris @maksimuimin l’a pris il y a 19 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
fifottl/limfifottl: stop() blocks forever while RW, drop() leaks the TTL fiberPeut-être pris @maksimuimin l’a pris il y a 19 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
-
1sp bug teamE
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
Toutes les issues de tarantool/queue
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
mogenson/PaperWM.spoon#178 ·
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
-
ci: Verify install never runs examples_install or tests_install, so a clear they widen passesOuverteseverity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
luainkernel/lunatik#1876 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 91/100
-
bug ready ticket
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Domktorymysli/vclu#5 ·