Ilmus välja libmdbx 0.13.7 (MDBX) raamatukogu, mis sisaldab kõrgjõudlusega kompaktset sisseehitatud võtme-väärtuse andmebaasi. libmdbx kood on litsentseeritud Apache 2.0 alusel. Toetatakse kõiki aktuaalseid operatsioonisüsteeme ja arhitektuure, sealhulgas Venemaa Elbrus 2000. libmdbx pakub ulatuslikku API-d C++ jaoks ning entusiastide toetatud sidemeid keeltega Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Projekti, mis kasutavad libmdbx, hulka kuuluvad Isar, Erigon ja Reth, samuti StarkWare ja Positive Technologies'i arengud.
Ajalooliselt on libmdbx sügavalt ümber töötatud LMDB andmebaas ja ületab oma eelkäijat usaldusväärsuse, funktsioonide komplekti ja jõudluse poolest. Kõrval LMDB-ga pööratakse libmdbx-is suurt tähelepanu koodi kvaliteedile, API stabiilsele tööle, testimisele ja automaatsetele kontrollidele. Pakutakse andmebaasi struktuuri terviklikkuse kontrollimise tööriista koos mõningate taastumise võimalustega. Tehniliselt pakub libmdbx ACID-i, range muudatuste serialiseerimist ja blokeerimata lugemist, mis skaleerub lineaarsetes arvutijõududes. Toetatakse automaatset tihendamist, andmebaasi suuruse automaatset haldamist ja valikute suuruse hinnangut vahemike kaupa.
Peamised muudatused:
- Kritiiline viga mdbx_env_resurrect_after_fork() funktsionaalsuses SysV-semaforide kasutamisel on kõrvaldatud. Viga ilmnes ainult pärast lapseprotsessi loomist fork() kaudu aktiivse kirjutamise tehingu taustal, mis viis semaforite vale toimimiseni ning seejärel erinevate vigade, sealhulgas andmebaasi kahjustumiseni. Probleem eksisteeris alates mdbx_env_resurrect_after_fork() tekkimisest ja mõjutas macOS-i ning ka POSIX-platvorme, kui see oli loodud MDBX_LOCKING=5 valikuga.
- Tehti API-s andmebaasi kopeerimise probleemide kõrvaldamine, mis ilmnes mitte-Linuxi POSIX süsteemidel (peamiselt macOS-is) ja mõnel juhul, kui sihtfail asus mitte-kohalikul failisüsteemil. Probleem põhjustas veateate EWOULDBLOCK/EAGAIN tagastamise, mis tulenes fcntl(F_SETLK) ja flock() lukustuste puudujäägist/konfliktist operatsioonisüsteemi tuumas. Faili lukustuste hankimise vea käsitlemine on ümber töötatud POSIX süsteemide kopeerimise API-s.
- Eemaldatud viga, mis põhjustas MDBX_BAD_DBI ootamatut tagastamist, kui mitu tehingut käivitusid samal ajal ühes protsessis pärast andmebaasi avamist.
- Eemaldatud viga, mis põhjustas MDBX_DBS_FULL ootamatu tagastamise juba avatud tabelite uuesti avamisel, kui avatud DBI-deskriptorite piir oli saavutatud.
- Korrigeeritud ehitusviga Androidi platvormil, kui _FILE_OFFSET_BITS oli selgelt määratletud.
- Korrigeeritud ENOMEM-i kasutamise viga MDBX_ENOMEM-i asemel. See võis katkestada ehituse mitte-POSIX/WINDOWS platvormidel sõltuvalt konfiguratsioonist ja/või SDK versioonist.
- Mitmed vale assert-kontrollid on parandatud või eemaldatud, mis põhjustasid silumise kogumise krahhe spetsiifilistes olukordades. Peamiselt funktsioonide txn_end(), txn_lock() ja txn_unlock() koodis nii Windowsi kui ka POSIX-i keskkonnas.
- Olulised MSVC hoiatused on kõrvaldatud. C5286 ja C5287 hoiatuste kuvamine on keelatud.
- OFD-blokeeringute kasutusloogikat on täiustatud POSIX-platvormidel. Nüüd arvestatakse, lisaks EINVAL-ile, ka täiendavaid veakoodide (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP) puhul, mis võimaldab koostatud raamatukogul töötada mõnedes olukordades, kui vastav tuum/konteiner/emulaator ei toeta vajalikke süsteemikutsungeid.
- Testimise raamistikku on lisatud toetus suvandile "—numa " juhusliku testi sidumiseks NUMA-sõlmega. Battery/tmux skripti on lisatud selge NUMA-sõlmede jaotamine, mis on oluliselt suurendanud efektiivsust NUMA-masinate testimisel.
- Juhuslik skript on rakendanud testide juhuslikku käivitamise järjekorda.
Allikas: opennet.ru
