Melhor maneira de criar um SVN-Mirror?

8

Atualmente, estou procurando a melhor maneira de configurar um espelho SVN. Atualmente, vejo três possibilidades, todas com suas próprias desvantagens:

  • Tenha um SVN pós-commit-Hook que esteja bloqueando e sincronizando via svnsync. O problema aqui é obviamente que a confirmação está bloqueando até que os dados sejam transferidos para o espelho.
  • Tenha um SVN pós-commit-Hook que não esteja bloqueando e sincronizando via svnsync. Aqui, vejo o seguinte problema mais sutil: imagine alguém fazer check-in em um arquivo BIG e outra pessoa logo em seguida faça check-in em um arquivo pequeno. Como a confirmação é sem bloqueio, dois processos svnsync podem estar em execução ao mesmo tempo e o arquivo pequeno pode ultrapassar o arquivo BIG no caminho para o espelho (isso parece muito crítico em termos de tempo e improvável, embora possível em princípio). A revisão deles seria trocada.
  • Sincronize como a cada quinze minutos com um cron-job. O mesmo problema se uma confirmação demorar mais de 15 minutos e, obviamente, esse atraso.

Eu esqueci uma possibilidade? Eu entendi algo errado? Alguma ideia? Obrigado já!

Talvez eu deva notar que a segunda possibilidade é a sugerida por diferentes sites. Por exemplo, consulte http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync

roesslerj
fonte
Como a confirmação é sem bloqueio, dois processos svnsync podem estar em execução ao mesmo tempo e o arquivo pequeno pode ultrapassar o arquivo BIG no caminho para o espelho (isso parece muito crítico em termos de tempo e improvável, embora possível em princípio). A revisão deles seria trocada. Isso não é possível, o svnsync replica as confirmações conforme elas são gravadas no repositório. Eles sempre aparecerão em ordem de revisão.
Dave Cheney

Respostas:

3

Você pode tentar uma abordagem semelhante à que usamos na Atlassian

https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

isenção de responsabilidade: Atualmente, sou um funcionário da Atlassian, mas não estava envolvido na implementação desta solução (apenas a manutenção)

Como eu disse acima no comentário, svnsync, run a partir de um repositório remoto se comporta deterministicamente. Ele não pode aplicar conjuntos de alterações fora de ordem. Portanto, o único problema que você tem ao usar um repositório remoto é a quantidade de atraso devido à propagação do changeset.

Dave Cheney
fonte
+1 na observação de que o svnsync não pode ficar fora de ordem, o único problema é a latência potencial.
Jim T
Você está totalmente certo ... cometi um erro estúpido de pensar. Portanto, o gancho simples e bonito de pós-consolidação do SVN deve fazê-lo na maioria dos casos. Caso a latência seja um problema, pode-se dar uma olhada no artigo referenciado Atlassian. Muito obrigado!
precisa saber é o seguinte
Esteja ciente de que o gancho de confirmação da postagem bloqueará o confirmador até que o gancho esteja completo. Não sei o que acontece se o gancho de confirmação da postagem falhar, não acho que a confirmação seja revertida, mas será pelo menos confusa.
Dave Cheney
Bem, usando o gancho pós-confirmação, você pode emitir um comando que retorne imediatamente (por exemplo, via 'command &' no linux), sem bloqueios. Como o gancho é pós-confirmação, não é possível reverter a confirmação. Se o svnsync falhar, o próximo svnsync precisará sincronizar duas revisões, o que simplesmente ocorre. O problema que ocorre aqui eu arquivaria sob a latência do tópico.
roesslerj