libmdbx 0.11.7 stiže s migracijom projekta na GitFlic, ispravkama grešaka i još mnogo toga

The izdanje nove verzije libmdbx biblioteke 0.11.7, lansiranje izdvaja se po migraciji projekta na GitFlic servis nakon što je administracija GitHub-a uklonila libmdbx zajedno sa nizom drugih projekata 15. aprila 2022. bez ikakvog upozorenja ili objašnjenja, istovremeno blokirajući pristup mnogim programerima povezanim s kompanijama koje su potpale pod američkim sankcijama.

Iz korisničke tačke gledišta, sve stranice, repozitorijum i forkovi projekta odjednom su se pretvorili u stranicu „404“, bez mogućnosti komunikacije i bez otkrivanja razloga.

Nažalost, skoro sve verzije su izgubljene, u kojoj je bilo mnogo pitanja sa detaljnim odgovorima, kao i mnogo diskusija. Gubitak ovih informacija jedina je objektivna šteta koju je GitHub administracija uspjela nanijeti projektu, iako su djelomične kopije diskusija ostale dostupne u arhivi archive.org.

Gubitak ugrađene CI infrastrukture i skripti (dostupnih besplatno za OpenSource projekte) primorao nas je da pregledamo, objedinimo i eliminišemo mali tehnički dug. Sada je CI vraćen na skoro isti volumen (oko 100 konfiguracija izgradnje), sa izuzetkom testova izgradnje i pokretanja za sve BSD i Solaris varijante. Zanimljivo je da nakon GitHub-ovih radnji nije stigla nikakva pojašnjenja niti obavještenja, osim podsjetnika o potrebi plaćanja.

Glavne nove mogućnosti libmdbx 0.11.7

Od najnovijih vijesti o izdanju libmdbx v0.11.3, osim oporavka od GitHub akcija, vrijedna su pažnje sljedeća poboljšanja i popravke:

Ukupno je napravljeno 185 izmjena u 89 fajlova, dodato je otprilike 3300 linija, uklonjeno je približno 4100. Uklonjeno prvenstveno zbog čišćenja već beskorisnih tehničkih fajlova povezanih sa GitHub-om i zavisnim servisima.

Dodano a popravka za otkriveni efekat nedosljednosti/defekt u spojenoj stranici i kešu bafera u Linux kernelu. Na sistemima u kojima su kešovi stranica i bafera zaista ujedinjeni, nema smisla da kernel troši memoriju na dvije kopije podataka upisivanjem u datoteku koja je već dodijeljena memoriji. Stoga podaci koji su upisani postaju vidljivi kroz dodjelu memorije prije nego što se sistemski poziv write() završi, čak i ako podaci još nisu upisani na disk.

Sveukupno drugo ponašanje nije racionalno, jer sa odloženim spajanjem i dalje morate uhvatiti zaključavanja za liste stranica, kopirati podatke ili prilagoditi PTE-ove. Dakle, neizgovoreno pravilo konzistentnosti je na snazi ​​od 1989. godine, kada se u SVR4 pojavio objedinjeni bafer keš. Kao rezultat toga, pronalaženje čudnih grešaka u zauzetim scenarijima proizvodnje libmdbx-a bilo je puno posla. Prvo, reprodukcija problema, zatim provjera hipoteza i provjera poboljšanja.

Sada sa sigurnošću možemo reći da je problem pouzdano identificiran, lociran i uklonjen, uprkos složenosti i specifičnosti scenarija reprodukcije. Također, rad zaobilaznog mehanizma potvrdio je jedan od programera Erigon (Ethereum), u njegovom slučaju, u debug build-u, zaštita je pokrenuta kao regresija zbog dodatne provjere tvrdnji.

Treba napomenuti da je u kontekstu raširene upotrebe libmdbx-a u radnim projektima suštinski važnije osigurati pouzdan rad, a ne otkriti je li riječ o grešci ili osobini i da li se na takvu konzistentnost može osloniti posebno bez traženja uzroka nedosljednosti unutar Linux kernela. Dakle, ovdje govorimo o rješavanju problema koji bi mogao utjecati na korisnike.

Ispravljena regresija EXDEV greške (veza između uređaja) prilikom vrućeg kopiranja baze podataka bez sažimanja u drugi sistem datoteka, kako preko API-ja tako i pomoću uslužnog programa mdbx_copy.
Kris Zyp je implementirao podršku za libmdbx na Deno-u.

Fiksno rukovanje vrijednosti postavljenom opcijom MDBX_opt_rp_augment_limit prilikom obrade velikih transakcija na velikim bazama podataka. Ranije su se, zbog greške, mogle izvoditi nepotrebne radnje, koje su ponekad utjecale na performanse na Ethereum implementacijama (Erigon/Akula/Silkworm) i projektima Binance Chain.

Mnoge greške su ispravljene, uključujući i one za C++ API i popravio mnoge probleme u izgradnji na rijetkim i egzotičnim konfiguracijama. Kompletna lista svih značajnih poboljšanja dostupna je na ChangeLog-u.

Konačno, ako ste zainteresirani da saznate više o tome, možete pogledati detalje Na sledećem linku.