canonical / canonical/layer-basic
config states use hookenv.Config.changed, which can fail
- Vorherrschende Sprache
- Python
- Sterne
- 10
- Forks
- 42
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
The config states detect if a configuration item has changed using hookenv.config() and its changed method. This was designed assuming the only thing running in a hook context is a hook, which is now untrue. It is possible for an action to be invoked, which can check charm configuration using hookenv.config() and will flag changed config items as seen. If this action happens to be called between the config being changed and an actual hook being called (such as config-changed), then the configuration changed states will be lost.
The solution is for the base layer to cache the config itself in unitdata.kv(), so the cache only gets updated in charms.layer.basic.init_config_states()
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginnen Sie bei charms.layer.basic.init_config_states() und untersuchen Sie, wie Konfigurationsänderungen derzeit über hookenv.config() erkannt werden. Lesen Sie die Verwendung von unitdata.kv() rund um die Basisschicht, und überprüfen Sie anschließend, dass der Cache nur während init_config_states() aktualisiert wird und dass Änderungen nicht verloren gehen, wenn eine action vor einem Konfigurations-Hook ausgeführt wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100