Ho un supervisore con due processi di lavoro: un client TCP che gestisce la connessione a un server remoto e un FSM che gestisce il protocollo di connessione.Supervisori con backoff
La gestione degli errori TCP nel processo figlio complica notevolmente il codice. Quindi preferirei "lasciarlo andare in crash", ma questo ha un problema diverso: quando il server non è raggiungibile, il numero massimo di riavvii sarà rapidamente raggiunto e il supervisore si romperà con la mia intera applicazione, il che è abbastanza indesiderabile per questo caso.
Quello che mi piacerebbe è avere una strategia di riavvio con back-off; in caso contrario, sarebbe sufficiente se il supervisore fosse a conoscenza del riavvio a causa di un arresto anomalo (ad esempio, se fosse passato come parametro alla funzione init
). Ho trovato this mailing list thread, ma c'è una soluzione più ufficiale/meglio testata?
I direi che la strategia nel tuo caso sembra sbagliata. Voglio dire se vuoi "lasciarlo andare in crash" ma allo stesso tempo riavviarlo immediatamente, quindi non c'è motivo di lasciarlo andare in crash perché stai solo usando il supervisore come meccanismo per i tentativi. Questo è semplicemente sbagliato imho. Dovresti lasciarlo andare in crash, inserire il codice nella sequenza di avvio se "attendi" le risorse e NON riprovare andando in crash. L'ho visto prima e di solito si tratta di un errore di progettazione piuttosto che di una limitazione nel supervisore. Cibo per la mente. –