Release van de database libmdbx 0.11.7. Verplaatsing van de ontwikkeling naar GitFlic na blokkade op GitHub

De release van de libmdbx 0.11.7 bibliotheek (MDBX) heeft plaatsgevonden met de implementatie van een hoogwaardige, compacte ingebouwde key-value database. De libmdbx-code wordt verspreid onder de OpenLDAP Public License. Alle actuele besturingssystemen en architecturen worden ondersteund, evenals de Russische Elbrus 2000.

De release is opmerkelijk vanwege de migratie van het project naar de GitFlic service, nadat de administratie van GitHub op 15 april 2022 zonder enige waarschuwing of uitleg libmdbx samen met vele andere projecten heeft verwijderd en tegelijkertijd de toegang voor veel ontwikkelaars die verbonden zijn aan bedrijven die onder de Amerikaanse sancties vallen, heeft geblokkeerd. Voor gebruikers zijn alle pagina's, de repository en de forks van het project plotseling veranderd in een '404'-pagina, zonder enige communicatie of mogelijkheid om de redenen te achterhalen.

Helaas zijn bijna alle problemen verloren gegaan, waarin veel vragen met gedetailleerde antwoorden en onderhoudende discussies stonden. Het verlies van deze informatie is de enige objectieve schade die de administratie van GitHub aan het project heeft kunnen toebrengen. Gedeeltelijk blijven kopieƫn van de discussies beschikbaar in het archief van archive.org.

Het verlies van opgebouwde CI-scripts en infrastructuur (gratis toegankelijk voor OpenSource-projecten) heeft ons gedwongen tot herziening, standaardisatie en het oplossen van kleine technische schulden. Tegenwoordig is de CI bijna volledig hersteld, met uitzondering van de build- en test-uitvoeringen voor alle versies van BSD en Solaris. Kenmerkend is dat er na de acties van GitHub geen verdere uitleg of mededelingen zijn gekomen, behalve herinneringen om te betalen en pogingen om geld af te schrijven.

Sinds het laatste nieuws over de release van libmdbx v0.11.3, naast het herstel na de acties van GitHub, zijn de volgende verbeteringen en correcties te noteren:

  • Een omweg is toegevoegd voor het ontdekte effect/defect van incoherentie in de gecombineerde pagina- en buffer cache in de Linux-kernel. In systemen waar pagina- en buffer caches daadwerkelijk zijn samengevoegd, is het voor de kernel zinloos om geheugen te verspillen aan twee kopieĆ«n van gegevens bij het schrijven naar een al in het geheugen gemapte bestand. Daarom worden de geschreven gegevens zichtbaar via de geheugenmapping voordat de systeemoproep write() is voltooid, zelfs als de gegevens nog niet naar de schijf zijn geschreven.

    In totaal is ander gedrag onredelijk, omdat bij uitgestelde samenvoeging nog steeds blokkeringen voor paginalijsten moeten worden vastgelegd, gegevens moeten worden gekopieerd of PTE moet worden gecorrigeerd. Daarom gold de onofficiƫle coherentieregel sinds 1989, toen de unified buffer cache in SRV4 verscheen. Het ontdekken van vreemde storingen in drukbezochte gebruiksscenario's van libmdbx vereiste veel werk. Eerst om het probleem te reproduceren, daarna om hypothesen te verifiƫren en aanpassingen te controleren.

    Het kan nu met vertrouwen worden gezegd dat het probleem betrouwbaar is geĆÆdentificeerd, gelokaliseerd en betrouwbaar is opgelost, ondanks de complexiteit en specificiteit van het reproductiescenario. Bovendien is de werking van het omleidingsmechanisme bevestigd door een van de ontwikkelaars van Erigon (Ethereum), waarbij in zijn geval in de debug-build de activering van de bescherming zich uitte in de vorm van een regressie door een overbodige assert-controle.

    Het is belangrijk op te merken dat in de context van wijd verspeiding van libmdbx in werkprojects, betrouwbare werking van wezenlijk belang is, en niet het bepalen of het een 'fout of een eigenschap' is en of men op zulke coherentie kan vertrouwen, vooral niet het zoeken naar oorzaken van incoherentie binnen de Linux-kernel. Daarom gaat het hier om het oplossen van een probleem dat gebruikers kan hebben aangetast.

  • De regressie van de fout EXDEV (Cross-device link) is verholpen bij het warm kopiĆ«ren van de database zonder compacting naar een ander bestandssysteem, zowel via de API als met de mdbx_copy-tool.
  • Kris Zyp heeft de ondersteuning van libmdbx in Deno gerealiseerd. Kai Wetlesen heeft de RPM-pakketten voor Fedora gemaakt. David BouyssiĆ© heeft bindingen voor Scala geĆÆmplementeerd.
  • De verwerking van de waarde die wordt ingesteld door de optie MDBX_opt_rp_augment_limit bij het verwerken van enorme transacties in grote databases is gecorrigeerd. Eerder konden door een fout onnodige acties worden uitgevoerd, wat soms de prestaties in implementaties van Ethereum (Erigon/Akula/Silkworm) en projecten van Binance Chain beĆÆnvloedde.
  • Talrijke tekortkomingen zijn gecorrigeerd, waaronder in de C++ API. Veel bouwproblemen in zeldzame en exotische configuraties zijn opgelost. Een complete lijst van alle significante aanpassingen is beschikbaar in de ChangeLog.
  • In totaal zijn er 185 wijzigingen aangebracht in 89 bestanden, zijn er ongeveer 3300 regels toegevoegd en ongeveer 4100 verwijderd. Meer is verwijderd, voornamelijk door opruiming van al nutteloze technische bestanden die verband hielden met GitHub en afhankelijke diensten.

Historisch gezien is libmdbx een grondige herwerking van de databasebeheerder LMDB en overtreft het zijn voorganger op het gebied van betrouwbaarheid, mogelijkheden en prestaties. In vergelijking met LMDB is er in libmdbx veel aandacht voor de codekwaliteit, een stabiele werking van de API, testen en automatische controles. Er wordt een tool geleverd voor het controleren van de integriteit van de database-structuur met enkele herstelmogelijkheden.

Technologisch gezien biedt libmdbx ACID, strikte serialisatie van wijzigingen en niet-blokkerend lezen met lineaire schaalvergroting op CPU-kernen. Automatische compressie van de database, automatische groottebeheer en schatting van de query-volumes op basis van bereiken (range query estimation) worden ondersteund. Sinds 2016 wordt het project gefinancierd door Positive Technologies en sinds 2017 wordt het in hun producten gebruikt.

Voor libmdbx is er een uitgebreid C++ API beschikbaar, evenals door enthousiaste ontwikkelaars ondersteunde bindings voor de talen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno en Scala.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster