Erros de ElasticSearch relacionados a tenant parenteandrade (52f2c598b06e4df4b894f47ea3763244)

Description

Problema


Errors constantes no log conforme abaixo:

net.jodah.failsafe.FailsafeException: {"errorCode":500,"errorMessage":"DELETE http://elasticsearch.prod-mdm-1.gke.totvslabs.com:80/master-index-52f2c598b06e4df4b894f47ea3763244: HTTP/1.1 400 Bad Request\n{\"error\":{\"root_cause\":[{\"type\":\"remote_transport_exception\",\"reason\":\"[gce-prod-mdm-1-elasticsearch-master-6][10.0.0.122:9300][indices:admin/delete]\"}],\"type\":\"illegal_argument_exception\",\"reason\":\"Cannot delete indices that are being snapshotted: [[master-index-52f2c598b06e4df4b894f47ea3763244/bpefTFkZRIisWOjhvaPxnw]]. Try again after snapshot finishes or cancel the currently running snapshot.\"},\"status\":400}","possibleResponsibleField":""}

Stackdriver: https://cloudlogging.app.goo.gl/fCrkoyEwCJ5FBz6D7

image-20240724-051601.png

Critério de Aceite


  • Aplicar correção para não gerar erro na eliminação da tenant:
    • Como tratar momentos que o ES está rodando o snapshot no ES que impede a execução da task (fechamento dos indices)?

image-20240730-170852.png

Tenant sem usuários:

image-20240730-171237.png

image-20240724-052302.png

Activity

Robson Thanael Poffo 17 September 2024, 17:00 Jira Internal Users

okay, obrigado.

Renan Fernando Schroeder 17 September 2024, 16:04 Jira Internal Users

@Robson Thanael Poffo

Conforme alinhamos, vamos seguir com as seguintes tratativas no card:

  • Remover a necessidade que o fluxo de resiliência de execução da task necessita ir buscar a task do banco Postgres toda vez e passar a utilizar o que já está em memória (somente para esta task).

  • No job DeleteTenantDependenciesJob adicionar uma validação para que uma nova task DELETE_TENANT não seja criada em caso onde já existir uma task em andamento para a tenant em questão (READY/RUNNING). Dessa forma iremos evitar múltiplas tasks de deleção de tenants para uma mesma tenant (elas ficam travadas em READY até que a task que está em execução termine, depois elas ficam em um loop de falha na busca pela tenant dentro do processo de execução da task de deleção de tenant - devido a tenant já ter sido excluída no PG).

  • Na classe de execução da task DELETE_TENANT (DeleteTenantTaskProcessor) adicionar um tratamento de exceção caso a tenant em questão não exista mais, e, quando isso ocorrer, devemos falhar a task (porque ela deve ter sido criada erroneamente pelo job DeleteTenantDependenciesJob).

Robson Thanael Poffo 17 September 2024, 05:05 Jira Internal Users

@Renan Fernando Schroeder , vamos avaliar se vale um controle para cancelar a task caso a tenant não exista, cenário causado pelo início de tasks de DELETE TENANT de forma concorrente. Com isso vamos evitar tasks em loop / falhando constantemente.

Renan Fernando Schroeder 16 September 2024, 15:49 Jira Internal Users

@Robson Thanael Poffo

Durante a implementação do card CAPL-6401, aprofundamos bastante o tema e entendemos que o que levou a task a falhar de fato não foi o fato da colisão com o snapshot da tenant no ES. O exception que aparece no card é um erro que ocorre nestes casos, mas a plataforma em si já se encarrega de tentar executar a própria task novamente momentos depois. Tanto que esta falha não é registrada nos task logs, apenas nos logs. A única falha que foi registrada no task log e que de fato parece ter sido a última, e que levou a task a falhar, sendo uma inconsistência na busca pelo id da task no banco Postgres no dia 30/07 (Task d63834a50d4d4bdcbcabbc89d2f2ad4 not found).

O que entendemos que vale mais a pena corrigir é remover a necessidade que o fluxo de resiliência de execução da task necessita ir buscar a task do banco Postgres toda vez e passar a utilizar o que já está em memória (somente para esta task).

Como não temos mais os registros de logs do caso reportado pelo card entre dia 23 e 30/07, não temos condições de entender melhor o que ocorreu para que a task ficasse tantos dias em execução. Mas entendemos que a melhoria que adotamos irá melhor a resiliência do reprocessamento de deleção de tenants, garantindo que a task irá continuar a ser reprocessada em casos de colisão com snapshot do ES. Se acaso alguma task de deleção de tenant volte a colidir com alguma inconsistência do ES, ela será reprocessada mais vezes do que o normal, e assim podemos priorizar a investigação olhando mais a fundo os logs para entender quais outras melhorias poderemos adotar no fluxo para garantir maior agilidade no processamento da task.

De acordo com o plano?

Automation for Jira 30 August 2024, 21:00 Jira Internal Users

@Robson Thanael Poffo ,
@Renan Fernando Schroeder , @Rodrigo Bechtold ,

Este issue foi planejada para ser entregue até 2024-09-13. Você pode confirmar consultando o campo Due Date desta issue.

Data já planejadas para esta issue: 2024-09-13

Se o campo External Issue Link estiver preenchido com o link de uma issue válida no Jira Produção o cliente também será notificado no Jira Produção.