libmdbx 0.11.7 llega con migración del proyecto a GitFlic, soluciones de errores y mas
Se dio a conocer el lanzamiento de la nueva versión de la biblioteca libmdbx 0.11.7, el lanzamiento se destaca por la migración del proyecto al servicio GitFlic después de que la administración de GitHub eliminó libmdbx junto con una serie de otros proyectos el 15 de abril de 2022 sin ninguna advertencia ni explicación, al tiempo que bloqueó el acceso a muchos desarrolladores asociados con empresas que cayeron bajo las sanciones de EE.
Desde el punto de vista del usuario, todas las páginas, el repositorio y las bifurcaciones del proyecto se convirtieron repentinamente en una página «404», sin posibilidad de comunicación y sin averiguar los motivos.
Desafortunadamente, casi todas las versiones se han perdido, en los que había muchas preguntas con respuestas detalladas, así como muchas discusiones. La pérdida de esta información es el único daño objetivo que la administración de GitHub logró infligir al proyecto, aunque hay copias parciales de las discusiones que permanecen disponibles en el archivo archive.org.
La pérdida de la infraestructura y los scripts de CI incorporados (disponibles de forma gratuita para proyectos OpenSource) nos obligó a realizar una revisión, unificación y eliminación de una pequeña deuda técnica. Ahora CI se ha restaurado a casi el mismo volumen (alrededor de 100 configuraciones de compilación), con la excepción de compilar y ejecutar pruebas para todas las variantes de BSD y Solaris. De manera reveladora, después de las acciones de GitHub, no se recibieron aclaraciones ni notificaciones, aparte de un recordatorio de la necesidad de pago.
Principales novedades de libmdbx 0.11.7
Desde las últimas noticias sobre el lanzamiento de libmdbx v0.11.3, además de recuperarse de las acciones de GitHub, cabe destacar las siguientes mejoras y correcciones:
Se realizaron un total de 185 cambios en 89 archivos, se agregaron aproximadamente 3300 líneas, se eliminaron aproximadamente 4100. Se eliminó principalmente debido a la purga de archivos tecnológicos ya inútiles asociados con GitHub y servicios dependientes.
Se agregó una solución para un efecto/defecto de incoherencia detectado en la página combinada y la memoria caché del búfer en el kernel de Linux. En los sistemas en los que las cachés de página y de búfer están realmente unificadas, no tiene sentido que el núcleo desperdicie memoria en dos copias de datos al escribir en un archivo ya asignado a la memoria. Por lo tanto, los datos que se escriben se vuelven visibles a través de la asignación de memoria antes de que se complete la llamada al sistema write(), incluso si los datos aún no se han escrito en el disco.
En total, otro comportamiento no es racional, porque con una fusión retrasada, todavía tiene que capturar bloqueos para listas de páginas, copiar datos o ajustar PTE. Por lo tanto, la regla tácita de coherencia ha estado vigente desde 1989, cuando apareció el caché de búfer unificado en SVR4 . Como resultado, encontrar fallas extrañas en escenarios de producción ocupados de libmdbx ha sido mucho trabajo. Primero, reproduciendo el problema, luego verificando hipótesis y comprobando mejoras.
Ahora podemos decir con confianza que el problema se identificó, localizó y eliminó de manera confiable, a pesar de la complejidad y la especificidad del escenario de reproducción. Además, el trabajo del mecanismo de derivación fue confirmado por uno de los desarrolladores de Erigon (Ethereum), en su caso, en la compilación de depuración, la protección se activó como una regresión debido a una verificación de afirmación adicional.
Cabe señalar que en el contexto del uso generalizado de libmdbx en proyectos de trabajo, es fundamentalmente más importante garantizar un funcionamiento confiable, en lugar de averiguar si se trata de un error o una característica y si se puede confiar en dicha coherencia especialmente sin buscar las causas de la incoherencia dentro del kernel de Linux. Por lo tanto, aquí estamos hablando de solucionar un problema que podría afectar a los usuarios.
Se corrigió una regresión del error EXDEV (enlace entre dispositivos) al copiar en caliente una base de datos sin compactación a otro sistema de archivos, tanto a través de la API como con la utilidad mdbx_copy.
Kris Zyp ha implementado soporte para libmdbx en Deno.
Se corrigió el manejo del valor establecido por la opción MDBX_opt_rp_augment_limit al procesar transacciones grandes en bases de datos grandes. Anteriormente, debido a un error, se podían realizar acciones innecesarias, lo que a veces afectaba el rendimiento en las implementaciones de Ethereum (Erigon/Akula/Silkworm) y los proyectos de Binance Chain.
Se han solucionado muchos errores, incluidos los de la API de C++ y se corrigieron muchos problemas de construcción en configuraciones raras y exóticas. Una lista completa de todas las mejoras significativas está disponible en ChangeLog.
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.