Më 13 mars, u realizua një version korrigjues 3.51.3 të databazës kompakte të integruar. SQLite. Kodi i projektit është shkruar në gjuhën C dhe shpërndahet si pronë publike (public domain).
Në lidhje me problemet e ndërsjelljes, që lidhen me disa funksione të reja, versioni 3.52.0 (i dalë 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 rregulloi një gabim, i cili në raste të rralla mund të çonte në dëmtimin e databazës dhe quhej «gabimi WAL-reset»:
- Ky gabim ndodh vetëm në databaza që punojnë në modalitetin WAL, nëse për një skedë të njëjtë janë hapur dy ose më shumë lidhje në procese ose tela të ndryshme, dhe nëse këto dy lidhje përpiqen të kryejnë një shkresë ose të krijojnë një pikë kontrolli në të njëjtën kohë.
- Gabimi lidhet me një konflikt aksesesh në të dhëna nën kufij të fortë temporalë. Nën kushte normale përdorimi, ai ndodh shumë rrallë. Zhvilluesit nuk arritën kurrë ta riprodhonin këtë gabim në kushte natyrore dhe duhej të shtonin në SQLite një logjikë të veçantë testuese, e cila krijonte me qëllim kushte për shfaqjen e gabimit, për t'u siguruar se problemi ishte zgjidhur.
- Gabimi ndodh kur:
- Një lidhje ekzekuton verifikimin e pikës kontrolli. Kjo verifikues e parë duhet të përfundojë. Me fjalë të tjera, gjatë verifikimit duhet të kopjohet me sukses të gjithë përmbajtja e skedës WAL prapa në databazë dhe të vendoset skeda WAL në një gjendje ku mund të rivendoset.
- Menjëherë pas përfundimit të veprimit të parë të kontrollit, fillon i dyti.
- Ndërsa fillon pikë kontrolli e dytë nga hapi 2, një lidhje tjetër me databazën regjistron një transaksion që rivendos skedën WAL dhe shënjon përmbajtje të re në fillim të skedës WAL.
- Për shkak të konfliktit të aksesit në të dhëna, pika e dytë e kontrollit nga hapi 2 nuk e merr parasysh se skeda WAL është rivendosur si rezultat i regjistrimit të transaksionit në hapin 3. Pika e dytë e kontrollit vendos një vlerë të gabuar për një nga fushat në titullin e indeksit WAL. Kjo fushë tregon se një pjesë e skedës WAL tashmë është regjistruar në pikën e kontrollit, kur në fakt kjo nuk është e vërtetë.
- Regjistrimi i transaksioneve të tjera çon në rritjen e numrit të faqeve në skedën WAL, e cila kalon numrin e faqeve ekzistues në momentin e pikës së kontrollit të parë nga hapi 1.
- Më vonë, kur shfaqet pikë kontrolli e tretë, ajo kalon tërë ose pjesërisht transaksionin e regjistruar në fazën 3. Kështu, pjesët e transaksionit nga faza 3 nuk arrijnë kurrë në skedarin e bazës së të dhënave, duke rezultuar në dëmtimin e skedarit të bazës së të dhënave.
- Gabimi është me të theksuar se është i pranishëm në të gjitha versionet e SQLite, duke filluar nga 3.7.0 (21.07.2010) dhe duke përfunduar në 3.51.2. Janë publikuar gjithashtu rregullime për disa versione më të hershme: 3.44.6 dhe 3.50.7.
- Rregullime të tjera të vogla.
Burimi: linux.org.ru
