Desejamos ter a garantia de que a execução de todos módulos ocorra corretamente, mesmo durante uso paralelo intenso. Para isso, na situação que descreveremos, uma nova versão do arquivo settings.py só pode ser criada pelo spider_manager após termos certeza de que a versão anterior já foi lida e não será lida novamente. Para isso serão necessários mecanismos de comunicação entre processos.
Comportamento Atual
Quando uma coleta é executada, o módulo spider_manager recebe a requisição de criação de uma nova spider. Ao receber essa requisição, cria um arquivo settings.py com as configurações, e executa o código da spider em um processo separado. Esse código da spider lê o arquivo settings.py gerado e carrega de lá algumas configurações. Enquanto isso, o processo principal notifica que criou uma nova spider (através do Kafka) e volta a aguardar novos comandos.
Um risco em potencial é que, caso dois comandos de criação de spider sejam recebidos consecutivamente, o spider_manager sobrescreva o arquivo settings.py da primeira spider antes que ela efetue a leitura desse arquivo. Dessa forma, ela erroneamente leria a configuração da segunda spider. Não temos um exemplo disso acontecendo, mas é importante que existam mecanismos que previnam atimente que essa situação ocorra.
Comportamento Esperado
Desejamos ter a garantia de que a execução de todos módulos ocorra corretamente, mesmo durante uso paralelo intenso. Para isso, na situação que descreveremos, uma nova versão do arquivo
settings.py
só pode ser criada pelospider_manager
após termos certeza de que a versão anterior já foi lida e não será lida novamente. Para isso serão necessários mecanismos de comunicação entre processos.Comportamento Atual
Quando uma coleta é executada, o módulo
spider_manager
recebe a requisição de criação de uma nova spider. Ao receber essa requisição, cria um arquivosettings.py
com as configurações, e executa o código da spider em um processo separado. Esse código da spider lê o arquivosettings.py
gerado e carrega de lá algumas configurações. Enquanto isso, o processo principal notifica que criou uma nova spider (através do Kafka) e volta a aguardar novos comandos. Um risco em potencial é que, caso dois comandos de criação de spider sejam recebidos consecutivamente, ospider_manager
sobrescreva o arquivosettings.py
da primeira spider antes que ela efetue a leitura desse arquivo. Dessa forma, ela erroneamente leria a configuração da segunda spider. Não temos um exemplo disso acontecendo, mas é importante que existam mecanismos que previnam atimente que essa situação ocorra.Passos para reproduzir o erro
Não aplicável.
Especificações da Coleta
Não aplicável.
Sistema
Branch
distributed-system
.