Implementar timeout padrão para execução de queries via Explorer UI (BE)

Description

Descrição

Atualmente, usuários podem lançar queries pesadas através da interface (Explorer UI) e, mesmo após fecharem a janela do navegador, o job continua em execução por horas no BigQuery.
Esses jobs se tornam ofensores de slots difíceis de identificar e impactam a performance geral da plataforma.


Problema

  • O usuário executa uma query muito pesada via UI.

  • Fecha o navegador ou muda de aba, e o job segue executando indefinidamente.

  • O backend não aplica nenhum timeout, portanto o job só termina por conclusão natural ou intervenção manual.

  • Isso consome recursos (slots) e prejudica outros usuários.


Proposta de Solução

Implementar timeout padrão de X minutos (sugestão inicial: 30 minutos) para todas as queries enviadas via Explorer UI.

O backend deve enviar o parâmetro --job_timeout_ms na submissão do job para o BigQuery, garantindo que o job seja automaticamente cancelado após o tempo limite. Parâmetro retirado da doc oficial: https://cloud.google.com/bigquery/docs/reference/bq-cli-reference#bq_query

Exemplo:

bq query --job_timeout_ms=1800000 "SELECT 1"

No código, o parâmetro corresponde a:

--job_timeout_ms={string (Int64Value)}

Benefícios

  • Evita consumo prolongado e desnecessário de slots.

  • Garante melhor uso dos recursos de execução.

  • Melhora a experiência do usuário (não fica “preso” em queries intermináveis).

  • Reduz necessidade de monitoramento manual de jobs longos.


Implementação sugerida

  1. Alterar o backend responsável pelo envio de jobs BigQuery adicionando o campo opcional job_timeout_ms ao payload da requisição.

  2. O frontend passa a adicionar o valor de 30 minutos (1800000 ms) em todas as requests que partem dele.


Exemplo de job com timeout

ideia-dataops-prod:US.bqjob_r7c9da323a3adc1ce_00000199ca341a90_1ideia-dataops-prod:US.bqjob_r2f7a7f8ac506efae_00000199ca37219c_1

Critérios de aceitação

  • Explorer deve enviar um tempo de timeout, limitando entre 30 min e 120 min.

    • Na ausência do parametro assumir o valor padrão de 120 min.

  • UI do Explorer deve ter um alerta que a query vai ficar em execução por um período em especifico:

    • Valor definido na UI: 30 minutos.

    • Mensagem: The query will run for at most 30 minutes, unless otherwise specified in the configuration.”

  • Queries enviadas pela UI são automaticamente canceladas após o tempo limite configurado.

    • Queries não provenientes da UI irão assumir o tempo de timeout de 120 minutos.

  • Logs indicam claramente quando um job foi finalizado por timeout.