Më 13 mars u lançua një version korrektues 3.51.3 i sistemit të menaxhimit të bazës së të dhënave të integruar kompakt. SQLite. Kodi i projektit është shkruar në gjuhën C dhe shpërndahet si pronë publike.
Për shkak të problemeve të përputhshmërisë së prapme lidhur me disa funksione të reja, versioni 3.52.0 (i liruar më 6 mars) u tërhoq.
Lista e ndryshimeve për versionin 3.51.3:
- Më 3 mars, një nga zhvilluesit e SQLite (Dan) zbuloi dhe ndreqi një gabim i cili në raste të rralla mund të shkaktonte dëmtim të bazës së të dhënave dhe u quajt «gabimi WAL-reset»:
- Ky gabim ndodh vetëm në bazat e të dhënave që funksionojnë në modalitetin WAL, nëse një file i njëjtë është i hapur nga dy ose më shumë lidhje në procese ose blloqe të ndryshme, dhe nëse këto dy lidhje përpiqen të kryejnë shkrim ose të krijojnë një pikë kontrolli njëkohësisht.
- Gabimi lidhet me një konflikt të aksesit në të dhëna nën kufizime të rrepta të kohës. Në kushte normale operative, ai ndodh mjaft rrallë. Zhvilluesit nuk arritën asnjëherë ta riprodhojnë këtë gabim në kushte natyrore dhe iu desh të shtonin në SQLite një logjikë të veçantë testimi, e cila qëllimisht krijon kushte për të shkaktuar gabimin, për të siguruar që problemi është zgjidhur.
- Gabimi ndodh kur:
- Një lidhje kryen kontrollimin e pikës së kontrollit. Ky kontroll i parë duhet të përfundojë. Me fjalë të tjera, gjatë kontrollit duhet të kopjohet me sukses e gjithë përmbajtja e skedarit WAL në databazë dhe të çfaroset skedari WAL në një gjendje në të cilën mund të riçeleset.
- Menjëherë pas përfundimit të punës së pikës së kontrollit të parë, aktivizohet pika e kontrollit e dytë.
- Ndërkohë që po aktivizohet pika e kontrollit e dytë nga hapi 2, një lidhje tjetër në databazë regjistron një transaksion, i cili riçel skedarin WAL dhe shkruan përmbajtje të re në fillim të skedarit WAL.
- Për shkak të konfliktit të aksesit në të dhëna, pika e kontrollit e dytë nga hapi 2 nuk merr parasysh se skedari WAL është riçelur për shkak të regjistrimit të transaksionit në hapin 3. Pika e kontrollit e dytë vendos një vlerë të gabuar për një nga fushat në titullin e indeksit të WAL. Kjo fushë tregon se një pjesë e skedarit WAL është regjistruar tashmë në pikën e kontrollit, megjithëse në të vërtetë nuk është kështu.
- Regjistrimi i transaksioneve shtesë çon në rritjen e numrit të faqeve në skedarin WAL, i cili tejkalon numrin e faqeve që ekzistonin në momentin e pikës dyshuese të hapit 1.
- Më vonë, kur shfaqet pika e tretë e kontrollit, ajo kalon të gjithë ose një pjesë të transaksionit të regjistruar në fazën 3. Kështu, pjesët e transaksionit nga faza 3 nuk përfshihen në skedarin e bazës së të dhënave, duke shkaktuar dëmtimin e skedarit të bazës së të dhënave.
- Gabimi është i pranishëm ndoshta në të gjitha versionet e SQLite, që nga 3.7.0 (21.07.2010) deri në 3.51.2. Po ashtu, janë lëshuar rregullime për disa versione më të hershme: 3.44.6 dhe 3.50.7.
- Rregullime të tjera të vogla.
Burimi: linux.org.ru
