rTRNG e valgrind: Docker & Actions to the Rescue

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

[ad_1]

[This article was first published on Mirai Solutions, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

Temos o prazer de anunciar o rTRNG 4.23.1-1 e compartilhar sua jornada com valgrind, Docker e Ações do GitHub.

rTRNG é um pacote de código aberto para geração paralela avançada de números aleatórios em R. Ele se baseia no TRNG (Gerador de Números Aleatórios da Tina), uma biblioteca geradora de números pseudoaleatórios C ++ de última geração para simulações de Monte Carlo sequenciais e paralelas.

O pacote vive feliz no CRAN desde seu primeiro lançamento, e planejamos um lançamento de manutenção para incluir os desenvolvimentos mais recentes da biblioteca TRNG C ++ upstream. Como parte de uma nova apresentação, a equipe CRAN gentilmente nos indicou alguns problemas de valgrind relatado pelas verificações do pacote CRAN. valgrind fornece ferramentas para detectar possíveis problemas de alocação de memória e acesso, que são muito relevantes para pacotes R, incluindo código C ++.

Apesar de ter pouca experiência com valgrind, poderíamos resolver os problemas seguindo um caminho que é bastante comum e muito eficaz ao investigar / corrigir problemas ou bugs em geral. Compartilhamos os detalhes de nossas investigações abaixo e como acabamos com uma solução baseada em Docker para incluir valgrind verifica em nossos fluxos de trabalho de Ações do GitHub de Integração Contínua (CI).

Reproduza o problema

Para os casos em que os erros são reportados em um sistema ao qual você não tem acesso, é fundamental ter um ambiente acessível onde os erros possam ser reproduzidos, investigados e, em última instância, corrigidos. Isso pode não ser trivial para valgrind problemas relatados pelas verificações CRAN. Felizmente, e principalmente inspirado por uma postagem no blog de Brodie Gaslam, poderíamos chamar Docker para o resgate. Usando Winston Chang’s wch1/r-debug imagem, valgrind verificações e problemas são reproduzidos como segue:

mkdir -p valgrind-check
docker run --rm -v $(pwd)/valgrind-check:/tmp/valgrind-check wch1/r-debug bash -c ' 
  wget https://cran.r-project.org/src/contrib/Archive/rTRNG/rTRNG_4.20-1.tar.gz 
  && RDvalgrind -e "install.packages("remotes"); 
    remotes::install_deps("rTRNG_4.20-1.tar.gz", dependencies = TRUE)" 
  && RDvalgrind -d "valgrind --track-origins=yes" CMD check 
    -o /tmp/valgrind-check --use-valgrind --no-stop-on-test-error 
    rTRNG_4.20-1.tar.gz'
Exemplo mínimo

Trabalhar com exemplos mínimos costuma ser a chave para uma investigação eficaz e eficiente. Executando o extenso conjunto de verificações de pacote com valgrind facilmente leva de 15 a 20 minutos e não é um exemplo prático mínimo. Portanto, isolamos cuidadosamente um teste específico que está causando o problema (um dos muitos relatados). A partir daí, podemos extrair alguns exemplos relevantes e mínimos que podem ser executados em uma sessão R (interativa) com valgrind em um contêiner do Docker. Mais detalhes podem ser encontrados na edição miraisolutions / rTRNG # 16 do GitHub.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Isole a causa raiz

Com o foco em problemas individuais reproduzidos usando exemplos mínimos, ficou bastante claro onde localizar a causa raiz, encontrada em última instância no código C ++ incluído na biblioteca TRNG upstream.

Parque para consertos

O mesmo exemplo mínimo se mostrou muito útil para testar uma tentativa de conserto rápido para confirmar nosso entendimento da causa raiz. Executar a verificação completa novamente garantiu que nenhum outro problema restasse a ser investigado. Poderíamos então entrar em contato com Heiko Bauke, o mantenedor do TRNG, para relatar o problema e coordenar uma correção adequada.

Automação de patch e CI

Para garantir um ciclo eficaz e rápido de inclusão e teste de correções upstream, buscamos duas estratégias:

  • Automatize a aplicação de um patch para TRNG como parte de nosso pacote.
  • Incluir valgrind verifica em nossos fluxos de trabalho de CI. Isso foi direto, dado o suporte pronto para uso para a execução de contêineres Docker em Ações do GitHub, onde poderíamos executar valgrind verificações de um fluxo de trabalho de ações.

Ter toda essa automação no local tornou muito simples incluir, de forma controlada, o patch upstream do TRNG lançado por Heiko em tempo recorde. Além disso, tal configuração permitiu eventualmente ter um histórico de commit limpo e informativo para rTRNG no GitHub (consulte miraisolutions / rTRNG # 21):

  • Falha de CI revelando o problema original.
  • Avalie a correção upstream planejada como patch dentro do rTRNG.
  • Inclusão suave e confiante do patch upstream lançado corretamente.
Feliz envio de CRAN

Por último, mas não menos importante, isso nos colocou em posição para um lançamento CRAN confiante, aproveitando a CI para demonstrar a correção do valgrind questões para a equipe CRAN após o envio. A CI também terá um papel importante em lançamentos futuros, onde podemos capturar possíveis novos problemas antes de uma submissão do CRAN, facilitando a vida de todos os envolvidos.

Esperamos que compartilhar esta jornada possa fornecer dicas úteis para a comunidade R e enfatizar mais uma vez o poder da integração contínua e reprodutibilidade.



[ad_2]

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br