Hi Huaxin

Thank you so much for starting this thread.

I gonna take a look: at first glance it looks good to me, especially
because it's not a "breaking" change thanks to the header.

Let me review the doc.

Thanks again,
Regards
JB

On Thu, Sep 11, 2025 at 1:37 PM huaxin gao <huaxin.ga...@gmail.com> wrote:
>
> Hi all,
>
> I’d like to propose adding *optional idempotent retries* to Polaris REST
> mutation endpoints via an Idempotency-Key header.
>
> *The Problem*
> When a mutation (e.g., POST /v1/tables/{name}/commit) succeeds but the
> client doesn’t receive the response (timeout, restart, etc.), a retry can
> hit 409 Conflict. Some clients then treat this as a failed commit and clean
> up files that actually belong to the committed snapshot, causing
> catalog/storage inconsistency.
>
> *The Proposed Solution*
> Accept Idempotency-Key on mutation routes. The server binds the key to a
> canonical payload hash and enforces:
>
>    -
>
>    *Same key + same payload* -> return the original result (no
>    re-execution).
>    -
>
>    *Same key + different payload* -> 422 Unprocessable Content.
>    -
>
>    *In-flight duplicate* -> 409 Conflict.
>    Transient 5xx are never cached.
>
> *Discovery & Compatibility*
> When serving Iceberg REST, Polaris can advertise support and retention via GET
> /v1/config, e.g.:
>
> { "properties": { "idempotency-key-supported": "true",
>                   "idempotency-key-lifetime": "PT30M" } }
>
> Fully backward compatible: servers may ignore the header; clients enable
> retries only when discovery indicates support.
>
> This is the *server-side counterpart* to the Iceberg REST Catalog
> Idempotency proposal
> <https://docs.google.com/document/d/1WyiIk08JRe8AjWh63txIP4i2xcIUHYQWFrF_1CCS3uw/edit?tab=t.0#heading=h.jfecktgonj1i>
> I sent to the Iceberg community.
> Here is the Polaris proposal
> <https://docs.google.com/document/d/1L5A8Cspugsk1dW4Ij4dy5wB5FKa8KnaXT0LHBJdgq9w/edit?usp=sharing>.
> Feedback welcome!
>
> Thanks,
>
> Huaxin

Reply via email to