apache / apache/iceberg-python

Retry Behavior for SigV4Adapter in REST Catalog

Aberta
#3,008 2 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Python
Estrelas
1.1k
Forks
588
Merge médio
1d 23h
PRs com merge (30d)
84

Descrição

### Feature Request / Improvement

Hi team,

I’ve recently migrated to AWS S3 Tables and switched from using the GlueCatalog to the REST catalog. After updating the catalog configuration, everything works correctly in local, single‑process scenarios. However, I’m encountering intermittent failures when scaling out to multiple Dask workers making parallel requests.
Specifically, I’m seeing occasional `ThrottlingException` errors coming from AWS SigV4‑signed requests. Once throttling occurs, subsequent requests sometimes fail with:
`requests.exceptions.HTTPError: 403 Client Error`

My understanding is that throttled SigV4 signing attempts can lead to follow‑on request failures, resulting in unauthorized S3 operations. According to AWS’s recommendation for handling throttling on signed requests, retry configuration should be applied via botocore: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html

While reviewing the PyIceberg implementation, I noticed:

- The GlueCatalog sets reasonable default retry settings on the underlying boto session: https://github.com/apache/iceberg-python/blob/main/pyiceberg/catalog/glue.py#L331-L348
- The REST catalog, and specifically the SigV4Adapter, does not appear to configure any retry behavior by default: https://github.com/apache/iceberg-python/blob/main/pyiceberg/catalog/rest/__init__.py#L684-L694

This creates an inconsistency where switching from Glue to REST results in weaker retry behavior, which becomes visible under parallel load.

### Question / Proposal
Should the REST catalog align its default retry behavior with what GlueCatalog already applies?
At present, users can manually configure retry settings by supplying a custom botocore session via catalog properties, but I am yet to test if this works. It seems reasonable and more consistent for the REST catalog to provide safe defaults, especially since SigV4Adapter is now a common path for AWS S3 Tables.

Matching (or at least approaching) the GlueCatalog’s retry policy would provide the following benefits:

- Avoid intermittent throttling‑triggered failures in distributed workloads
- Improve parity between Glue and REST behavior
- Reduce the configuration burden on users switching to REST for AWS‑backed tables

Happy to discuss or test any proposed changes. Thanks for your work on the project!

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Direção de pesquisa

Compare a configuração de retry do GlueCatalog em pyiceberg/catalog/glue.py#L331-L348 com a configuração do REST SigV4Adapter em pyiceberg/catalog/rest/__init__.py#L684-L694 e, em seguida, leia as orientações de retry do botocore vinculadas na issue. Verifique como uma sessão botocore personalizada é fornecida por meio das propriedades do catálogo. Considera-se concluído quando as solicitações REST tiverem uma política de retry padrão segura e acordada, e o comportamento for consistente com o Glue sob throttling e cargas de trabalho paralelas.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
aws, python
Domínio
api, cloud
Tipo de issue
Funcionalidade
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
55/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.