Atomisuus ja palautuminen
AtomicFilesystem::write_atomic() kirjoittaa väliaikaiseen tiedostoon, tyhjentää puskurit ja
kutsuu fsync-funktiota tiedostokahvalle, nimeää tiedoston uudelleen kohdepolun päälle ja yrittää kutsua fsync-funktiota
emohakemistolle. Epäonnistunut kirjoitus poistaa oman väliaikaistiedostonsa.
Kirjoittavat varasto-oliot rekisteröivät prosessikohtaisen tunnisteen polkuun
.storh/writers/ ja poistavat sen hallitun sammutuksen yhteydessä. Varastoa avattaessa tarkistetaan
tunnisteet: jos kaikkien tunnisteiden omistajaprosessit ovat käynnissä (tai tunnisteita ei ole), avaaminen tapahtuu vakioajassa. Jos omistajaprosessi on päättynyt, kirjoittaja on kaatunut, joten avaaminen käy koko kokoelman läpi etsien orpoja väliaikaistiedostoja ja poistaa vanhentuneen tunnisteen. repair() käy koko kokoelman aina läpi.
DocStore-korjaus eristää vioittuneet tai katkenneet tietuetiedostot hakemistoon
.storh/corrupt/ ja rakentaa toissijaiset indeksit uudelleen jäljellä olevista kelvollisista tietueista. DocStore-tarkistus vertaa myös indeksitiedostoja kaikkien tietueiden läpikäyntiin, jotta puuttuvat tai vanhentuneet indeksimerkinnät havaitaan ennen kuin niitä pidetään kunnossa olevina.
Vain lisäykseen perustuvat moottorit tyhjentävät ja synkronoivat lokitiedostokahvat levylle ennen kuin ne katsovat tapahtumien olevan muistissa vahvistettuja. Sähkökatkoksen kestävyys riippuu silti siitä, kunnioittavatko taustalla oleva tiedostojärjestelmä ja liitosasetukset tiedostojen ja hakemistojen synkronointia.
Segmentoitu loki kirjoittaa jokaisen rivin näin:
<byte-length>\t<xxh32>\t<json>\n
Luvussa tarkistetaan tavujen pituus ja tarkistussumma. Palautuksessa kukin segmentti luetaan ja tiedosto katkaistaan viimeiseen täydelliseen, kelvolliseen riviin, mikä poistaa keskeneräiset loppuun jääneet kirjoitukset. Tarkistus vertaa aktiivista johdettua tilaindeksiä riippumattomaan segmenttien uudelleenläpikäyntiin, jotta ulkoisesti muutettu tai vanhentunut tila havaitaan ennen sen uudelleenrakentamista korjauksen yhteydessä.
Jonon tarkistus purkaa jokaisen pysyvän jonotapahtuman ja vertaa nykyistä odottavien, käsittelyssä olevien ja valmiiden töiden, hyötykuorman sekä varausjärjestyksen tilaa riippumattomaan lokin uudelleenläpikäyntiin. Korjaus rakentaa tilan uudelleen kohteesta queue.log ja katkaisee keskeneräiset loppuun jääneet tapahtumat. Varausten ja valmistumisten aikana jonon lukko pidetään hallussa, kun tila synkronoidaan pysyvästä lokista, joten useat työntekijäprosessit eivät varaa samaa odottavaa työtä.
Tiivistys kirjoittaa uudet compact-*-segmenttitiedostot ja päivittää sitten manifestin. Jos prosessi päättyy ennen manifestin vaihtamista, uudelleenavaus poistaa viittaamattoman tiivistystulosteen ja jatkaa vanhasta manifestista. Valmiit tiivistykset jättävät vanhat suljetut segmentit tarkoituksella paikalleen, jotta niistä jo lukevat lukijat voivat jatkaa.