13. märtsil toimus kompaktse sisseehitatud DBMS versiooni 3.51.3 korrigeeriv väljalase SQLite. Projekti kood on kirjutatud C keeles ja levitatakse kui avalik domeen.
Seoses tagurpidi ühilduvuse probleemidega, mis on seotud mõne uue funktsiooniga, versioon 3.52.0 (mis ilmus 6. märtsil) võeti tagasi.
Versiooni 3.51.3 muudatuste loetelu:
- 3. märtsil avastas ja kõrvaldas üks SQLite arendajatest (Dan) vea, mis harvadel juhtudel võis põhjustada andmebaasi kahjustumist ja mille nimeks oli «WAL-reset bug»:
- See viga ilmneb ainult andmebaasides, mis töötavad WAL-režiimis, kui sama faili avab kaks või rohkem ühendust erinevates lõngades või protsessides, ja kui need kaks ühendust üritavad samal ajal kirjutada või luua kontrollpunkti.
- Viga on seotud andmete ligipääsu konfliktiga rangete ajapiirangute korral. Tavalistes töötingimustes esineb see äärmiselt harva. Arendajatel ei õnnestunud seda viga looduslikes tingimustes korrata ning nad pidid SQLite-sse lisama erilise testimise loogika, mis tahtlikult loob tingimused vea tekkimiseks, et veenduda, et probleem on lahendatud.
- Viga ilmneb, kui:
- Üks ühendus teostab kontrollpunkti kontrollimist. See esimene kontroll peab olema lõpetatud. Teisisõnu, kontrolli käigus tuleb tõhusalt kopeerida kogu WAL-faili sisu tagasi andmebaasi ja viia WAL-fail seisundisse, kus seda saab lähtestada.
- Kohe pärast esimese kontrollpunkti lõpetamist käivitatakse teine.
- Kuni käivitatakse teine kontrollpunkt, mis tuleneb punktist 2, fikseerib teine andmebaasiühendus tehingu, mis lähtestab WAL-faili ja salvestab uue sisu WAL-faili algusesse.
- Andmete ligipääsu konflikti tõttu ei arvestata teise kontrollpunkti puhul, mis tuleneb punktist 2, et WAL-fail oli lähtestatud tulemuste fikseerimise tõttu punktis 3. Teine kontrollpunkt seadmise vale väärtuse üheks võtmest WAL-indeksi päisesse. See väli näitab, et osa WAL-failist on juba fikseeritud kontrollpunktis, kuigi tegelikult on see vale.
- Lisatehingute fikseerimine viib WAL-failis lehekülgede arvu suurenemiseni, mis ületab lehekülgede arvu, mis eksisteeris esimese kontrollpunkti ajal punktis 1.
- Hiljem, kui kolmas kontrollpunkt tekib, jätab see vahele kogu või osa tehingust, mis on salvestatud etapis 3. Seetõttu ei satu etapi 3 tehingu osad andmebaasifaili, mille tulemusel on andmebaasifail kahjustatud.
- Viga on tõenäoliselt olemas kõigis SQLite versioonides alates 3.7.0 (21.07.2010) kuni 3.51.2. Samuti on välja antud parandused mõnedele varasematele versioonidele: 3.44.6 ja 3.50.7.
- Teised vähem tähenduslikud parandused.
Allikas: linux.org.ru
