linea-it / tno

LIneA Occultation Prediction Database
https://solarsystem.linea.org.br
MIT License
1 stars 0 forks source link

Erro no registro dos resultados #1101

Open glaubervila opened 1 week ago

glaubervila commented 1 week ago

Achei alguns casos em que o pipeline de predição falha ao registrar os resultados da predição.

A mensagem de erro que aparece no submit_task.log é generica informando que name não pode ser null.

2024-11-06 12:43:38,428 [ERROR] Asteroid [2010 BH122] Failed in Ingest Occultations stage. Error: (psycopg2.errors.NotNullViolation) null value in column "name" violates not-null

Mas a causa real do problema está na função path_coeff do pipeline. qualquer erro que aconteça nessa função o arquivo de predições occultation_table.csv é gerado incompleto o que causa a falha no registro.
O Correto é tratar para que caso esta função falhe em alguma das operações ela não crie o csv das predições. O Csv só deve ser criado caso a função execute com sucesso.

Neste exemplo, a causa do erro foi uma operação entre um campo Null e um inteiro.

PRAIA OCC is Done!
Occultation table created: [/tmp/02d05/occultation_table.csv]
Occultation File Path: [/tmp/02d05/occultation_table.csv]
Calculating path coef
Failed in Path Coef stage. Error: '<' not supported between instances of 'NoneType' and 'int'
Predict Occultation Done in 0:00:33.433305

Mas tem outros casos como os do **** no resultado do praia. a principio pelo que eu entendi qualquer erro que a função tenha vai resultar em csv mal formado. nestes casos o ideal é não ter o csv.

O portal considera:

glaubervila commented 1 week ago

@rcboufleur Identifiquei o problema para este caso especifico de operação entre None e Int. O problema é causado pelo fato do asteroid ter seu atributo h como nulo e durante a função path_coef são feitos 2 testes comparando este atributo h < 99 e h > 99 o que causa o erro. eu tratei utilizando uma checagem antes da operação mas não sei o impacto nos resultados.

Arquivo occ_path_coeff.py

Linha 233:

# Antes
if  obj_data["h"] < 99:
# DEPOIS
if (obj_data["h"] is not None and obj_data["h"] < 99):

Linha 454

# Antes
if obj_data["h"] > 99:
# DEPOIS
if obj_data["h"] is not None and obj_data["h"] > 99:

IMPORTANTE Está correção está no branch manage_bsps atenção caso vá corrigir o mesmo erro direto em main ou quando for fazer o merge deste branch.