SQLite 3.51.3, mis parandab võimalikke andmebaasi rikete tekkimist WAL-režiimis.

SQLite 3.51.3, mis parandab võimalikke andmebaasi rikete tekkimist WAL-režiimis.

13. märtsil toimus Compact Embedded DBMS versiooni 3.51.3 korrigeeriv väljalase. SQLite. Projekti kood on kirjutatud C keeles ja on vabastiilis (public domain).

Seoses tagasiühilduvuse probleemidega, mis tulenevad mõningatest uutest funktsioonidest, versioon 3.52.0 (mis ilmus 6. märtsil) eemaldati.

Versiooni 3.51.3 muudatuste loetelu:

  • 3. märtsil avastas üks SQLite arendajatest (Dan) vea, mis harvadel juhtudel võis põhjustada andmebaasi kahjustamist ja mida nimetatakse „WAL-reset bug“:
    • See viga ilmneb ainult andmebaasides, mis töötavad WAL-režiimis, kui sama faili on avatud kaks või enam ühendust erinevates thread'ides või protsessides ning kui need kaks ühendust üritavad samaaegselt kirjutada või luua kontrollpunkte.
    • Viga on seotud andmete juurdepääsu konfliktil kõvade ajapiirangute korral. Tavalistes töötingimustes esineb see äärmiselt harva. Arendajatel ei õnnestunud seda viga loomulikes tingimustes rekonstrueerida ning nad pidid SQLite-sse lisama spetsiaalse testimise loogika, mis tahtlikult loob tingimusi vea tekkimiseks, et veenduda probleemi lahendamises.
    • Viga ilmneb, kui:
      1. Üks ühendus viib läbi kontrollpunkti. See esimene kontroll peab olema lõpule viidud. Teisisõnu, kontrollimise käigus tuleb edukalt kopeerida kogu WAL-faili sisu tagasi andmebaasi ja viia WAL-fail seisundisse, kus see saab kustutada.
      2. Vahetult pärast esimese kontrollpunkti lõpetamist käivitub teine.
      3. Kuna teine kontrollpunkt sammust 2 käivitub, fikseerib teine andmebaasiühendus tehingu, mis kustutab WAL-faili ja salvestab uue sisu WAL-faili algusesse.
      4. Andmete juurdepääsu konflikti tõttu ei arvesta teine kontrollpunkt sammust 2, et WAL-fail oli kustutatud tehingu fikseerimise tõttu sammust 3. Teine kontrollpunkt seadistab vale väärtuse ühele WAL-i indeksipea välja. See väli näitab, et osa WAL-failist on juba kontrollpunktis fikseeritud, kuigi see ei ole nii.
      5. Täiendavate tehingute fikseerimine suurendab WAL-failis lehtede arvu, mis ületab lehtede arvu, mis oli esimese kontrollpunkti hetkeks sammust 1.
      6. Hiljem, kui tekib kolmas kontrollpunkt, jätab see kogu või osa tehingust, mis on registreeritud 3. etapis, vahele. Seetõttu ei pääse 3. etapi tehingu osad andmefaili, mis toob kaasa andmefaili rikke.
    • Viga esineb tõenäoliselt kõigis SQLite versioonides alates 3.7.0 (21.07.2010) kuni 3.51.2. Samuti on välja antud parandused mõnele varasemale versioonile: 3.44.6 ja 3.50.7.
  • Teised väikesed parandused.

Allikas: linux.org.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster