Skip to content

feat: blob removal — serve /blob/remove, /upload/remove, /blob/abort (FIL-522)#33

Open
frrist wants to merge 3 commits into
mainfrom
frrist/fil-522-blob-remove
Open

feat: blob removal — serve /blob/remove, /upload/remove, /blob/abort (FIL-522)#33
frrist wants to merge 3 commits into
mainfrom
frrist/fil-522-blob-remove

Conversation

@frrist

@frrist frrist commented Jul 17, 2026

Copy link
Copy Markdown
Member

Serves the upload-service half of blob removal, aligned with the blob-removal RFC (fil-one/RFC#13):

  • /blob/remove (subject = the space, args {digest}) — releases a space's claim on an accepted blob: recovers every provider holding it (primary via the registration's receipt chain, plus non-failed replicas), forwards a provider-rooted /blob/release {space, digest} to each (best-effort), and deregisters last so the receipt chain survives for a retry if every forward fails.
  • /blob/abort (subject = the space, args {digest, cause}) — abandons a parked (never-accepted) blob: the provider is recovered from the cause's receipt chain and the abort is forwarded as /blob/reject. A cause that doesn't resolve to a known /blob/add task fails with the named error MissingCause; a node refusing because the space accepted the blob has its BlobAccepted re-surfaced in the abort receipt, so clients can distinguish "use /blob/remove" from a retryable fault. No local state mutates, so aborts are safely retryable.
  • /upload/remove (subject = the space, args {root}) — deletes the upload's root→shards index entry only. Shard blobs are the client's per-digest /blob/remove decision (content addressing shares shards between uploads).

All handlers are idempotent (unknown/already-removed → success). Named errors come from libforge, shared with piri.

Landing order

fil-forge/libforge#49 (/blob/release binding + named errors; pinned at its branch head, re-pin on merge) → fil-forge/piri#30 (piri serves /blob/release + /blob/reject) → this — the forwards here invoke piri capabilities that only exist on #30.

Same chain: fil-forge/smelt#19 (devnet delegations), fil-forge/ingot#40 (S3 surface). Validated end-to-end by ingot's delete-finality and deferred-multipart itests against piri #30 + this branch.

🤖 Generated with Claude Code

frrist and others added 2 commits July 17, 2026 12:53
github.com/fil-forge/libforge aac837a — Space on RemoveArguments plus
the /blob/abort (client to upload service, Cause required) and
/blob/reject (upload service to storage node) bindings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bort (FIL-522)

/blob/remove releases a space's claim on an accepted blob: sprue
deregisters the space's registration and forwards /blob/remove to every
provider holding the blob. /upload/remove composes it over an upload's
shards. /blob/abort abandons an in-flight upload of a parked
(never-accepted) blob: the provider is recovered from the Cause receipt
chain (a parked blob has no registration or acceptance to look up by)
and the abort is forwarded as /blob/reject under the provider's
registration delegation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pted

Align with the blob-removal RFC's per-leg commands: the provider-rooted
translation of a client /blob/remove is now /blob/release — the piri
client gains Release/ReleaseInvocation and the remove handler forwards
it. The client-facing /blob/remove and /blob/abort arguments no longer
carry the space; it was already read from the invocation subject.

Abort now returns the RFC's named failures instead of generic execution
errors: a cause that does not resolve to a known /space/blob/add task
fails with MissingCause, and a node refusing the translated reject
because the space accepted the blob has its BlobAccepted re-surfaced in
the abort receipt, so clients can distinguish 'use /blob/remove' from a
retryable fault. Both names come from libforge, shared with piri.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@frrist
frrist requested a review from alanshaw July 24, 2026 16:29
@frrist frrist self-assigned this Jul 24, 2026
@frrist
frrist marked this pull request as ready for review July 24, 2026 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant