Atomiklik ve Kurtarma
AtomicFilesystem::write_atomic() geçici bir dosyaya yazar, bu dosya tanıtıcısını flush edip fsync ile diske işler, dosyayı hedef yolun üzerine yeniden adlandırır ve üst dizini fsync ile diske işlemeyi dener. Başarısız yazmalar kendi geçici dosyalarını siler.
Yazma yapan store örnekleri, .storh/writers/ altında süreç başına bir işaretçi kaydeder ve düzgün kapanışta bunu kaldırır. Bir store açılırken bu işaretçiler denetlenir: tüm işaretçilerin sahibi hâlâ çalışıyorsa (veya hiç işaretçi yoksa) açılış sabit zamanda tamamlanır; sahibi artık çalışmayan bir işaretçi, yazıcının çöktüğü anlamına gelir. Bu durumda açılış, koleksiyondaki sahipsiz geçici dosyaları tarar ve eski işaretçiyi temizler. repair() ise her zaman tarama yapar.
DocStore onarımı, bozuk veya kesilmiş kayıt dosyalarını .storh/corrupt/ altına karantinaya alır ve kalan geçerli kayıtlardan ikincil dizinleri yeniden oluşturur. DocStore doğrulaması ayrıca dizin dosyalarını tüm kayıtların taranmasıyla karşılaştırır; böylece eksik veya güncelliğini yitirmiş dizin girdileri sağlıklı kabul edilmeden önce bildirilir.
Yalnızca sona ekleme yapan motorlar, olayları bellekte işlenmiş kabul etmeden önce günlük dosyası tanıtıcılarını flush edip fsync ile diske işler. Elektrik kesintisine karşı dayanıklılık yine de dosya sisteminin ve bağlama seçeneklerinin dosya ve dizin senkronizasyonunu uygulamasına bağlıdır.
Bölümlere ayrılmış günlükte her satır şu şekilde yazılır:
<byte-length>\t<xxh32>\t<json>\n
Okumalar bayt uzunluğunu ve sağlama toplamını doğrular. Kurtarma, her bölümü tarar ve dosyayı son eksiksiz, geçerli satırda keserek tamamlanmamış sondaki yazmaları kaldırır. Doğrulama, etkin türetilmiş durum dizinini bağımsız bir bölüm tekrar oynatımıyla karşılaştırır; böylece dışarıdan değiştirilmiş veya güncelliğini yitirmiş durum, onarım bunu yeniden oluşturmadan önce bildirilir.
Kuyruk doğrulaması, kalıcı tüm kuyruk olaylarının kodunu çözer ve bekleyen, işlenen, tamamlanan, yük ve talep sırası durumlarını bağımsız bir günlük tekrar oynatımıyla karşılaştırır. Onarım bu durumu queue.log öğesinden yeniden oluşturur ve sondaki yarım kalmış olayları keser. Birden fazla çalışan sürecin aynı bekleyen işi almasını önlemek için talepler ve tamamlamalar, kalıcı günlükle eşitlenirken kuyruk kilidini tutar.
Sıkıştırma yeni compact-* bölüm dosyaları yazar ve ardından manifesti günceller. Manifest değiştirilmeden önce bir süreç kapanırsa yeniden açılış, referans verilmeyen sıkıştırma çıktılarını siler ve eski manifestle devam eder. Tamamlanan sıkıştırmalar, bu dosyalardan okumakta olan okuyucuların çalışmaya devam edebilmesi için eski mühürlü bölümleri kasıtlı olarak yerinde bırakır.