Details
-
Bug
-
Resolution: Fixed
-
None
-
Critical
-
FIX: expired sessions were not cleaned anymore leading to potential problems with the login. Other quirks also could lead to multiple entries for the unique-id
-
Empty show more show less
Description
Wir hatten da in kurzer Folge ziemlich viele Service-Desk Issues bzw Sachen in den Error-Mails: Einerseits haben sich User beschwert, dass Sie bei der ersten Anmeldung rausfliegen und erst das zweite Login klappt. Dann gab es einen Haufen Deadlock-Meldungen beim Schreiben auf die Session-Tabelle in verschiedenen Instanzen und schließlich eine auffällige Zunahme von "Access denied" Fehlern. Eine Prüfung hat dann ergeben, dass die Session-Tabelle in einigen installationen ziemlich groß war (einige 10.000 entries, insbesondere mehrere entries pro userId) und besonders die blöde "sessionMapInternalUniqId" (teilweise über 1 Mio). Ursache war, dass das cleanup der sessions nicht mehr funktioniert hat. Effekt war, das häufig bei der ersten Anmeldung eine alte session gepickt wurde, die dann nicht gültig war. Das triggert bei uns ein Logout, was die Sessions für den User dann aufräumt, weswegen der 2. Login immer funktioniert hat. Als Gegenmaßnahme habe ich das wiederverwenden existierender Einträge verbessert sowie die Verbindung zwischen den beiden Tabellen. Die Deadlocks gab es immer im Rahmen vom Laden der Anwendung, das Problem war hier, dass jeder Request zu einem Update des modified Timestamps führt. Das habe ich verbessert, indem nur noch geschrieben wird, wenn sich entweder irgendein Feld geändert hat oder modified um mehr als ZfExtended_Resource_Session::TIMESTAMP_UPDATE_DELAY (5 sec) vom gespeicherten Timestamp abweicht. Das hat zumindest nach kurzer Zeit alle beschriebenen Phänomene geheilt. Da gibt es aber noch weiteren Verbesserungsbedarf, einerseits sollte die "sessionMapInternalUniqId" in die session-tabelle integriert werden und andererseits das aufräumen weiter verbessert. Auch könnte man "sessionId" zum alleinigen primary-key machen und den session-namen als Konstante implementieren. Die "reuse"-Strategie wurde gewählt, weil ein naheliegendes "delete existing siblings on insert" zu weiteren Deadlocks geführt hatte...
Attachments
Issue Links
- causes
-
TRANSLATE-3479 Sessions are getting destroyed on updating auth tokens
- Done