Skip to content

fix: shared cross-thread 429 backoff gate instead of per-request retry - #5

Merged
metehanboy merged 1 commit into
mainfrom
fix/tgt-race-parallel-calls
Jul 28, 2026
Merged

metehanboy merged 1 commit into
mainfrom
fix/tgt-race-parallel-calls

Conversation

@metehanboy

Copy link
Copy Markdown
Owner

Gateway RateLimit-Reset header often returns '0', so the old retry loop waited 0s and retried instantly, deepening throttling (limit dropped 50->25->12->6 req/60s within seconds under concurrent load). Each thread also decided independently with no shared state.

Add a process-wide rate-limit gate: 429 backs off with floor/cap exponential wait + jitter (ignoring the unreliable header value), and every request (any thread, any HTTPClient instance) waits on the same gate before firing. 429 retries get their own budget, separate from generic/TGT retry counts.

Değişiklik Açıklaması

Bu PR'ın ne yaptığını açık ve öz bir şekilde açıklayın.

Değişiklik Türü

Lütfen ilgili kutucuğu işaretleyin:

  • Bug fix (hataları düzelten değişiklik)
  • Yeni özellik (geriye uyumlu değişiklik)
  • Breaking change (geriye uyumlu olmayan değişiklik)
  • Dokümantasyon güncellemesi
  • Kod refactoring
  • Performans iyileştirmesi
  • Test ekleme/güncelleme

İlgili Issue

Bu PR hangi issue'yu çözüyor? (varsa)

Closes #

Değişiklik Detayları

Ne Değişti?

  • Değişiklik 1
  • Değişiklik 2
  • Değişiklik 3

Neden Değişti?

Değişikliğin nedenini açıklayın.

Nasıl Test Edildi?

Değişikliklerin nasıl test edildiğini açıklayın:

  • Mevcut testler geçiyor
  • Yeni testler eklendi
  • Manuel test yapıldı
  • Test sonuçları eklendi

Test Sonuçları

# Test komutları ve sonuçları buraya ekleyin
pytest
# Sonuçlar: ...

Ekran Görüntüleri

Varsa, değişiklikleri gösteren ekran görüntüleri ekleyin.

Kontrol Listesi

PR göndermeden önce aşağıdakileri kontrol edin:

  • Kodumu formatladım (black, isort)
  • Mevcut testler geçiyor
  • Yeni testler ekledim (eğer gerekiyorsa)
  • Dokümantasyonu güncelledim (eğer gerekiyorsa)
  • Commit mesajlarım açıklayıcı
  • Kod standartlarına uyuyorum
  • Type hints ekledim (mümkünse)
  • Docstring'ler ekledim (mümkünse)

Breaking Changes

Bu PR breaking change içeriyor mu?

  • Evet (aşağıda açıklayın)
  • Hayır

Breaking Changes Detayları

Eğer breaking change varsa, detaylarını açıklayın:

  • Ne değişti?
  • Kullanıcılar ne yapmalı?

Ek Notlar

Eklemek istediğiniz başka bir şey var mı?

Review Notları

Reviewer'lar için özel notlar (varsa):

Gateway RateLimit-Reset header often returns '0', so the old retry loop
waited 0s and retried instantly, deepening throttling (limit dropped
50->25->12->6 req/60s within seconds under concurrent load). Each thread
also decided independently with no shared state.

Add a process-wide rate-limit gate: 429 backs off with floor/cap
exponential wait + jitter (ignoring the unreliable header value), and
every request (any thread, any HTTPClient instance) waits on the same
gate before firing. 429 retries get their own budget, separate from
generic/TGT retry counts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@metehanboy
metehanboy merged commit ef43567 into main Jul 28, 2026
2 of 3 checks passed
@metehanboy
metehanboy deleted the fix/tgt-race-parallel-calls branch August 1, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant