NEWS
Zombie states im iobroker
-
Systemdata Bitte Ausfüllen Hardwaresystem: NUC Arbeitsspeicher: 8GB Festplattenart: SSD Betriebssystem: Debian Node-Version: 10.21.0 Nodejs-Version: 10.21.0 NPM-Version: 6.14.11 Installationsart: kA Image genutzt: kA Ort/Name der Imagedatei: na Ich habe das schon vor einer Weile festgestellt, aber heute konnte ich das im Rahmen einer Adapter/Widgets-Entwicklung verifizieren.
Folgendes Szenario:
Der Adapter verwaltet die Anlage von diversen Datenpunkten auf Basis einer Eingabe im Admin-Interface des Adapters
Dort können Datenpunkte auch wieder gelöscht werden.In Widgets, muss ein bestimmter Datenpunkt (config) ausgewählt werden.
Informationen daraus werden vom widget gelesen, aber auch geschrieben (mit vis.setvalue).In der Adapter-Konfig habe ich eine Reihe von Objekten löschen lassen.
In der Objekt-Ansicht des iobrokers waren diese auch nicht mehr sichtbar, bis hier alles okIch hatte vergessen, im widget den Datenpunkt zu entfernen und habe im widget etwas konfiguriert, so das das widget den Datenpunkt config wieder beschreibt.
Wie gesagt, das dazugehörige Objekt existiert nicht mehr.
Als ich das widget aktualisierte, habe ich festgestellt, das die gespeicherten Daten doch noch da waren.
In der Objekt-Ansicht von iobroker war dieser state aber nicht sichtbar.Wenn ich aber unter redis mir die keys und die dazu gehörige value ausgeben lasse, sehe ich die Konfigurationsdaten
Ein Normalbenutzer sieht diese states und die Daten nie wieder und kann sie auch nicht löschen.
Sobald ich die nächste Version des adapters tvprogram draußen habe, kann das auch nachvollzogen werden.
-
@oliverio Das ist am Ende ein Teil des Grunkonzepts, was wir gerade "langsam" beheben. Objekte und States existieren erst einmal parallel. In Zukunft wird es ein "warn" log geben sobald jemand einen State setzt der kein Objekt hat, und weiter später wird der State nicht geschrieben werden. Dann ist das Problem weg. Aktuell kann durch bestimmte Szenarien aber sowas passieren. Generell müssen Adapter-Devs das beachten und vermeiden.
Wenn sich solche "Zombie States" in grenzen halten tun SIe nicht so mega weh und nehmen nur ein paar Byte Platz weg
-
@oliverio
Danke für deine Frage. Ich hatte leider keine Antwort auf dieselbe Frage erhalten. -
@apollon77
Danke für die Rückmeldung. Dann weiß ich Bescheid.
Dann muss ich leider im widget immer vorher prüfen, ob es das Objekt gibt
und falls nicht dann nicht schreiben. -
@oliverio Mach mal ein Feature Request ticket im web/socket.io Adapter ... in meinen Augen gehört das wenn dort hin
-
@apollon77 said in Zombie states im iobroker:
web/socket.io Adapter
eigentlich gehört das mE auf euren DB-Layer, welcher prüft, das states nur geschrieben werden, wenn es ein Objekt dazu gibt oder notfalls ein dummy objekt noch anlegt oder eine Exception/Rückmeldung gibt, je nachdem wie fail safe man das haben möchte.
-
@oliverio Siehe mein text oben: Ja mittelfristig kommt es dort auch hin, die Vorstufe ist in js-controller 3.2 der jetzt warnt wenn States ohne Objekte geschrieben werden. Das müssen jetzt erstmal alle Adapter fixen ... Daher ist das andere die kurzfristig sinnvolle Lösung