samsung restaurar restablecer reiniciar fabrica desde como celular arranque erlang crash state exit supervisor

erlang - restablecer - restaurar windows 10 de fabrica desde arranque



¿Cómo puedo restaurar el estado del proceso después de un bloqueo? (2)

¿Cuál es una buena forma de mantener el estado al reiniciar un proceso bloqueado?

Tengo un supervisor en una aplicación OTP que observa varios gen_servers "subsistema".

Por ejemplo, uno es un subsistema "meteorológico" que genera un nuevo estado meteorológico cada 15 minutos y maneja las consultas para el estado actual del clima. (Piensa en el juego de limonada)

Si ese gen_server falla, quiero que se reinicie, pero debe reiniciarse con el estado meteorológico más reciente, no con un estado arbitrario codificado en init (). No tendría sentido que el estado de simulación pase repentinamente de "tormenta de granizo" a "agradable y ventoso" solo por el accidente.

Dudo en usar mnesia o ETS para almacenar el estado después de cada actualización debido a la complejidad añadida; ¿hay una manera mas facil?


¿hay una manera mas facil?

cuando el proceso se apaga, envía un mensaje al supervisor que contiene el estado del proceso, por lo que puede usar este valor para almacenar en el supervisor (en mnesia o en el estado del supervisor) y cuando el servidor se inicie (en init ) debe enviar una llamada de sincronización al supervisor obtener valor del estado No tengo un ejemplo real, pero espero que tenga sentido.

De todos modos, realmente no veo problema para almacenar el estado en mnesia.

perdon por mi inglés :)


Siempre y cuando solo sea durante el tiempo de ejecución, sugeriría el uso de ETS. El valor es mucho mayor que la complejidad. La API es simple y si estás trabajando con tablas nombradas, el acceso también es simple. Solo tiene que crear la tabla antes de que su gen_server sea iniciado por el supervisor.

Dos - más complejas - alternativas:

  • Cree un par de procesos, uno para el trabajo, uno para el mantenimiento del estado. Debido a la simplicidad del segundo, sería realmente confiable.
  • Una tontería real podría ser el intercambio de las especificaciones hijo del supervisor con el estado actual como argumento cada vez que el estado está cambiando. (sonrisa) No, es broma.