Skip to content

Admin game-detail sayfası büyük oyunlarda 500 / "Game Not Found" — /details + /iterations yanıtı Cloud Run 32 MiB limitini aşıyor #21

Description

@yildirimalperen

Belirti (somut örnek)

ongame.ai/admin/games/d5ff84a6-7b45-4c54-8bc2-759275a3678b ("Swipe & Slay", Erdem) açılınca "Game Not Found — The game session you requested could not be found."

Oyun aslında tamamen sağlam: DB'de mevcut, is_archived=false, oyun listesinde #1, ve admin MCP (get_game_details, get_game_iterations, get_iteration_context) tüm veriyi sorunsuz döndürüyor. Sorun yalnızca web detay sayfasında.

Mevcut davranış (kanıtlanmış)

Detay sayfası iki backend endpoint'i çağırıyor, ikisi de 500 dönüyor (prod Cloud Run logları, 12:23→12:48 boyunca sürekli, tek oyuna özgü):

  • GET /api/admin/games/{id}/details
  • GET /api/admin/games/{id}/iterations?reconstruct_prompts=true

Frontend (GameDetailClient) bu 500'leri alınca "Game Not Found" basıyor.

Kök-neden: Cloud Run 32 MiB yanıt limiti

App yanıtı üretiyor (uvicorn access logu 200) ama Cloud Run egress'te kesip istemciye 500 döndürüyor. Kanıt:

  • Cloud Run sistem logu (run.googleapis.com/varlog/system): WARNING: Response size was too large. Please consider reducing response size. — platform kaynaklı, app değil.
  • Büyüme→eşik geçişi: /details son başarılı 200 = 30,240,481 byte (~28.8 MB), ardından kalıcı 500 (32 MiB = 33.5 MB eşiği).
  • Trace-join: taze trafikte 17 size-uyarısı ↔ 17 adet 500, birebir; her 500'ün (5 details + 12 iterations) aynı trace'inde size-uyarısı var.
  • Kontrast: küçük kardeş oyun (Paddle Epoch Duel) /details=47 KB, /iterations=443 KB → 200, sorunsuz.

Payload'u şişiren: bu oyunun 244 iteration_snapshot'ı (≈22 MB ham metin) reconstruct_prompts=true ile her iterasyon için prompt'a genişletiliyor → toplam 32 MB'ı aşıyor. Mekanizma: yanıt boyutu iterasyon sayısıyla sınırsız büyüyor, limit ise sabit 32 MB. Dolayısıyla bu tek oyuna özgü bir kaza değil — yeterince iterasyon biriken her oyun aynı eşiği geçecektir (yalnız Swipe & Slay'de doğrulandı; genel risk mekanizmadan çıkıyor).

Etki

Admin, yeterince büyük/uzun oyunların detay sayfasını hiç açamıyor (debug/gözlem körlüğü); oyun büyüdükçe kalıcılaşıyor. User-facing değil (yalnız admin paneli). Veri kaybı yok.

Kapsam dışı bırakılanlar (yanlış teşhis tuzakları)

Veri silinmesi/arşiv DEĞİL · RLS/JWT DEĞİL · Supabase 521 (12:23'teki anlık blip) DEĞİL · yüklenen asset DEĞİL (oyunun 55 image asset'i URL olarak ~2 MB, prompt'a gömülmüyor; mesaj/snapshot'larda 0 base64).

Önerilen yön (en dar fix)

/iterations ve /details payload'unu sınırla — yanıtın iterasyon sayısıyla sınırsız büyümesini engelle:

  • /iterations'ı paginate et (sayfa başına N iterasyon), ve/veya reconstruct_prompts'u lazy yap — prompt'u yalnız kullanıcı bir iterasyonu açtığında, tek iterasyon için kur (zaten get_iteration_context per-iter çalışıyor).
  • /details'i de büyük alt-koleksiyonları (tüm iterasyon/mesaj içeriği) inline göndermeyecek şekilde kırp/paginate.

Hedef: tek HTTP yanıtının 32 MiB'ı asla aşmaması.

Nasıl doğrulanır

  • Repro: büyük bir oyunu (örn. d5ff84a6-7b45-4c54-8bc2-759275a3678b) admin detayda aç → "Game Not Found"; DevTools'ta /details ve /iterations?reconstruct_prompts=true = 500.
  • Prod log: gcloud logging read 'resource.type="cloud_run_revision" AND textPayload=~"Response size was too large"' → 500'lerle birebir trace eşleşmesi.
  • Fix sonrası: aynı oyun detayda açılmalı; her iki endpoint 200 ve her yanıt < 32 MiB olmalı (büyük oyunda da).

Kaynak: 2026-06-25 canlı prod debug oturumu (Cloud Run logları + Supabase). Kök-neden trace-join + büyüme→eşik ile doğrulandı; silinme/RLS/Supabase-521/asset hipotezleri çürütüldü.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions