raunaqmorarka opened a new issue, #17824:
URL: https://github.com/apache/iceberg/issues/17824

   ### Apache Iceberg version
   
   1.10.0 (also affects `main`)
   
   ### Query engine
   
   None (direct REST client)
   
   ### Please describe the bug 🐞
   
   This tracks a server-side deviation in the AWS Glue Iceberg REST catalog 
endpoint, plus the
   client-side workaround for it in this repo (PR #17710). The endpoint is an 
AWS-operated service, so
   the actual fix (returning 429) has to happen inside AWS. This issue exists 
to document the behavior
   and anchor the workaround.
   
   The AWS Glue Iceberg REST catalog endpoint responds to throttling with 
**HTTP 400** and an
   `x-amzn-ErrorType: ThrottlingException` header, rather than the **HTTP 429** 
the Iceberg REST
   spec mandates for rate limiting.
   
   The REST spec models rate limiting as 429 (see the `loadTable` responses in 
`open-api/rest-catalog-open-api.yaml`),
   and Iceberg's own retry logic keys off the status code. 
`ExponentialHttpRequestRetryStrategy` retries
   429 (and 503/502/504) but treats 400 as a non-retryable client error. So 
under Glue throttling, clients
   see a hard failure with no backoff instead of retrying, even though the 
condition is transient.
   
   #### Reproduction
   
   SigV4-signed GET requests (service `glue`, region `us-east-2`) to the Glue 
IRC endpoint, first
   resolving the prefix from `/v1/config`, then hammering `loadTable` from 32 
threads:
   
   ```
   GET 
https://glue.us-east-2.amazonaws.com/iceberg/v1/catalogs/<account-id>/namespaces/<ns>/tables/<table>
   ```
   
   Out of ~1920 successful loads, at least one came back throttled:
   
   ```
   HTTP/1.1 400
   Date: Wed, 26 Aug 2026 13:07:44 GMT
   Content-Type: application/json
   Content-Length: 27
   x-amzn-RequestId: a60d6960-0776-46fd-ba82-f5113fe71fb1
   x-amzn-ErrorType: 
ThrottlingException:http://internal.amazon.com/coral/com.amazon.coral.availability/
   
   {"message":"Rate exceeded"}
   ```
   
   The status line is `400`, the error type is carried only in the 
`x-amzn-ErrorType` header, and the
   body is the AWS Coral `{"message":"Rate exceeded"}` shape rather than the 
Iceberg `ErrorResponse` schema.
   
   #### Impact
   
   - Generic Iceberg REST clients get a non-retryable 400 on a transient 
throttle. Instead of backing
     off and retrying, they fail the request (or fail the whole commit), which 
is exactly the opposite
     of the intended throttling behavior.
   - Any HTTP-status-based retry strategy (Iceberg's default 
`ExponentialHttpRequestRetryStrategy`, and
     most third-party ones) will not retry, because 400 is a client error.
   
   #### Expected behavior
   
   The Glue IRC endpoint should return **429 Too Many Requests** for 
throttling, per the Iceberg REST
   spec, so standard clients back off and retry. The fix is server-side within 
AWS Glue; there is no
   public repo that owns it, so this issue tracks the deviation and the client 
workaround.
   
   #### Related
   
   - PR https://github.com/apache/iceberg/pull/17710 adds the client-side 
workaround: retry REST
     requests rejected with a 400 that carries the AWS throttling error type. 
That workaround is only
     needed because of this server-side deviation from the spec.


-- 
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]

Reply via email to