Sortie de la base de données libmdbx 0.11.7. Migration du développement vers GitFlic après le blocage sur GitHub

La bibliothèque libmdbx 0.11.7 (MDBX) a été publiée, offrant une base de données intégrée compacte et hautes performances de type clé-valeur. Le code libmdbx est distribué sous la licence OpenLDAP Public License. Tous les systèmes d'exploitation et architectures actuels sont supportés, y compris le Elbrus 2000 russe.

Cette version est marquée par la migration du projet vers le service GitFlic, après que l'administration de GitHub ait supprimé sans préavis et sans explication libmdbx ainsi que de nombreux autres projets le 15 avril 2022, bloquant simultanément l'accès à de nombreux développeurs liés aux entreprises sous sanctions américaines. Du point de vue des utilisateurs, toutes les pages, le dépôt et les forks du projet se sont soudainement transformés en page « 404 », sans possibilité de communication ou d'explication.

Malheureusement, presque toutes les issues ont été perdues, contenant de nombreuses questions avec des réponses détaillées ainsi que passablement de discussions. La perte de cette information est le seul préjudice objectif que l'administration de GitHub a pu infliger au projet. Des copies de certaines discussions restent partiellement accessibles dans l'archive archive.org.

La perte des scénarios CI construits et de l'infrastructure (disponible gratuitement pour les projets OpenSource) a conduit à une révision, une uniformisation et une élimination d'un petit passif technique. Actuellement, le CI a été restauré presque dans son intégralité, à l'exception des tests de construction et de déroulement pour toutes les variantes de BSD et Solaris. Il est à noter qu'aucune explication ou notification n'a été reçue suite aux actions de GitHub, à l'exception d'un rappel concernant le besoin de paiement et des tentatives de prélèvement.

Depuis la dernière actualité sur la version libmdbx v0.11.3, en plus de la récupération suite aux actions de GitHub, il convient de noter les améliorations et corrections suivantes :

  • Un contournement de l'effet/défaut de non-cohérence détecté dans le cache combiné des pages et des buffers au sein du noyau Linux a été ajouté. Dans les systèmes où le cache des pages et des buffers est effectivement combiné, il n'est pas logique pour le noyau de consommer de la mémoire pour deux copies de données lors de l'écriture dans un fichier déjà mappé en mémoire. Les données écrites deviennent donc visibles par le biais du mappage en mémoire avant la fin de l'appel système write(), même si les données ne sont pas encore écrites sur le disque.

    En somme, un comportement différent n'est pas rationnel, car lors des fusions différées, il faudra quand même capturer des verrous pour les listes de pages, copier des données ou corriger le PTE. C'est pourquoi la règle tacite de cohérence est en vigueur depuis 1989, lorsque le cache unifié est apparu dans SRV4. La détection d'échecs étranges dans des scénarios d'exploitation chargés de libmdbx a donc nécessité un travail considérable. D'abord pour reproduire le problème, puis pour vérifier les hypothèses et tester les modifications.

    On peut maintenant dire avec confiance que le problème a été identifié de manière fiable, localisé et résolu, malgré toute la complexité et la spécificité du scénario de reproduction. De plus, le mécanisme d'esquive a été confirmé par un des développeurs d'Erigon (Ethereum), dans son cas, dans une version de débogage, l'activation de la protection se manifestait par un retour en arrière due à une vérification assert supplémentaire.

    Il convient de noter qu'en raison de l'utilisation généralisée de libmdbx dans des projets de travail, il est fondamentalement plus important d'assurer un fonctionnement fiable que de déterminer si c'est une ‘erreur ou une fonctionnalité’ et s'il est possible de faire confiance à une telle cohérence, d'autant plus que cela ne nécessite pas de rechercher les causes d'incohérence à l'intérieur du noyau Linux. Il s'agit donc de résoudre un problème qui pourrait affecter les utilisateurs.

  • Le retour en arrière de l'erreur EXDEV (lien interdisque) lors de la copie à chaud de la base de données sans compactage vers un autre système de fichiers a été corrigé, tant par l'API que par l'utilitaire mdbx_copy.
  • Kris Zyp a implémenté le support de libmdbx dans Deno. Kai Wetlesen a préparé un paquet RPM pour Fedora. David Bouyssié a réalisé des liaisons pour Scala.
  • La gestion de la valeur définie par l'option MDBX_opt_rp_augment_limit lors du traitement de transactions énormes dans de grandes bases de données a été corrigée. Auparavant, en raison d'une erreur, des actions supplémentaires pouvaient être effectuées, ce qui affectait parfois les performances dans les implémentations Ethereum (Erigon/Akula/Silkworm) et les projets de Binance Chain.
  • Un grand nombre de défauts ont été corrigés, notamment dans l'API C++. De nombreux problèmes de compilation dans des configurations rares et exotiques ont été résolus. Une liste complète de toutes les modifications significatives est disponible dans le ChangeLog.
  • Au total, 185 modifications ont été apportées à 89 fichiers, environ 3300 lignes ont été ajoutées, et environ 4100 ont été supprimées. Plus de suppressions ont été effectuées principalement en raison du nettoyage des fichiers technologiques déjà inutiles liés à GitHub et aux services dépendants.

Historiquement, libmdbx est une refonte approfondie de la base de données LMDB et la dépasse en matière de fiabilité, de fonctionnalités et de performance. Comparé à LMDB, libmdbx accorde une grande attention à la qualité du code, à un fonctionnement stable de l'API, aux tests et aux vérifications automatiques. Un utilitaire de vérification de l'intégrité de la structure de la base de données est fourni, avec certaines options de récupération.

Techniquement, libmdbx propose ACID, une stricte sérialisation des changements et une lecture non bloquante avec une mise à l'échelle linéaire sur les cœurs CPU. La compactification automatique, la gestion automatique de la taille de la base de données et l'estimation des volumes des échantillons par plages (range query estimation) sont prises en charge. Depuis 2016, le projet est financé par Positive Technologies et est utilisé dans ses produits depuis 2017.

Pour libmdbx, une API C++ avancée est proposée, ainsi que des liaisons prises en charge par des passionnés vers les langages Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster