Repository navigation
rfc: dynamic routing candidates - #15
Conversation
Per RFC fil-one/RFC#15 (dynamic affinity routing), adds an optional `affinity` field to `AddArguments` that accepts a list of storage-node DIDs. When present, it constrains routing to the specified nodes. Regenerates cbor_gen.go and json_gen.go accordingly.
|
I am generally in favor of minimizing central state tracking as much as possible but I'm a bit anxious that this could lead to e.g. dropping multiparts on the floor without an easy way for anyone to find them after clients think everything is ACK'd = pushes dealing with that to Ingot/ (ref |
I'm not sure I follow... |
consider this situation:
I might be misunderstanding the receipt retention design? (but the way I'm reading it another problem is that all receipts need to be retained for entire blob lifecycle as the only authoritative source of truth, otherwise removes would break -- the receipt chain + indexer design also triggering some IPNI PTSD but that's neither here nor there) |
|
this appears to now be superseded by #20 (I will re-raise the above concern there) |
When we accept, we look up the allocation task receipt (referenced by the |
|
right, the receipt chain pins placement per-blob, so mixed placement across affinity changes is fine -- so retries are ok what I'm more worried about is the crash window: lookup at accept works when things are still churning. if ingot ACKs the S3 request and then dies/cycles before concluding all parts, the receipts exist at sprue but nothing progresses them and (per the removal RFC) a parked blob's only handle is its /blob/add task link/cause so: ingot must durably persist per-part task links before the S3 ACK, so recovery can resume conclude/accept or abort -- otherwise the parts are stranded until allocation expiry, which I don't think is specified yet? (encryption makes this more complicated) |
It does this already: The crash window you describe can't open, because accepts are performed on the Complete request path: every part is concluded and its There is one narrow gap: a session a crash strands mid-Complete is currently reaped without aborting its parked blobs, which do then fall back to allocation expiry. I'll open a PR to fix that. |
<!-- rfc-preview-link:start --> [📖 Preview](https://github.com/fil-one/RFC/blob/ash%2Frfc%2Frouting-policies/rfcs/2026-08-routing-policies.md) <!-- rfc-preview-link:end --> ## Summary Spaces are configured to use a **routing policy** which specifies the candidate nodes that can receive a blob. The policy can change over time but the reference to it does not. It is an alternative affinity routing proposal that allows blobs uploaded to spaces to be routed to a particular storage node _without having to specify said node in every invocation_.
|
We're going to go with #20 but this RFC is retained (with deferred notice) for reference. |
sorry I failed to respond here previously: that design is correct, the framing led me to think it worked differently, this is reasonable to keep for future reference 👍 |
📖 Preview
Summary
Proposal for an alternative to the presupposed "static" affinity routing where ALL writes to a given space are routed to a specific storage node.