Make document deletion durable before physical file cleanup

This commit is contained in:
2026-09-06 10:44:47 +03:00
parent fa56e0fe83
commit 3b40061d96
5 changed files with 81 additions and 13 deletions
+8
View File
@@ -647,3 +647,11 @@ Hazırlık taslağı daha önce analizden yalnız kalem/belge listesi, kaynak s
Kaynak karşılaştırma imzasına bu bilgiler dahil edildi. Aynı doküman sürümünden yeni bir kritik şart çıkarılması artık eski kaynak onayını geçerli bırakmaz. Eski kayıtlar yeni imzayla yeniden kontrol gerektirir; fiyatlar/kullanıcı düzeltmeleri silinmez. Hazırlık formunda yeterlik/risk/koşullar başlangıçta açık bir bölümde gösterilir; genel karşılaştırma beyanı bunları da kapsar. Listenin eksiksiz veya koşulların karşılanmış olduğu iddia edilmez.
Test: taslak kaynak verisinin JSON kaydetme/okuma turunda yeterlik, ceza ve kanıtı koruması; kayıt öncesi/sonrası imzanın eşitliği; sekiz koşul kategorisindeki değişiklikte eski onayın geçersizleşmesi. Tüm 138 test ve üretim derlemesi geçti. Yeni koşul bölümünün tarayıcı/gerçek dosya kabulü açık. Büyük paket uyarıları sürüyor; canlı yayın yapılmadı.
### D01 — Belge silme ve fiziksel temizleme tutarlılığı
Önceden dosya önce siliniyor, ardından veritabanı kaydı kaldırılıyordu; SQL hatası sağlam belgenin baytlarını geri getiremiyordu. Şimdi belge/review kayıtlarının kaldırılması ve dosya temizleme kuyruğu aynı transaction içinde kaydedilir. Fiziksel unlink yalnız commit sonrasında yapılır. SQL hatasında dosya ve kayıt korunur.
Fiziksel temizleme başarısızsa belge uygulamadan erişilemez durumdadır; `document_file_cleanup` kuyruğu korunur ve sonraki veritabanı açılışlarında en fazla 100 dosya yeniden denenir. Yeniden başlatma için bellek içi görev gerekmez. Hâlen başka kayıt tarafından kullanılan dosya silinmez; belge dizini dışındaki yollar işlenmez. Bu, mantıksal silme ile fiziksel temizlemeyi ayırır; API başarısı kaydın erişimden kaldırıldığını ifade eder, bütün fiziksel baytların hemen temizlendiğini değil.
Migration sayısı 5 oldu. Testler: DELETE trigger hatasında gerçek dosya baytlarının ve kaydın korunması; dosya sistemi hatası için dosya yolunda dizinle unlink başarısızlığı; kayıt erişiminin kapanması; kuyruk kaydının yeniden açılışta korunması; sorun giderilince temizlenmesi. Eski unlink-hatasında-kayıt-kalır testi yeni kalıcı kuyruk sözleşmesine güncellendi. Tüm 140 test geçti. Üretim kodunda yalnız sunucu/depo değiştiğinden ön yüz derlemesi tekrarlanmadı. Zorla süreç öldürme/güç kesilmesi kabulü yapılmadı. Canlı yayın ve tam plan açık.
+4
View File
@@ -27,3 +27,7 @@ Yedek aracı SQLite snapshot oluşturur, bütünlük kontrolü yapar, referansl
## Mevcut kanıt
`tests/backup-user-data.test.mjs` izole SQLite ve gerçek Türkçe dosya baytlarıyla yedek/restore, hazırlık fiyatı, hedef üzerine yazmama ve değiştirilmiş yedeği reddetme senaryolarını doğrular. Üretim servis durdurma, volume yedeği ve platform geri dönüşü henüz denenmedi. Bu dosya yayın onayı veya tüm D11 tamamlandı beyanı değildir.
## Bekleyen dosya temizliği
`20260906_document_file_cleanup` migration'ı, mantıksal olarak silinmiş belgelerin fiziksel dosyalarını kalıcı kuyrukta tutar. Erişim kaydı ve temizleme görevi aynı transaction'da değişir; sonraki veritabanı açılışları temizliği yeniden dener. Dosya sistemi sorunu sürüyorsa kuyrukta kalır. Bu dosyalar aktif belge yedeğine dahil değildir; yedekte kuyruk kaydı bulunup dosya bulunmazsa yeniden açılışta ENOENT başarılı temizleme olarak ele alınır. Fiziksel silmenin anında tamamlandığı varsayılmamalı; işletim kontrolünde kuyruk büyüklüğü ve volume izinleri izlenmelidir.