HotSushi opened a new issue, #2443: URL: https://github.com/apache/iceberg-go/issues/2443
### Feature Request / Improvement # Feature Request / Improvement The REST catalog spec defines an optional Idempotency-Key header for mutating requests. A server signals support by returning idempotency-key-lifetime (an ISO-8601 duration such as PT30M) in the GET /v1/config response. PyIceberg does not send the header yet. Java iceberg-core already implements this. The reference PRs are https://github.com/apache/iceberg/issues/14740(send the header), https://github.com/apache/iceberg/issues/17947(retry keyed requests on 5xx), and https://github.com/apache/iceberg/issues/18070 (stop retrying after the lifetime window). ## Spec references - Header parameter and key rules: idempotency-key parameter in [open-api/rest-catalog-open-api.yaml](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml) - Lifetime: idempotency-key-lifetime in the config response, same file ## Requested behavior - Read idempotency-key-lifetime from the config response. If it is absent, send no header. - When it is present, send Idempotency-Key with a new UUIDv7 on mutating calls. The spec declares the parameter on createNamespace, dropNamespace, updateProperties, createTable, and registerTable, among others. Do not send it on reads. - Reuse the same key when retrying the same logical operation. Use a new key for a different operation. - Retry only with the same key. Stop retrying once the lifetime window has passed. ## Test idea a mock server returns 503 on the first commit and 200 on the second. Assert that both requests carry the same key and that a read request has no key. \* Drafted with AI assistance. I reviewed the spec links and reference PRs. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
