Question

Qu'est-ce qu'un bon moyen de conserver l'état lors du redémarrage d'un processus écrasé?

J'ai un superviseur dans une application OTP ce que plusieurs montres gen_servers "sous-système".

Par exemple, on est un sous-système « météo » qui génère un nouvel état météo toutes les 15 minutes et gère les requêtes de l'état actuel du temps. (Pensez le jeu de stand de limonade)

Si que les accidents de gen_server, je veux qu'il soit redémarré, mais il faut redémarrer l'état météorologique la plus récente, pas un état arbitraire définitivement dans init(). Il ne serait pas logique de l'état de simulation pour aller soudainement de « tempête de grêle » à « agréable et aéré » juste à cause de l'accident.

Je hésite à utiliser mnesia ou ETS pour stocker l'état après chaque mise à jour en raison de la complexité ajoutée; est-il un moyen plus facile?

Était-ce utile?

La solution

Tant qu'il doit juste être lors de l'exécution d'un suggérerait l'utilisation de l'ETS. La valeur est de loin supérieure à la complexité. L'API est simple et si vous travaillez avec des tables nommées l'accès est simple aussi. Il vous suffit de créer la table avant votre gen_server commence par le superviseur.

Deux - plus complexes - alternatives:

  • Construire une paire de processus, un pour le travail à faire, l'un pour le maintien de l'Etat. En raison de la simplicité de la seconde, il serait vraiment fiable.
  • une vraie bête pourrait être l'échange de la spécification enfant du superviseur de l'état actuel comme argument à chaque fois que l'état est en train de changer. (sourire) Non, je plaisante.

Autres conseils

  

est-il un moyen plus facile?

lorsque le processus est mort, il envoie un message au superviseur contenant état de processus, afin que vous puissiez utiliser cette valeur pour stocker dans le superviseur (dans mnesia ou l'état du superviseur) et lorsque le serveur démarre (dans init ), il devra envoyer l'appel de synchronisation au superviseur pour obtenir la valeur de l'Etat. Je exemple pas réel, mais je l'espère, il est logique.

En tout cas je ne vois pas vraiment problème pour stocker l'état dans mnesia.

désolé mon anglais:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top