libmdbx 0.11.7 chega com migração de projeto para GitFlic, correções de bugs e mais

O lançamento da nova biblioteca libmdbx versão 0.11.7, o lançamento se destaca pela migração do projeto para o serviço GitFlic depois que a administração do GitHub removeu o libmdbx junto com vários outros projetos em 15 de abril de 2022 sem nenhum aviso ou explicação, além de bloquear o acesso a muitos desenvolvedores associados a empresas que estavam sob sanções dos EUA.

Do ponto de vista do usuário, todas as páginas, o repositório e os forks do projeto de repente se transformaram em uma página “404”, sem possibilidade de comunicação e sem descobrir os motivos.

Infelizmente, quase todas as versões foram perdidas, em que houve muitas perguntas com respostas detalhadas, além de muitas discussões. A perda dessas informações é o único dano objetivo que a administração do GitHub conseguiu infligir ao projeto, embora cópias parciais das discussões permaneçam disponíveis no arquivo archive.org.

A perda da infraestrutura integrada de CI e scripts (disponíveis gratuitamente para projetos OpenSource) nos obrigou a revisar, unificar e eliminar um pouco de dívida técnica. Agora a CI foi restaurada para quase o mesmo volume (cerca de 100 configurações de compilação), com exceção da compilação e execução de testes para todas as variantes BSD e Solaris. Surpreendentemente, após as ações do GitHub, nenhum esclarecimento ou notificação foi recebido, além de um lembrete da necessidade de pagamento.

Principais novos recursos do libmdbx 0.11.7

Desde as últimas notícias sobre o lançamento da libmdbx v0.11.3, além da recuperação das ações do GitHub, as seguintes melhorias e correções merecem destaque:

Um total de 185 alterações foram feitas em 89 arquivos, aproximadamente 3300 linhas foram adicionadas, foram removidos aproximadamente 4100. Removidos principalmente devido à eliminação de arquivos de tecnologia já inúteis associados ao GitHub e serviços dependentes.

Adicionou um correção para um efeito/defeito de inconsistência detectado na página mesclada e no cache do buffer no kernel do Linux. Em sistemas onde os caches de página e buffer são verdadeiramente unificados, não faz sentido para o kernel desperdiçar memória em duas cópias de dados gravando em um arquivo já alocado na memória. Portanto, os dados que são gravados tornam-se visíveis por meio da alocação de memória antes que a chamada do sistema write() seja concluída, mesmo que os dados ainda não tenham sido gravados no disco.

Todo outro comportamento não é racional, porque com uma mesclagem atrasada, você ainda precisa capturar bloqueios para listas de páginas, copiar dados ou ajustar PTEs. Assim, a regra tácita de consistência está em vigor desde 1989, quando o cache de buffer unificado apareceu no SVR4. Como resultado, encontrar bugs estranhos em cenários de produção libmdbx ocupados deu muito trabalho. Primeiro, reproduzindo o problema, depois verificando hipóteses e verificando melhorias.

Agora podemos dizer com confiança que o problema foi identificado, localizado e removido de forma confiável, apesar da complexidade e especificidade do cenário de reprodução. Além disso, o trabalho do mecanismo de bypass foi confirmado por um dos desenvolvedores da Erigon (Ethereum), no caso dele, na compilação de depuração, a proteção foi acionada como uma regressão devido a uma verificação de asserção adicional.

Deve-se notar que, no contexto do uso generalizado de libmdbx em projetos de trabalho, é fundamentalmente mais importante garantir uma operação confiável, em vez de descobrir se é um bug ou um recurso, e se essa consistência pode ser confiável especialmente sem procurar as causas da inconsistência dentro do kernel Linux. Então, aqui estamos falando sobre como corrigir um problema que pode afetar os usuários.

Corrigida uma regressão do bug EXDEV (link entre dispositivos) ao copiar a quente um banco de dados sem compactação para outro sistema de arquivos, tanto por meio da API quanto com o utilitário mdbx_copy.
Kris Zyp implementou suporte para libmdbx no Deno.

Corrigido o tratamento do valor definido pela opção MDBX_opt_rp_augment_limit ao processar grandes transações em grandes bancos de dados. Anteriormente, devido a um bug, ações desnecessárias podiam ser executadas, às vezes afetando o desempenho em implementações de Ethereum (Erigon/Akula/Silkworm) e projetos da Binance Chain.

Muitos bugs foram corrigidos, incluindo aqueles para a API C++ e corrigiu muitos problemas de compilação em configurações raras e exóticas. Uma lista completa de todas as melhorias significativas está disponível no ChangeLog.

Por fim, se estiver interessado em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.