CPalius CMF 2.2.18
Yayın: 2026-09-25 · Kanal: kararlı · Kritik: evet
2.2.11'den 2.2.16'ya kadar, derlenmiş container'ın güvensiz şekilde temizlenip yeniden inşa edilmesinden kaynaklanan bir çökme kovalandı — hepsi CoreUpdater/CacheRebuildManager'ın güncelleme hattının içindeydi. Bu sürüm, o sürümlerin hiçbirinin dokunmadığı bir yerde aynı sınıf hatayı düzeltiyor: AACP'nin kendi modül yönetimi ekranından bir modülü silmek veya devre dışı bırakmak.
Asıl sorun neydi
ModuleActivator::clearCache() hiçbir zaman CacheRebuildManager'ı kullanmadı. Kendi başına senkron bir bin/console cache:clear --no-warmup alt süreci çalıştırıyordu ve ardından container'ı bilerek inşa edilmemiş bırakıyordu — "bir sonraki gerçek istek onu kritik yoldan uzakta, tembel şekilde ısıtır" mantığıyla. O "bir sonraki istek" hiçbir zaman rastgele bir ziyaretçi değildi — bir modülü aktive etmek, devre dışı bırakmak ve silmek, hepsi doğrudan AACP'ye geri yönlendiriyor, yani bu boşluğa denk gelmesi garanti olan hep aynı yöneticinin kendi bir sonraki tıklamasıydı; tek bir HTTP isteğinin zaman/bellek bütçesine sıkıştırılmış satır içi bir container derlemesinin bedelini ödemek zorunda kalıyordu — tam olarak CacheRebuildManager'ın önlemek için var olduğu çökme türü.
Bir modülü silmek bunu kendi şekliyle daha da kötüleştirdi: modülün dosyaları hiçbir cache temizliği olmadan, hemen, istek içinde senkron olarak diskten kaldırılıyordu. O anda hâlâ sunulmakta olan container — modülün dosyaları hâlâ varken derlenmişti — o modülün şablon dizinini Twig yükleyicisine düz metin bir yol olarak gömülü hâlde taşıyor. Twig, yükleyicisi her kurulduğunda bir yolun var olduğunu doğruluyor, sadece derleme zamanında değil — yani "dosyalar gitti" ile "container yeniden inşa edildi" arasındaki boşluktaki HER istek Twig\Error\LoaderError fırlatıyordu, sadece yarışa denk gelen şanssız bir istek değil.
Ne düzeldi
ModuleActivator::clearCache() artık CacheRebuildManager::clearSymfonyCache()'i çağırıyor — uygulamadaki her diğer cache temizleme eyleminin zaten kullandığı, ertelenmiş, arka planda yeniden inşa eden aynı yol. Bir modülü silmek artık o yeniden inşa gerçekten bitene kadar modülün dosyalarını kaldırmıyor — kaldırma işlemi ikinci, ertelenmiş bir adım olarak zamanlanıyor, böylece sunulmakta olan container'da artık diskte var olmayan bir şablon yoluna asla rastlanmıyor.
Yükseltme
Şema değişikliği yok. Elle bir işlem gerekmiyor.