Klärung FRADrive funktionierte nicht mehr #133
Closed
opened 2023-11-28 13:55:56 +01:00 by jost
·
28 comments
No Branch/Tag Specified
master
145-build-system-rewrite
fradrive/jost
144-ghc-update
stundenplan
fraport-corporate-design-icons
oauth-fixes
130-dbtable-kein-automatisches-filtern-bei-input-change-sondern-manuelle-ubernahme-via-button
130-dbtable-kein-automatisches-filtern-bei-input-change-sondern-manuelle-ubernahme-via-button-2
oauth-fixes-tmp
utils
fradrive/fraport-corporate-design
test
55-oauth2-single-sign-on
128-remove-nodejs
fradrive/new-jobsystem
110-crontab
fradrive/firm/indices
frontend
fradrive/apc-envelope-problem
fradrive/tutorial-overhaul
fradrive/simple-quick-actions
fradrive/pagination-fix
fradrive/pagination-problem
frontend-update
544-tutoriumsdaten-bei-teilnehmerliste
729-payloads-pro-zustand-anzeigen-in-workflow-ansicht
256-datenbank-sortiert-sonderzeichen-falsch
workflows
feat/external-apis
722-email-spalte-fur-prufungsteilnehmer-innen
508-frontend-util-cleanup
597-An-geeigneter-Stelle-Anzahl-Abgebende-für-ein-Übungsblatt-anzeigen
631-content-dependent-chunking
minio-file-upload
476-interface-fur-klausurkorrekturen-dev
476-interface-fur-klausurkorrekturen
mr/476-interface-fur-klausurkorrekturen
datepicker-in-async-table-filter
274-maschinenlesbares-format-fur-bewertungsdateien
feat/db-auth
v27.4.79
v27.4.78
v27.4.77
v27.4.76
v27.4.75
v27.4.74
v27.4.73
v27.4.72
v27.4.71
v27.4.70
v27.4.69
v27.4.68
v27.4.67
v27.4.66
v27.4.65
v27.4.64
v27.4.63
v27.4.62
v27.4.61
v27.4.60
t28.1.1
d29.6.7
t28.1.0
t28.0.10
d29.6.6
d29.6.5
t28.0.9
d29.6.4
t28.0.8
d29.6.3
d29.6.2
d29.6.1
d29.6.0
d29.5.6
d29.5.4
d29.5.3
d29.5.2
d29.5.1
d29.5.0
d29.4.0
d29.3.1
d29.3.0
d29.2.1
d29.2.0
d29.1.1
d29.1.0
d29.0.0
t28.0.0
v27.4.59
v27.4.58
v27.4.57
d28.0.10
d28.0.9
d28.0.8
d28.0.7
d28.0.6
d28.0.5
d28.0.4
d28.0.3
d28.0.2
d28.0.1
d28.0.0
v27.4.56
v27.4.55
v27.4.54
v27.4.53
v27.4.52
v27.4.51
v27.4.50
t27.4.49
v27.4.49
v27.4.48
t27.4.48
v27.4.47
v27.4.46
t27.4.47
t27.4.46
v27.4.45
v27.4.44
v27.4.43
v27.4.42
v27.4.41
v27.4.40
v27.4.39
v27.4.38
v27.4.37
v27.4.36
t27.4.35
t27.4.34
v27.4.34
t27.4.33
t27.4.32
t27.4.31
t27.4.30
t27.4.29
t27.4.28
t27.4.27
t27.4.26
t27.4.25
t27.4.24
t27.4.23
t27.4.22
t27.4.21
t27.4.20
t27.4.19
v27.4.18
t27.4.18-2
t27.4.18
t27.4.17
t27.4.16
t27.4.15
t0.4.0
t0.3.0
t0.2.0
t0.1.0
v27.4.14
v27.4.13
v27.4.12
v27.4.11
v27.4.10
v27.4.9
v27.4.8
v27.4.7
v27.4.6
v27.4.5
v27.4.4
v27.4.3
v27.4.2
v27.4.1
v27.4.0
v27.3.2
v27.3.1
v27.3.0
v27.2.0
v27.1.6
v27.1.5
v27.1.4
v27.1.3
v27.1.2
v27.1.1
v27.1.0
v27.0.29
v27.0.28
v27.0.27
v27.0.26
v27.0.25
v27.0.24
v27.0.23
v27.0.22
v27.0.21
v27.0.20
v27.0.19
v27.0.18
v27.0.17
v27.0.16
v27.0.15
v27.0.14
v27.0.13
v27.0.12
v27.0.11
v27.0.10
v27.0.9
v27.0.8
v27.0.7
v27.0.6
v27.0.5
v27.0.4
v27.0.3
v27.0.2
v27.0.1
v27.0.0
v26.6.6
v26.6.5
v26.6.4
v26.6.3
v26.6.2
v26.6.1
v26.6.0
v26.5.14
v26.5.13
v26.5.12
v26.5.11
v26.5.10
v26.5.9
v26.5.8
v26.5.7
v26.5.6
v26.5.5
v26.5.4
v26.5.3
v26.5.2
v26.5.1
v26.5.0
v26.4.0
v26.3.1
v26.3.0
v26.2.6
v26.2.5
v26.2.4
v26.2.3
v26.2.2
v26.2.1
v26.2.0
v26.1.4
v26.1.3
v26.1.2
v25.24.5
v25.24.4
v25.24.3
v25.24.2
v25.24.1
v25.24.0
v25.23.5
v25.23.4
v25.23.3
v25.23.2
v25.23.1
v25.23.0
v25.22.0
v25.21.24
v25.21.23
v25.21.22
v25.21.21
v25.21.20
v25.21.19
v25.21.18
v25.21.17
v25.21.16
v25.21.15
v25.21.14
v25.21.13
v25.21.12
v25.21.11
v25.21.10
v25.21.9
v25.21.8
v25.21.7
v25.21.6
v25.21.5
v25.21.4
v25.21.3
v25.21.2
v25.21.1
v25.21.0
v25.20.2
v25.20.1
v25.20.0
v25.19.3
v25.19.2
v25.19.1
v25.19.0
v25.18.2
v25.18.1
v25.18.0
v25.17.1
v25.17.0
v25.16.0
v25.15.3
v25.15.2
v25.15.1
v25.15.0
v25.14.2
v25.14.1
v25.14.0
v25.13.1
v25.13.0
v25.12.1
v25.12.0
v25.11.0
v25.10.5
v25.10.4
v25.10.3
v25.10.2
v25.10.1
v25.10.0
v25.9.3
v25.9.2
v25.9.1
v25.9.0
v25.8.1
v25.8.0
v25.7.0
v25.6.1
v25.6.0
v25.5.3
v25.5.2
v25.5.1
v25.5.0
v25.4.0
v25.3.0
v25.2.0
v25.1.2
v25.1.1
v25.1.0
v25.0.5
v25.0.4
v25.0.3
v25.0.2
v25.0.1
v25.0.0
v24.9.2
v24.9.1
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.3
v24.4.2
v24.4.1
v24.4.0
v24.3.0
v24.2.1
v24.2.0
v24.1.5
v24.1.4
v24.1.3
v24.1.2
v24.1.1
v24.1.0
v24.0.0
v23.7.0
v23.6.0
v23.5.0
v23.4.3
v23.4.2
v23.4.1
v23.4.0
v23.3.0
v23.2.2
v23.2.1
v23.2.0
v23.1.2
v23.1.1
v23.1.0
v23.0.3
v23.0.2
v23.0.1
v23.0.0
v22.1.1
v22.1.0
v22.0.0
v21.1.1
v21.1.0
v21.0.3
v21.0.2
v21.0.1
v21.0.0
v20.14.0
v20.13.0
v20.12.1
v20.12.0
v20.11.1
v20.11.0
v20.10.0
v20.9.0
v20.8.1
v20.8.0
v20.7.0
v20.6.0
v20.5.1
v20.5.0
v20.4.1
v20.4.0
v20.3.2
v20.3.1
v20.3.0
v20.2.0
v20.1.1
v20.1.0
v20.0.0
v19.3.1
v19.3.0
v19.2.2
v19.2.1
v19.2.0
v19.1.5
v19.1.4
v19.1.3
v19.1.2
v19.1.1
v19.1.0
v19.0.0
v18.6.0
v18.5.0
v18.4.0
v18.3.0
v18.2.2
v18.2.1
v18.2.0
v18.1.0
v18.0.0
v17.8.0
v17.7.0
v17.6.5
v17.6.4
v17.6.3
v17.6.2
v17.6.1
v17.6.0
v17.5.0
v17.4.1
v17.4.0
v17.3.0
v17.2.1
v17.2.0
v17.1.1
v17.1.0
v17.0.0
v16.5.0
v16.4.2
v16.4.1
v16.4.0
v16.3.1
v16.3.0
v16.2.2
v16.2.1
v16.2.0
v16.1.0
v16.0.5
v16.0.4
v16.0.3
v16.0.2
v16.0.1
v16.0.0
v15.6.1
v15.6.0
v15.5.0
v15.4.1
v15.4.0
v15.3.0
v15.2.0
v15.1.2
v15.1.1
v15.1.0
v15.0.0
v14.6.0
v14.5.0
v14.4.0
v14.3.0
v14.2.0
v14.1.1
v14.1.0
v14.0.0
v13.0.1
v13.0.0
v12.1.0
v12.0.0
v11.1.1
v11.1.0
v11.0.0
v10.6.0
v10.5.0
v10.4.1
v10.4.0
v10.3.0
v10.2.0
v10.1.0
v10.0.1
v10.0.0
v9.0.3
v9.0.2
v9.0.1
v9.0.0
v8.0.1
v8.0.0
v7.25.1
v7.25.0
v7.24.0
v7.23.2
v7.23.1
v7.23.0
v7.22.1
v7.22.0
v7.21.5
v7.21.4
v7.21.3
v7.21.2
v7.21.1
v7.21.0
v7.20.0
v7.19.2
v7.19.1
v7.19.0
v7.18.3
v7.18.2
v7.18.1
v7.18.0
v7.17.14
v7.17.13
v7.17.12
v7.17.11
v7.17.10
v7.17.9
v7.17.8
v7.17.7
v7.17.6
v7.17.5
v7.17.4
v7.17.3
v7.17.2
v7.17.1
v7.17.0
v7.16.0
v7.15.0
v7.14.1
v7.14.0
v7.13.0
v7.12.0
v7.11.0
v7.10.0
v7.9.1
v7.9.0
v7.8.5
v7.8.4
v7.8.3
v7.8.2
v7.8.1
v7.8.0
v7.7.0
v7.6.0
v7.5.0
v7.4.2
v7.4.1
v7.4.0
v7.3.2
v7.3.1
v7.3.0
v7.2.2
v7.2.1
v7.2.0
v7.1.2
v7.1.1
v7.1.0
v7.0.0
v6.11.1
v6.11.0
v6.10.0
v6.9.0
v6.8.0
v6.7.0
v6.6.0
v6.5.0
v6.4.0
v6.3.0
v6.2.1
v6.2.0
v6.1.0
v6.0.0
v5.5.0
v5.4.0
v5.3.0
v5.2.3
v5.2.2
v5.2.1
v5.2.0
v5.1.0
v5.0.2
v5.0.1
v5.0.0
v4.14.0
v4.13.1
v4.13.0
v4.12.1
v4.12.0
v4.11.0
v4.10.0
v4.9.0
v4.8.0
v4.7.0
v4.6.0
v4.5.0
v4.4.0
v4.3.0
v4.2.0
v4.1.2
v4.1.1
v4.1.0
v4.0.1
v4.0.0
v3.0.0
db14.0.0
v2.1.1
v2.1.0
v2.0.0
v1.4.1
v1.4.0
v1.3.0
v1.1.0
v1.0.0
db8.0.0
db6.0.0
db1.0.0
db0.0.0
dbinitial
Labels
Clear labels
Benötigt Klärung, noch nichts zu implementieren
Won't fix
Kubernetes, Nix, etc.
Kann jetzt noch nicht gelöst werden, da noch Abhängigkeiten bestehen
Problem vermutlich behoben, muss aber noch beobachtet oder getestet werden
Wird in Uni2work behoben und später portiert
Ordered from and appointed to UniWorX Systems LLC
This issue is currently being worked on; probably within a branch
Aufwand: Hoch
Aufwand: Mittel
Aufwand: Niedrig
Blockiert
Diskussion
Benötigt Klärung, noch nichts zu implementieren
Dokumentation
Won't fix
Frontend
Konfigurationsproblem
Kubernetes, Nix, etc.
Prio: Angehalten
Kann jetzt noch nicht gelöst werden, da noch Abhängigkeiten bestehen
Prio: Blocker
Prio: Hoch
Prio: Mittel
Prio: Niedrig
Prio: Unbedeutend
Prüfung ausstehend
Problem vermutlich behoben, muss aber noch beobachtet oder getestet werden
Schnittstelle
Schnittstelle: APC
Schnittstelle: AVS
Schnittstelle: LMS
Schnittstelle: SAP
Uni2Work
Wird in Uni2work behoben und später portiert
UniWorX
Ordered from and appointed to UniWorX Systems LLC
Working
This issue is currently being worked on; probably within a branch
No Label
Aufwand: Hoch
Aufwand: Mittel
Aufwand: Niedrig
Blockiert
Diskussion
Dokumentation
Frontend
Konfigurationsproblem
Prio: Angehalten
Prio: Blocker
Prio: Hoch
Prio: Mittel
Prio: Niedrig
Prio: Unbedeutend
Prüfung ausstehend
Schnittstelle
Schnittstelle: APC
Schnittstelle: AVS
Schnittstelle: LMS
Schnittstelle: SAP
Uni2Work
UniWorX
Working
Milestone
Clear milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Clear assignees
No Assignees
1 Participants
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: fraport/fradrive-old#133
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Am 28.11.2023 reagierte FRADrive nicht mehr. Die Status Seite, Aktuelles und auch Druckerei funktionierten, aber sonst fast nichts mehr.
Was könnte die Ursache gewesen sein?
Wie ist ein erneutes auftreten zu verhindern?
TimeGenerated [UTC]
assigned to @savau
mentioned in issue #2
Log der letzten 4 Stunden, inklusive Neustart am Ende:
Azure Monitor Log Analytics Export - 2023-11-28.xlsx
Probleme wurden um ca. 11:35UTC zum ersten Mal berichtet. Ab 11:30UTC häufen sich die "moved long-unadressed jobs" Meldungen in der DB, in den 24 Stunden vor 11:14UTC taucht die Meldung nicht auf.
changed the severity to High - S2
Der Auszug aus dem Log (insbes. die Meldung
FATAL: remaining connection slots are reserved for nn-replication superuser connections) legt nahe, dass die Datenbank-Verbindungen ausgegangen zu sein schienen.Als Quickfix könnte es helfen, die Anzahl erlaubter paralleler Verbindungen zu erhöhen.
Dafür gibt es ein AppSetting unter
database.poolsize.Wie viele Job-Worker sind in Prod denn aktuell konfiguriert? Und entnehme ich dem Issue richtig, dass das Problem Prod betraf und Test insbes. nicht?
Ja, es betraf Prod und nicht test. Ich vermute, dass die fehlenden Verbindungen nur ein Symptom sind. Zuerst tauchten ja diese
long-unadressed jobsauf, welche immer häufiger wiederholt wurden.Außerdem wurde ja deutlich vorher berichtet, dass FRADrive nicht benutzbar wäre, bevor die Log Meldungen über den Mangel der Verbindungen kamen!
Was ich mir auch vorstellen kann ist, dass das Jobsystem mit der Zeit bzw. mit steigender Nutzerzahl etc. zu langsam geworden ist und pro Iteration der Crontab nicht alle anstehenden Jobs berechnet/getriggert werden konnten. Die hätten sich dann über die Zeit anhäufen können, sodass sich eine Menge Retries ansammeln könnte.
Die Poolsize zu erhöhen wäre definitiv nur Symptombekämpfung, aber vielleicht einen Versuch wert wenn das nochmal auftreten sollte.
Ich kann mir wie oben erwähnt gut vorstellen, dass die Ursache in der Implementierung des alten Jobsystems liegt, die aus meiner Sicht sinnvollste Behebung wäre es, die (aktuell ja eh schon laufende) Reimplementierung des Jobsystems höher zu priorisieren.
Aber müssten wir im Log dann nicht irgendwo den Cron Trigger sehen?
Ja, der kann aber eine ganze Weile lang in der Vergangenheit liegen. Schau' mal nach Crontriggern in der Zeit zwischen ca. 01:00 Uhr und 04:00 Uhr nachts, da werden normalerweise die üblichen Schuldigen ausgeführt (= ressourcenaufwändigere Cleanup-Jobs).
Aber woran erkenne ich denn den Schuldigen?
Bzw. ich weiß, dass ca. 2 Stunden vorher manuell AVS Synchs für ca. 30 Nutzer ausgelöst wurden. Bei der geringen Anzahl sollten die ja locker vorher abgearbeitet worden sein.
Weiterhin sollten die Background Jobs doch nur den JobWorker lahmlegen - wieso war aber der Webserver betroffen, der keine Background Jobs ausführt?
Hat nicht jede Instanz einen eigenen DB Connection Pool?
Die Crontab, d.h. die anstehenden Jobs, werden (aktuell noch) vom Webserver berechnet, nicht von den Jobworkern. Das ist auch der Grund, warum zu viele in der Vergangenheit liegen gebliebene Jobs den Webserver lahmlegen können und nicht nur die Jobworker überlasten. Im alten Jobsystem wird pro „Tick“ die Crontab vollständig neu berechnet, was mit steigender Jobzahl zunehmend rechenaufwändig wird und im Worst Case länger dauern kann als ein solcher „Tick“; dadurch wiederum steigt die Anzahl Jobs erneut. Der Webserver rechnet sich ab dann sozugagen lahm.
Auffällig wäre z.B. eine Anhäufung von „determineCrontab“-Logs dicht aufeinander, ohne sonstige Symptome tatsächlicher Abarbeitung (also Logs von Jobworkern).
`DetermineCrontab` sehe ich ungefähr einmal pro Minute im Log; sowohl weit vor dem Crash als auch jetzt nach dem Neustart. Um den Crash herum gibt es aber keine besondere Häufung. Manchmal sind es 3 pro Minute, aber dann meist nicht mehr in der Minute davor oder danach, also 1/Minute kommt gut hin.
Was heißt denn „weit vor dem Crash“? Bereits vor heute Nacht, oder erst ab ca. 28.11. 00:00 Uhr?
Gibt es, zusätzlich zu den bis zu 3 DetermineCrontab-Logs pro Minute, zur gleichen Zeit noch „normale“ anderweitige Logs, oder ist es um die Gegend der Determine-Crontab-Logs herum auffällig still zufällig?
Ich würde sagen normal, also die GET Requests der Kubernetes Health Checks werden angezeigt wie üblich
Okay, das ist gut zu wissen. Ich würde vorschlagen, wir schauen uns den Incident auch nächsten Montag nochmal zusammen im Detail an.
@savau Das Problem taucht jetzt schon wieder auf! Wir können wohl nicht bis Montag warten.
Die einzige ungewöhnliche Log-Meldung ist wieder
Problem trat wieder auf, Log unauffällig; betroffene Routen: course, qualification, lms, school.
Beobachtung: DB Zugriffe per DB Visualizer auf Tabellen wie
schoolwaren auch nicht mehr möglich.Vermutung
Aufgrund von aufwendigen Abfragen wurde das Autoscaling aktiv. Durch das hoch- und herunterfahren wurden einige DB Tabellen gelockt, da die Container nicht richtig heruntergefahren wurden.
Autoscaling wurde nun deaktiviert, wir beobachten erst einmal weiter. Autoscaling muss als eigenes Feature implementiert werden.
Log der DB vom Montagabend postgreslogs.xlsx
Könnte das hier der Schuldige sein, der bei jedem Start ausgeführt wird: `2023-12-05 16:51:52 +0000 [Info#Migration] ALTER TABLE "school" ALTER COLUMN "exam_discouraged_modes" SET DEFAULT '{"dnf-terms":[]}' @(uniworx-27.4.52-6PTBos9Y81o24JudJr369Z:Model.Migration src/Model/Migration.hs:121:10)`
mentioned in commit
d4f0d69428changed the incident status to Resolved by closing the incident
Die Migration wurde offenbar wegen einem abweichenden Default versucht: Auf https://hackage.haskell.org/package/persistent-2.14.6.0/docs/Database-Persist-Quasi.html steht dazu
Our code contained
default='{"dnf-terms":[]}'which postgresql changed intodefault='{"dnf-terms": []}'(note the differing space), which caused a migration at each start. However, persistent does not allow blanks within the default, so this is not solvable.mentioned in commit
a4b2af7f15mentioned in commit
2509358878changed the incident status to Resolved by closing the incident