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:
- Ü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.
- Vahetult pärast esimese kontrollpunkti lõpetamist käivitub teine.
- Kuna teine kontrollpunkt sammust 2 käivitub, fikseerib teine andmebaasiühendus tehingu, mis kustutab WAL-faili ja salvestab uue sisu WAL-faili algusesse.
- 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.
- Täiendavate tehingute fikseerimine suurendab WAL-failis lehtede arvu, mis ületab lehtede arvu, mis oli esimese kontrollpunkti hetkeks sammust 1.
- 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
