Erro de rede com vários contêineres do Docker sendo executados em paralelo

1

Eu tenho um número de arquivos python contendo testes de unidade no diretório /code/test Em um esforço para paralelizar meu teste sem qualquer edição de código, imaginei que poderia usar o GNU Parallel para executar N arquivos de uma vez contra% bancos de dadosN. Primeiro eu crio os bancos de dados:

$ docker run -d --name redis-unittest-1 redis \
 && docker run -d --name mongo-unittest-1 mongo:3.2.10 \
 && docker run -d --name redis-unittest-2 redis \
 && docker run -d --name mongo-unittest-2 mongo:3.2.10 \
 && docker run -d --name redis-unittest-3 redis \
 && docker run -d --name mongo-unittest-3 mongo:3.2.10 \
 && docker run -d --name redis-unittest-4 redis \
 && docker run -d --name mongo-unittest-4 mongo:3.2.10 \
 && docker run -d --name redis-unittest-5 redis \
 && docker run -d --name mongo-unittest-5 mongo:3.2.10 \
 && docker run -d --name redis-unittest-6 redis \
 && docker run -d --name mongo-unittest-6 mongo:3.2.10 \
 && docker run -d --name redis-unittest-7 redis \
 && docker run -d --name mongo-unittest-7 mongo:3.2.10 \
 && docker run -d --name redis-unittest-8 redis \
 && docker run -d --name mongo-unittest-8 mongo:3.2.10

Em seguida, use find para pegar todos os nomes dos arquivos de teste e canalizar isso para Paralelo.

docker run test_img find /code/test -name "test*.py" \
| parallel -j8 \
docker run --rm \
--link mongo-unittest-{%}:db --link redis-unittest-{%}:redis \
-v $(pwd)/test-reports:/code/test-reports \
test_img python /code/test/discover.py --file {}  

Tudo parece estar bem, mas algumas vezes um dos arquivos falhará assim:

Traceback (most recent call last):
  File "/code/test/server/testApplicationAPI.py", line 28, in setUp
    super(TestApplicationAPI, self).setUp()
  File "/code/test/server/tools/testutils.py", line 345, in setUp
    self.app = server.createApp(True)
  File "/code/server/util/rq/../../server.py", line 55, in createApp
    mongo = PyMongo(app)
  File "/usr/local/lib/python2.7/site-packages/flask_pymongo/__init__.py", line 97, in __init__
    self.init_app(app, config_prefix)
  File "/usr/local/lib/python2.7/site-packages/flask_pymongo/__init__.py", line 249, in init_app
    cx = connection_cls(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py", line 428, in __init__
    raise ConnectionFailure(str(e))
ConnectionFailure: [Errno -2] Name or service not known

Não sei como começar a solucionar isso. Talvez algo como strace para ver o que está acontecendo com mais detalhes? Eu nunca usei isso. Qualquer pensamento seria apreciado.

    
por grivescorbett 14.02.2017 / 20:04

1 resposta

0

Parece que você encontrou um bug de condição de corrida no MongoDB. A partir da mensagem, parece que o DNS está sobrecarregado, mas pode muito bem ser outra coisa.

Você deve agora:

  • Veja se você pode reproduzir o erro no código mais recente do MongoDB (O bug pode ser bem conhecido e já corrigido).
  • Veja se você pode criar um link do MCVE. Isso geralmente é muito difícil quando o bug é uma condição de corrida - especialmente porque você quer que os desenvolvedores consigam reproduzir sua situação exata. Se você pode provocar o erro em uma máquina virtual do site OsBoxes.org, é um bom começo. Variar o número de trabalhos em paralelo e o número de núcleos na máquina virtual também pode ajudar. Talvez algumas pessoas úteis na comunidade mongo possam guiá-lo?
  • Arquive um relatório de erros.

Nada até agora sugere um problema no GNU Parallel.

    
por 16.02.2017 / 07:31