ARPA-SIMC / arkimet

A set of tools to organize, archive and distribute data files.
Other
15 stars 5 forks source link

arki-query --postproc=json non termina su un periodo ~1y #269

Closed edigiacomo closed 3 years ago

edigiacomo commented 3 years ago

Questo problema si presenta solo sul server operativo arkioss, che contiene i dati osservati.

Se faccio una query --data, tutto ok

$ arki-query --postproc="json" 'reftime:>=2019-01-01,<=2020-01-01; area:VM2,3095; product:VM2,161' /arkivio/arkimet/dataset/simnbo

Se uso il postprocessatore json, mi restituisce un po' di output (quasi tutto, visto che nella suddetta query arriva fino a dati del dicembre 2019) e poi si pianta. ARKI_IO_TIMEOUT non sortisce, peraltro, effetto (vedi #252).

$ arki-query --postproc="json" 'reftime:>=2019-01-01,<=2020-01-01; area:VM2,3095; product:VM2,161' /arkivio/arkimet/dataset/simnbo

Facendo la query localmente al server, non si pianta.

Se copio localmente i dati del dataset (e.g. tutto il 2019), il problema scompare (con arki-server locale)

$ rsync -avzR arkimet@arkioss:/arkivio/arkimet/dataset/./simnbo/{config,2019} .
$ arki-mergeconf simbo > conf
$ arki-server --url="http://localhost:8090" --host=0.0.0.0 --port=8090  conf  --verbose

Le versioni dei pacchetti su server di produzione e macchina di test sono sostanzialmente le stesse:

[arkimet@arkioss8 ~]$ rpm -qi dballe arkimet meteo-vm2 arkimet-postprocessor-suite dba_qcfilter | grep -i version
Version     : 9.0
Version     : 1.35
Version     : 1.2.4
Version     : 0.1
Version     : 0.0.2

[edg@oliva]$ rpm -qi dballe arkimet meteo-vm2 arkimet-postprocessor-suite dba_qcfilter | grep -i version
Version     : 9.0
Version     : 1.35
Version     : 1.2.0
Version     : 0.1
Version     : 0.0.2

Differiscono solo per meteo-vm2 (ma è una questione di file di configurazione, non di libreria). La sostanziale differenza è che arkioss è Centos8 e oliva è Fedora32.

Se invece la query è su un periodo più breve (fino a 11 mesi), non si pianta:

$ arki-query --verbose --postproc="json" 'reftime:>=2019-02-01,<=2020-01-01; area:VM2,3095; product:VM2,161' http://arkioss.metarpa:8090/dataset/simnbo
spanezz commented 3 years ago

Quello che ho osservato io su arkioss:

# Si pianta dopo aver scritto 9417706b
arki-query --postproc="json" 'reftime:>=2019-01-01,<=2020-01-01; area:VM2,3095; product:VM2,161' /arkivio/arkimet/dataset/simnbo  > file.json
# Funziona correttamente ed esce dopo aver scritto 9874508b
ARKI_IO_TIMEOUT=2000 arki-query --postproc="json" 'reftime:>=2019-01-01,<=2020-01-01; area:VM2,3095; product:VM2,161' /arkivio/arkimet/dataset/simnbo  > file.json

Per il caso http, rimando a #252, ed è probabile che sia semplicemente che non abbiamo un timeout settato in arki-server

spanezz commented 3 years ago

Grazie al tuo comando di rsync, l'ho riprodotto su otto.metarpa, dove posso fare prove con build locali di arkimet instrumentati per il debugging

spanezz commented 3 years ago

Sto facendo fatica a capire esattamente la root cause del problema, ma ho visto dove si inceppa. È il percorso di interazione complesso "manda dati al postprocessor, leggili dal postprocessor, mandali alla destinazione", che al momento è gestito da due parti diverse di arkimet, una manda dati al postprocessor, e una li legge dal postprocessor e li gira alla destinazione.

Sto ragionando di ristrutturare riunendo il tutto in un event loop unico. O scritto in casa, o usando la libevent.

spanezz commented 3 years ago

Ho fatto merge del codice di streaming con timeout e del codice di streaming senza il timeout. Ora viene usato solo il codice di streaming con timeout, ma settando il timeout della poll() a -1 che significa "aspetta per sempre".

Ho visto che con questa modifica, il piantamento di questo issue non si ripropone piú.

Lascio aperto i l ticket perché ci sono altre ristrutturazioni che vorrei fare per rendere piú gestibile questo codice

edigiacomo commented 3 years ago

Ho fatto una prova su otto.metarpa e in effetti il problema non si presenta più. Posso considerare il master stabile e pacchettizzare?

Purtroppo, su centos7 ci sono dei problemi in fase di pacchettizzazione (https://simc.arpae.it/moncic-ci/arkimet/last/master/centos7/build.log), dovuti al fatto che non può generare le man page con help2man. Dai log non si vede, ma compilando arkimet sotto Centos7 ho:

[edigiacomo@sette arkimet] (master)$ ./run-local src/arki-dump  --help
Traceback (most recent call last):
  File "/autofs/nfshomes/edigiacomo/src/arkimet/src/arki-dump", line 2, in <module>
    from arkimet.cmdline.dump import Dump
  File "/autofs/nfshomes/edigiacomo/src/arkimet/python/arkimet/__init__.py", line 4, in <module>
    from _arkimet import (
ImportError: /autofs/nfshomes/edigiacomo/src/arkimet/arki/.libs/libarkimet.so.1: undefined symbol: _ZN4arki6stream24ConcreteStreamOutputBaseINS0_20ConcreteLinuxBackendEEC2ESt10shared_ptrINS_5utils3sys19NamedFileDescriptorEEi
spanezz commented 3 years ago

Ho finito il giro di refactoring del codice: vediamo se ha risolto anche il problema di centos7

spanezz commented 3 years ago

Ci sono ancora delle cose da mettere a punto su Centos7, ci sto lavorando

spanezz commented 3 years ago

La build che ho fatto su sette passa i test!

edigiacomo commented 3 years ago

@spanezz posso chiudere la issue oppure volevi tenerla aperta per refactoring?

spanezz commented 3 years ago

Possiamo chiudere, direi che sia fatto tutto incluso il lavoro di refactoring