ObanErrorReporter purges imported data when the cleanup worker crashes — silent loss of completed CSV imports
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
Direzione di ricerca
Inizia individuando ObanErrorReporter.on_job_exception/1 e i worker ImportAnalytics e LocalImportAnalyticsCleaner, quindi traccia il modo in cui vengono associati queue, worker e import_id. Riproduci o testa il percorso di errore del cleaner descritto nell’issue; il lavoro è completato quando le eccezioni del cleaner non possono eliminare un import né contrassegnarlo come fallito, mentre le eccezioni dell’importer mantengono la gestione prevista.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Version: CE v3.2.1 (self-hosted, community-edition compose)
Summary: ObanErrorReporter.on_job_exception/1 matches crashed Oban jobs by queue: "analytics_imports" + presence of import_id in args — it never checks which worker crashed. Plausible.Workers.LocalImportAnalyticsCleaner runs in that same queue with import_id in its args. When the cleaner crashes (in our case: File.rm! → :eacces on import CSVs owned by a different uid), the reporter misinterprets it as a failed import:
- attempts 1–19 →
import_fail_transient/1→Plausible.Purge.delete_imported_stats!/1— deletes the completed import's ClickHouse data whilesite_imports.statusstill readscompleted - attempt 20 (discard) →
import_fail/1→ import marked failed + failure email
Observed impact: 15 successful local-storage CSV imports had all their data purged ~1 hour after completion (the cleaner's first scheduled run), while dashboards showed the imports as completed for 13 days. The only user-visible signal came two weeks later when the cleaner jobs exhausted retries and each import flipped to failed with a "please try the import again" email.
Repro sketch: complete a local CSV import, make the uploaded files un-deletable by the app user (e.g. chown root them), wait for the cleaner's scheduled run, observe imported_* tables purged for that import_id while the import still reads completed.
Suggested fix: scope on_job_exception/1 to worker: "Plausible.Workers.ImportAnalytics" (or exclude the cleaner), so cleanup failures can't purge import data. Arguably the cleaner also shouldn't share consequences with importers at all despite sharing the queue.
Happy to provide fuller forensics (query_log timelines, oban job history) if useful.
- Lingua principale
- Elixir
- Stelle
- 29.7k
- Fork
- 1.9k
- Merge medio
- 3g 22h
- PR unite (30g)
- 50
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di plausible/analytics
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
plausible/analytics#5201 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Wrong API URL for GTMAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
plausible/analytics#5200 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
[Tracker] Scroll-depth tracking still forces layout on large pages after #6174Forse già presa @trotzig l’ha presa 20 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 18/100
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di plausible/analytics
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
taskforcesh/bullmq#5038 ·
I maintainer di solito rispondono entro 1 giorno
-
L: python L: ruby:bundler T: bug 🐞
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
dependabot/dependabot-core#16756 ·
I maintainer di solito rispondono entro 1 giorno
-
feat: signup pageApertad: medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 85/100