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
