A grab in sent or downloaded state whose infohash Transmission no longer reports (removed by hand) is now marked vanished — a state distinct from failed so it does not feed the needs_decision attention queue — and the movie, episode, or season it targets reopens as a gap. Nothing is blacklisted, since the release itself never failed policy.
Reclaiming the gap means the same release can legitimately be grabbed again, which collides with the old dead row on grabs.infohash's uniqueness constraint. The insert in send_winner now upserts over a vanished row instead of only over sent/downloaded (the restart case), so a re-grab reclaims the row rather than silently losing state.
crates/arr-daemon/src/grab.rs's reopen_target is shared by both grab.rs (a sent grab vanishing before it ever downloaded) and import.rs (a downloaded grab vanishing before import).
Migration 0011 adds vanished to the grabs.state CHECK constraint.
Closes #86.
A grab in `sent` or `downloaded` state whose infohash Transmission no longer reports (removed by hand) is now marked `vanished` — a state distinct from `failed` so it does not feed the `needs_decision` attention queue — and the movie, episode, or season it targets reopens as a gap. Nothing is blacklisted, since the release itself never failed policy.
Reclaiming the gap means the same release can legitimately be grabbed again, which collides with the old dead row on `grabs.infohash`'s uniqueness constraint. The insert in `send_winner` now upserts over a `vanished` row instead of only over `sent`/`downloaded` (the restart case), so a re-grab reclaims the row rather than silently losing state.
`crates/arr-daemon/src/grab.rs`'s `reopen_target` is shared by both `grab.rs` (a `sent` grab vanishing before it ever downloaded) and `import.rs` (a `downloaded` grab vanishing before import).
Migration 0011 adds `vanished` to the `grabs.state` CHECK constraint.
A grab in sent or downloaded state whose infohash Transmission no
longer reports (removed by hand) is marked `vanished`, a state
distinct from `failed` so it does not feed the needs_decision
attention queue, and the movie/episode/season it targets reopens as
a gap. Nothing is blacklisted, since the release itself never failed
policy. Re-grabbing the same infohash afterwards reclaims the dead
row instead of losing the grab to the infohash uniqueness constraint.
Closes#86
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.
Closes #86.
A grab in
sentordownloadedstate whose infohash Transmission no longer reports (removed by hand) is now markedvanished— a state distinct fromfailedso it does not feed theneeds_decisionattention queue — and the movie, episode, or season it targets reopens as a gap. Nothing is blacklisted, since the release itself never failed policy.Reclaiming the gap means the same release can legitimately be grabbed again, which collides with the old dead row on
grabs.infohash's uniqueness constraint. The insert insend_winnernow upserts over avanishedrow instead of only oversent/downloaded(the restart case), so a re-grab reclaims the row rather than silently losing state.crates/arr-daemon/src/grab.rs'sreopen_targetis shared by bothgrab.rs(asentgrab vanishing before it ever downloaded) andimport.rs(adownloadedgrab vanishing before import).Migration 0011 adds
vanishedto thegrabs.stateCHECK constraint.