Super admin paneli 502 Bad Gateway — PDOStatement cast warning loop
Yüksek Çözüldü
2026-06-22 13:30 · Etkilenen: Süper admin paneli (giriş sonrası dashboard)
-
2026-06-22 13:37
MigrationRunner DDL-unsafe çıktı: ilk migrate.php çağrısı "There is no active transaction" verdi. MySQL'de CREATE/ALTER TABLE implicit commit yapar.
inTransaction()guard up() ve rollback() içine eklendi. -
2026-06-22 13:35
İkincil noise tespit edildi:
td_master.audit_logtablosu yoktu, SA login event'i audit'e yazılamıyor SQLSTATE 42S02 üretiyordu. Master DB'de tablo oluşturuldu,init_master.php+ versioned migration20260622_000001eklendi. -
2026-06-22 13:31
Hotfix deploy: ölü kod kaldırıldı, hemen altındaki
$cntSt = $tdb->prepare(...); $cntSt->execute(); $cnt = (int)$cntSt->fetchColumn();doğru kullanımı kaldı. -
2026-06-22 13:30
Root cause tespit edildi:
super_admin/index.php:41-44'te ölü kod ($cnt = (int)$tdb->prepare(...)) PDOStatement'i int'e cast etmeye çalışıyordu. Bu yalnızca warning, ama 22 aktif tenant'a karşı for-loop'ta tetiklenince Logger her seferinde tek satır JSON'u FastCGI stderr'e basıyordu. nginx tarafındaupstream sent too big header→ 502. -
2026-06-22 09:48
İlk hata raporu: kullanıcı SA login sonrası
/super_admin/index.php'te 502 Bad Gateway alıyor.
Postmortem
Tetikleyici: Geçen sprintlerde
super_admin/index.php'e online users mantığı eklenirken eski 4 satırlık deneme blok silinmemiş, ölü kod kalmıştı. Tek başına PHP warning, ama Logger sayesinde her warning artık stderr'e structured log basıyor; aktif tenant sayısı arttıkça (22+) header buffer'a sığmaz oldu. Önlemler: (1) ölü kod kaldırıldı, (2) Logger'ın FastCGI stderr basma davranışı yeniden değerlendirilecek — same-message dedup (rate-limit per-request) bir sonraki sprintte eklenebilir, (3) MigrationRunner DDL-safe oldu — gelecekteki tüm CREATE/ALTER TABLE migration'ları "transaction yok" exception'ı yaşamayacak, (4) master DB'de artık audit_log tablosu var, SA işlemleri (login, tenant create/delete, ai_kb edit) cross-tenant audit_search'te görünecek.