Potential concurrency bugs in ConfigManager
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par localiser ConfigManager et les points d’appel de GetConfig et WatchConfig. Examinez la manière dont sont gérés l’initialisation, le blocage des notifications et la durée de vie du watcher ; la tâche sera considérée comme terminée lorsqu’une conception approuvée couvrira les mises à jour manquées, les modules bloqués et la désinscription, avec les tests correspondants.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Development Task
ConfigManager notifies other modules with the config change by a channel. There are some bugs:
- When a module starts, it must receive an initial config and a channel as its parameters, such as
someModule.Init(cfgMgr.GetConfig(), cfgMgr.WatchConfig()). However, between callingGetConfig()andWatchConfig(), there may be a config change, and thussomeModulemay miss this config change. ConfigManagernotifies all the modules by writing to the channels when config changes. If one module blocks (maybe forever or temporarily), it hangs. If the module blocks forever, such as deadlock or panic, the config change will block forever. But if you add a timeout on writing the channel, the module may miss the config change if it just blocks temporarily, such as busy handling other things.- There's no way to unsubscribe from
ConfigManagerafter callingWatchConfig(). If a module wants to quit,ConfigManagerwill still try to notify it.
For the 1st problem, one workaround is calling WatchConfig() after GetConfig().
For the 2nd problem, one workaround is to set the channel size to a big enough size and also set a timeout on writing the channel.
For the 3rd problem, one workaround is to add another function to unsubscribe.
If we deprecate the WatchConfig() way and always use GetConfig(), all problems will be solved.
- Langage dominant
- Go
- Étoiles
- 73
- Forks
- 40
- Merge moyen
- 15 h 43 min
- PR mergées (30 j)
- 9
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
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 pingcap/tiproxy
-
migration:bb7133-tiproxy
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
migration:bb7133-tiproxy
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
[Rust-dataplane] Migration backend handshake must preserve CONNECT_WITH_DB when current-db emptyOuvertemigration:bb7133-tiproxy
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
-
[Rust-dataplane] Migration must not force CONNECT_ATTRS on backend lacking it with empty attrsOuvertemigration:bb7133-tiproxy
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Les mainteneurs répondent en général sous 1 jour
-
migration:bb7133-tiproxy
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de pingcap/tiproxy
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
FootprintAI/Containarium#3182 ·
Les mainteneurs répondent en général sous 1 jour
-
bug from-studio
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
esengine/DeepSeek-Reasonix#14608 ·
Les mainteneurs répondent en général sous 1 jour
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getarcaneapp/arcane#4590 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Library panel usage dialog uses singular grammarPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertearea/frontend/library-panels automated-triage type/bug type/ux
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour