İçeriğe geç

CPalius CMF 2.2.19

Yayın: 2026-09-25 · Kanal: kararlı · Kritik: hayır

Yoğun bir AACP sayfası Update hook could not be inspected. {exception: MaxQueriesExceededException} diye loglayabiliyordu — ölümcül değil, yakalanıp loglanıyordu, ama log gürültüsü olarak bırakmak yerine kökten düzeltmeye değerdi.

Aslında ne oluyordu

UpdateHookLedger ve ReleaseChecker, her biri cp_settings'in tek bir satırını — kendi iç muhasebe anahtarını — istek başına bir kez okuyordu, zaten doğru şekilde önbelleklenmiş hâlde. Tek tek bakıldığında ikisi de yanlış bir şey yapmıyordu. Ama her biri, sayfa için SettingsRegistry'nin zaten okuduğu şeyin ÜSTÜNE, cp_settings'e kendi ayrı SELECT'ini atıyordu. Bunlardan birkaçına dokunacak kadar yoğun bir sayfada (bekleyen güncellemeleri, son sürümü ve bu defteri kontrol eden bir kontrol paneli, artı sayfanın render ettiği kayıtlı ayarlar), tablonun ayrı sorgu sayısı, gerçek N+1 döngülerini yakalamak için var olan on-sorgu-başına-istek korumasını (Law 6.1) aşabiliyordu. Burada gerçek bir döngü yok — sadece aynı tabloya inen birkaç iyi davranan okuyucu — ama koruma bunu ayırt edemiyor, ve hangi okuma son sıradaysa o reddediliyor.

Ne düzeldi

SettingsRegistry'ye getRaw() eklendi: get()'in zaten her şeyi sunduğu aynı toplu yüklenmiş, cache.app'te önbelleklenmiş değerler haritasına, tanım gerektirmeyen bir erişim — hiçbir zaman yönetici tarafından düzenlenebilir bir ayar olması amaçlanmamış iç anahtarlar için, sırf paylaşılan önbellek elde etmek için ayarlar arayüzüne girmeleri gerekmesin diye. UpdateHookLedger ve ReleaseChecker artık kendi sorgularını çalıştırmak yerine bunun üzerinden okuyor, ikisini de zaten olacak bir okumaya katlıyor. İkisi de yazdıktan sonra bu önbelleği geçersiz kılıyor, böylece az önce çalışan bir kanca veya az önce yenilenen bir sürüm, önbelleğin TTL'ini beklemek yerine hemen görünüyor.

Yükseltme

Şema değişikliği yok. Elle bir işlem gerekmiyor.

Son güncelleme: 13.10.2026