Domanda

Che cosa è un buon modo per mantenere lo stato al riavvio di un processo si è bloccato?

Ho un supervisore in un'applicazione OTP quello orologi diversi gen_servers "sottosistemi".

Per esempio, uno è un sottosistema "tempo" che genera un nuovo stato tempo ogni 15 minuti e gestisce le query per lo stato attuale del tempo. (Pensate il gioco limonata stand)

Se quel crash gen_server, voglio che essere riavviato, ma dovrebbe essere essere riavviato con lo stato più recente tempo, non uno stato arbitrario hardcoded in init(). Non avrebbe senso per lo stato di simulazione per passare improvvisamente da "grandine" a "piacevole e ventilato" solo perché dello schianto.

Ho esitato a usare mnesia o ETS per memorizzare lo stato dopo ogni aggiornamento a causa della complessità; c'è un modo più semplice?

È stato utile?

Soluzione

Finché deve solo essere durante l'esecuzione di un suggerirebbe l'utilizzo di ETS. Il valore è di gran lunga superiore alla complessità. L'API è semplice e se si sta lavorando con tabelle denominate l'accesso è semplice troppo. Devi solo creare la tabella prima della gen_server viene avviato dal supervisore.

Due - più complessi - alternative:

  • Crea un paio di processi, uno per il lavoro da fare, uno per il mantenimento dello stato. Grazie alla semplicità del secondo sarebbe davvero affidabile.
  • Un vero e proprio stupido poteva essere lo scambio delle specifiche bambino del supervisore con lo stato corrente come argomento ogni volta che lo stato sta cambiando. (sorriso) No, sto scherzando.

Altri suggerimenti

  

c'è un modo più semplice?

Quando il processo è morto invia messaggio a supervisore che contiene Stato del processo, in modo da poter utilizzare questo valore per memorizzare nella supervisor (in mnesia o stato di supervisore) e quando il server si avvia (in init ) si deve inviare chiamata sincronizzazione per supervisore per ottenere il valore di Stato. Ho ad esempio non reale, ma spero che abbia un senso.

In ogni caso io non vedo proprio problema per memorizzare lo stato in mnesia.

scusate il mio inglese:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top