1:1-Spiegel aus dem Repo
Quelle: zulieferung/incidents/W6_INCIDENT_20260807_SHOPIFY_STOCKJOBS_JOBFOUNDDEAD.md · Stand der Quelldatei: 08.08.2026 09:35 · erzeugt: 14.08.2026 00:33
Diese Seite ist eine wortgetreue Kopie. Geaendert wird immer die Quelldatei, nie diese Seite.
INCIDENT 20260807 — Shopify-Bestandsexport-Jobs sterben wiederholt (JobFoundDead), heilen sich nach ~2h selbst¶
Severity: MITTEL · Status: BEOBACHTEN · Entdeckt von: M (Shopify-Meldung 07.08. 01:00) · Diagnose: G · Loesung: siehe Datei (Job e9da54ba: verwerfen, nicht requeuen — M offen)
| Status | ZU (07.08. 02:53 alle done) — Ursache OFFEN bei sandas.lt-Nacharbeit |
| Aufgetreten | 07.08. 01:00 · Entdeckt: 01:55 durch M (Jobs-Ansicht) |
| System | Odoo queue_job (Kanal root) · sale.integration SHOPIFY2 |
| Symptom | "Export Stock to Stores (3)" Failed in der Jobs-Ansicht; (1)/(2) pendeln zwischen pending/started |
| Auswirkung | Bestands-Sync zu Shopify um ~2h verzoegert; keine Kundenwirkung |
| Fallbeispiel | Jobs 2334915-2334918 (UUID 4cec9e06... = Nr. 3) |
1. Zeitachse (Berlin)¶
- 01:00:13 — vier Geschwister-Jobs "Export Stock to Stores (1)-(4)" angelegt
- 01:16 — (4) laeuft in 29 s sauber durch (retry 2)
- 01:00-02:53 — (1)-(3) sterben wiederholt: exc JobFoundDead, retry-Zaehler bis 178 (!) ueber max_retries 5 hinaus — der Dead-Job-Cron requeued Gestorbene immer neu
- 02:52-02:53 — alle drei laufen durch; Reihe komplett done (Fruehlage-Beleg exec 8065)
2. Ursachenkette¶
- JobFoundDead = der ausfuehrende Odoo-Worker starb MITTEN im Job (Zeitlimit limit_time_real oder Worker-Recycling) — kein Fach-, sondern ein Ressourcenfehler.
- Grosse Stock-Export-Jobs + nächtliche Cron-Last auf demselben root-Kanal -> wiederholtes Sterben, bis Last sank.
- retry>max_retries zeigt: JobFoundDead-Requeues umgehen die max_retries-Logik — die Reihe kann im Extremfall ENDLOS pendeln, ohne dass jemand alarmiert wird.
3./4. Loesung¶
Selbstheilung abgewartet (richtig: nachts kein Eingriff noetig); KEIN manueller Requeue erforderlich. Dauerhaft (sandas.lt-Nacharbeitsliste): Worker-Limits vs. Jobgroesse pruefen (limit_time_real fuer queue-Worker), Stock-Export ggf. in kleinere Batches; JobFoundDead-Zaehler beobachten.
5. Erkennung kuenftig¶
- Jobs-Ansicht Filter Failed + exc_name=JobFoundDead; verdaechtig ab retry > max_retries
- kw/JSON-2: queue.job search_read [["state","=","failed"]] fields id,name,exc_name,retry — gehoert in die D-049-Status-Seite (M-Vorgabe: Jobqueue-Ueberwachung)
6. Lessons¶
- JobFoundDead + hoher retry = Ressourcen-, kein Datenproblem; erst beobachten, nicht requeuen.
- Verwandter Fall am selben Tag: Job e9da54ba (Reship-Validierung) — failed-Leiche, deren Picking laengst done war -> VERWERFEN statt requeuen. Merksatz: Vor jedem Requeue den Zielzustand des Objekts pruefen.