Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adiciona tentativas de execução na função search_text_with_retry #23

Merged
merged 1 commit into from
Feb 2, 2023

Conversation

edulauer
Copy link
Member

@edulauer edulauer commented Feb 1, 2023

Após as restrições de bots no portal da IN e necessidade de utilização da biblioteca Selenium (#19), as DAGs do Ro-Dou que envolvem busca baseada em lista de servidores têm gerado erros de instabilidade no retorno do json pelo BeautifulSoap através da página de retorno da busca dos termos.

search_results = json.loads(script_tag.contents[0])['jsonArray'] AttributeError: 'NoneType' object has no attribute 'contents'

Como a função search_text_with_retry previa apenas uma tentativa de reexecução da função após um Exception, para contornar o problema e permitir a execução completa das DAGs, sugere-se aumentar o número de tentativas de execução da função.

@lucasbenevides lucasbenevides merged commit 6bce874 into main Feb 2, 2023
@lucasbenevides lucasbenevides deleted the search_retries branch February 2, 2023 14:22
@nitaibezerra
Copy link
Contributor

Olá Lauer,

Vi que esse PR já foi aceito mas vou fazer um comentário sobre isso para uma futura evolução mais sofisticada.

A forma como isso está implementado, ou seja, fazendo retry dentro do loop de execução de uma task, foge às boas práticas de design de DAGs (sim, fui eu que fiz isso). A questão é que dessa forma existem 2 lugares de retry. Esse aí e o próprio retry da task como um todo. E só pra esclarecer pra quem não compreendeu exatamente o motivo desse segundo nível de retry, ele é mais eficiente por que retoma do ponto em que quebrou (considerando uma lista enorme de termos de pesquisa), e não do início da lista.

A solução alternativa, ou seja, eliminar essa redundância de retries, é mudar a arquitetura da DAG para ela possuir uma task para cada termo ao invés de uma única task para todos os termos. Dessa forma, caso a pesquisa por um termo falhe, o Airflow vai gerenciar os retries independentemente dos outros termos.

Para implementar essa mudança vai ser preciso mexer no dou_dag_generator.py e dinamicamente criar uma task para cada termo no YAML. Também será necessário adicionar uma task para aglutinar todos os resultados antes da task de envio do email.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants