SQLite 3.51.3 koos võimaliku WAL-režiimi andmebaasi kahjustamise parandamisega

SQLite 3.51.3 koos võimaliku WAL-režiimi andmebaasi kahjustamise parandamisega

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:
      1. Ü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.
      2. Kohe pärast esimese kontrollpunkti lõpetamist käivitatakse teine.
      3. 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.
      4. 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.
      5. Lisatehingute fikseerimine viib WAL-failis lehekülgede arvu suurenemiseni, mis ületab lehekülgede arvu, mis eksisteeris esimese kontrollpunkti ajal punktis 1.
      6. 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

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster