Skip to content

Feat/ingest sanitize rollback retry cap#1203

Merged
rcboufleur merged 17 commits into
mainfrom
feat/ingest-sanitize-rollback-retry-cap
May 13, 2026
Merged

Feat/ingest sanitize rollback retry cap#1203
rcboufleur merged 17 commits into
mainfrom
feat/ingest-sanitize-rollback-retry-cap

Conversation

@rcboufleur
Copy link
Copy Markdown
Collaborator

Melhorias na pipeline de predição de ocultações: sanitização dos dados de ingestão de asteroides com rollback/retry, delegação do cache IERS ao astropy, e refinamentos na configuração do Parsl.

Principais mudanças

  • Sanitização de ingest com rollback/retry — O asteroid.py agora sanitiza os dados antes do COPY/ingest, remove linhas com sentinelas mascaradas que quebravam a ingestão, e utiliza transações via conn.begin() com rollback automático em caso de falha.

  • Cache IERS delegado ao astropy — Tanto no backend quanto no predict_occultation, a gestão do cache IERS foi delegada ao astropy, eliminando backups manuais e simplificando os scripts warm_cache.py e entrypoint.sh. O CACHE_DIR é definido antes da importação do Astropy para evitar race conditions.

  • Configuração Parsl flexível — A partition do Slurm agora é configurável via PARSL_SLURM_PARTITION (antes hardcoded). Novas variáveis PARSL_LINEA_MAX_BLOCKS e PARSL_LINEA_CORES_PER_NODE substituem o cap rígido de workers, com defaults seguros (MAX_BLOCKS=1).

  • Infraestrutura — O Dockerfile agora cria /app/cache na build, e os entrypoints foram simplificados. Templates de compose e env sincronizados com as novas variáveis.

- Coerce colunas numéricas de tno_occultation na ingestão: sentinels só com
  asteriscos viram NaN antes do COPY (ex.: pmdec ****).
- ingest_predictions: commit por task; rollback em erro; retry com backoff
  para psycopg2 InsufficientResources (env INGEST_INSUFFICIENT_RESOURCES_*).
- Asteroid.ingest_predictions relança DBAPIError quando há conn para o caller
  tratar após rollback na transação.
- MAX_CONCURRENT_ASTEROID_TASKS reduz proporcionalmente max_workers dos dois
  executores Parsl em linea (0 desliga).
- Testes unitários para a sanitização numérica.

Made-with: Cursor
… de workers

Remove MAX_CONCURRENT_ASTEROID_TASKS. Em linea com dois executores, max_blocks
de small/large vem de PARSL_LINEA_SMALL_MAX_BLOCKS (default 16) e
PARSL_LINEA_LARGE_MAX_BLOCKS (default 12), com mínimo 1.

Made-with: Cursor
… em run_pred_occ

Alinha com run.py e evita IERS/cache fora do diretório esperado quando
CACHE_DIR está definido.

Made-with: Cursor
…config

Centraliza defaults e parsing em _env_int_min_one; run_pred_occ só reloga
max_blocks já aplicados pelo get_config.

Made-with: Cursor
- PARSL_LINEA_SMALL_CORES_PER_NODE (default 28), PARSL_LINEA_LARGE_CORES_PER_NODE (52)
- max_workers = max_blocks * cores_per_node por executor
- Log em run_pred_occ inclui max_blocks, cores_per_node e max_workers

Made-with: Cursor
Se as variáveis não forem definidas, max_blocks small/large usa 1 (antes 16/12).
Comentários alinhados ao comportamento.

Made-with: Cursor
@rcboufleur rcboufleur merged commit 4a34994 into main May 13, 2026
7 checks passed
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.

1 participant