You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
review(uploader,forgeclient): WithConclude(false) replaces the parked add/upload split
Fold the PR #40 API-shape review (r3674608706, r3674935223): the deferred
accept is an option on the one entry point, not a second entry point.
- forgeclient: ParkedBlob's fields (AddTask, AcceptTask, PutInvocation)
fold into AddedBlob; Location == nil marks an unconcluded add. BlobAdd
takes WithConclude (default true); BlobAddParked becomes the private
durable half. BlobConclude takes the AddedBlob, no-ops when already
concluded, and drops the spent PutInvocation from its result.
- uploader: UploadBlob gains UploadOption and returns UploadedBlob
(nil-able *BlobLocation + the pending-accept state, populated only
while parked); DeferredBodyUploader embeds BodyUploader and keeps
ConcludeBlob/AbortBlob. Callers guard the "concluding upload always
returns a location" contract explicitly instead of deref-panicking on
a misbehaving impl.
- s3frontend: parkBlobs passes WithConclude(false); the dedup-vs-parked
branch is a documented Location nil-check.
The park vocabulary stays in the registry layer (blob_parks, BlobPark,
ParkStore) and docs — it is the blob-removal RFC's lifecycle term for the
allocated-but-unaccepted state; only the redundant API split is gone.
Validated: unit suite; full itest partition green against piri#30 head
(fil-forge/piri@b5208a3) + hilt#36 images.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| `allocate` / `PUT` / `accept` blob lifecycle | Piri/Sprue | **exists** | The storage primitive Ingot builds on. |
535
-
| Ingot-timed accept (PUT a part, defer the conclude until Complete) | Ingot + Sprue | **exists** | `forgeclient.BlobAddParked`/`BlobConclude` split the flow at the conclude seam; UploadPart parks (durable, unaggregated), Complete concludes — Sprue's conclude handler already ran accept standalone. Ingot still does **not** issue `accept` (Piri requires the upload-service DID). |
535
+
| Ingot-timed accept (PUT a part, defer the conclude until Complete) | Ingot + Sprue | **exists** | `forgeclient.BlobAdd` with `WithConclude(false)` stops at the conclude seam (`BlobConclude` finishes it); UploadPart parks (durable, unaggregated), Complete concludes — Sprue's conclude handler already ran accept standalone. Ingot still does **not** issue `accept` (Piri requires the upload-service DID). |
536
536
|`abort(digest)` — drop a parked blob | Piri + Sprue + libforge |**exists**|`/blob/abort` on Sprue translates to `/blob/reject` on Piri, which refuses blobs the invoking space has accepted (`BlobAccepted`), deletes the space's allocation, and drops the bytes once no space holds an allocation or acceptance. Sprue recovers the provider from the `cause` receipt chain (a parked blob has no registration). Abort/TTL/supersede unwind through it. |
537
537
| `remove(digest)` — per-space claim release; physical delete/piece-retire at zero global claims | Piri + Sprue + libforge | **exists** | `/blob/remove` on Sprue forwards `/blob/release` to Piri, which deletes the space's allocation/acceptance/claim; at zero claims bytes delete immediately (unaggregated) or via the pending-removal sweep once the whole aggregate root is dead (FIL-623/624). Sprue forwards to primary + replicas (FIL-522). |
538
538
| Configurable, adaptive size policy (`min`/`max`); batch guard for the `extraData` cap | Piri |**partial**|`MinAggregateSize` is hardcoded 128 MiB; lower to ~8 MiB and make configurable. The `addPieces` batch is no longer contract-capped (FWSS v1.3.0 removed the `extraData` cap); size it to the FVM `PiecesAdded` event-size + per-tx gas — a measured ceiling (default `BatchSize=10` is safely within it) (pdp-sim). No contract change. |
0 commit comments