Uploaded image for project: 'translate5'
  1. translate5
  2. TRANSLATE-3435

Sessions are not cleaned up in DB, Logins frequently fail (mayby due to faulty db-session-data)

    XMLWordPrintable

Details

    • 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

    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

          Activity

            People

              axelbecher Axel Becher
              axelbecher Axel Becher
              Aleksandar Mitrev
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: