fix(oban): handle orphaned source deletion jobs gracefully
Add rescue block to SourceDeletionWorker to handle cases where the source no longer exists. This prevents infinite retries when a deletion job fails and the source has already been removed from the database.
This commit is contained in:
parent
46a1500aed
commit
80ae7ea1ff
3 changed files with 8 additions and 1 deletions
|
|
@ -129,7 +129,7 @@ sqlite3 /path/to/pinchflat.db "
|
|||
docker compose start pinchflat
|
||||
```
|
||||
|
||||
## Issue 5: Orphaned deletion jobs for non-existent sources
|
||||
## Issue 5: Orphaned deletion jobs for non-existent sources [COMPLETED]
|
||||
|
||||
**Problem:** When a source is deleted, a `SourceDeletionWorker` job is created. If this job fails repeatedly (e.g., due to database busy errors or files already deleted), it keeps retrying indefinitely even after the source no longer exists.
|
||||
|
||||
|
|
|
|||
|
|
@ -34,5 +34,8 @@ defmodule Pinchflat.Sources.SourceDeletionWorker do
|
|||
source = Sources.get_source!(source_id)
|
||||
|
||||
Sources.delete_source(source, delete_files: delete_files)
|
||||
rescue
|
||||
Ecto.NoResultsError -> Logger.info("#{__MODULE__} discarded: source #{source_id} not found")
|
||||
Ecto.StaleEntryError -> Logger.info("#{__MODULE__} discarded: source #{source_id} stale")
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -48,5 +48,9 @@ defmodule Pinchflat.Sources.SourceDeletionWorkerTest do
|
|||
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end
|
||||
refute File.exists?(media_item.media_filepath)
|
||||
end
|
||||
|
||||
test "does not blow up if the record doesn't exist" do
|
||||
assert :ok = perform_job(SourceDeletionWorker, %{id: 0})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue