Március 13-án egy korrekciós kiadást tettünk közzé a 3.51.3-as kompakt beágyazott DBMS-ről. SQLite. A projekt kódja C nyelven íródott és közszabadságként (public domain) terjesztett.
A visszafelé kompatibilitással kapcsolatos problémák miatt, amelyek néhány új funkcióval álltak összefüggésben, a verzió 3.52.0 (március 6-án megjelent) visszavonásra került.
A 3.51.3 változásainak listája:
- Március 3-án az SQLite egyik fejlesztője (Dan) felfedezett és kijavított egy hibát, amely ritka esetekben adatbázis sérüléshez vezethetett, és ezt nevezték "WAL-reset hibának":
- Ez a hiba csak WAL módban működő adatbázisoknál fordul elő, ha ugyanahhoz a fájlhoz több kapcsolat nyitva van különböző szálakban vagy folyamatokban, és ha ezek a kapcsolatok egyszerre próbálnak írási műveletet végrehajtani, vagy ellenőrző pontot létrehozni.
- A hiba az adatokhoz való hozzáférés ütközésével kapcsolatos szigorú időkorlátok mellett jön létre. Normál működési feltételek között nagyon ritkán fordul elő. A fejlesztőknek nem sikerült reprodukálniuk ezt a hibát természetes környezetben, és kényszerültünk olyan tesztelési logikát bevezetni az SQLite-ba, amely szándékosan létrehozza a hiba előfordulásához szükséges feltételeket, hogy megbizonyosodjunk arról, hogy a probléma megoldódott.
- A hiba akkor lép fel, amikor:
- Egy kapcsolat ellenőrzi az ellenőrző pontot. Ezen első ellenőrzésnek be kell fejeződnie. Más szavakkal, az ellenőrzés során sikeresen le kell másolni a WAL fájl összes tartalmát az adatbázisba, és a WAL fájlt olyan állapotba kell hozni, amely lehetővé teszi az alaphelyzetbe állítást.
- Az első ellenőrző pont befejezése után a második ellenőrző pont azonnal elindul.
- Amíg a 2. lépésből a második ellenőrző pont elindul, egy másik adatbázis-kapcsolat tranzakciót rögzít, amely visszaállítja a WAL fájlt, és új tartalmat ír a WAL fájl elejére.
- Az adatokhoz való hozzáférés ütközése miatt a 2. lépésből származó második ellenőrző pont nem veszi figyelembe, hogy a WAL fájlt a 3. lépéssel történő tranzakció rögzítése miatt visszaállították. A második ellenőrző pont helytelen értéket állít be a WAL index fejlécének egyik mezőjében. Ez a mező azt jelzi, hogy a WAL fájl egy része már rögzítve lett az ellenőrző pontban, pedig valójában nem így van.
- További tranzakciók rögzítése a WAL fájl lapjainak számának növekedéséhez vezet, amely meghaladja az első ellenőrző pont időpontjában létező lapok számát az 1. lépésből.
- Később, amikor a harmadik ellenőrző pont megjelenik, az megkerüli az összes vagy egy részét a harmadik szakaszban rögzített tranzakciónak. Így a harmadik szakaszból származó tranzakciók egy része nem kerül a database fájlba, ami a database fájl sérüléséhez vezet.
- A hiba valószínűleg minden SQLite verzióban megtalálható, kezdve a 3.7.0-tól (2010.07.21) egészen a 3.51.2-ig. Továbbá, a korábbi verziók egyes javításai is ki lettek adva: 3.44.6 és 3.50.7.
- Más kisebb javítások.
Forrás: linux.org.ru
