2 votes

Application de distribution OTP Takeover

Je charge dynamiquement une application Erlang dans le système en fonction d'un fichier de configuration qui m'empêche de démarrer l'application distribuée au démarrage -- je parviens à faire fonctionner la reprise en cas de panne, mais pas la reprise (ou en termes OTP, Takeover).

Disons que j'ai NodeA exécutant l'application, et NodeB comme nœud de secours. Je débranche NodeA, et l'application migre vers NodeB. C'est attendu. Mais lorsque je remets en ligne NodeA et essaie d'appeler application:start(MyApp), j'obtiens :

{error, {shutdown,{myapp, start, [normal,["config.xml"]]}}} Ce qui indique que l'application échoue au démarrage.

Peu importe, l'échec de démarrage est dû au fait que j'ai déjà les superviseurs en cours d'exécution sur l'autre NodeB, et je les ai reliés via net_adm:ping.

J'imagine que je peux appeler application:takeover/2 sur MyApp pour reprendre le contrôle du nœud et arrêter l'application sur l'autre nœud.

{error,{not_running_distributed, MyApp}}

Mais cela ne fonctionne pas non plus. Ma liste de priorité de nœuds est [NodeA, {NodeB, NodeC}], donc je pensais que l'application saurait se déplacer vers le nœud de priorité la plus élevée une fois de retour en ligne.

Comment puis-je implémenter un Takeover dans ce scénario ?

1voto

Leo Points 121

Vous devrez peut-être utiliser application:takeover/2 à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X