構成ファイルに基づいて、Erlang アプリケーションをシステムに動的にロードしています。これにより、ブート時に分散アプリケーションを開始することができなくなります。 )
アプリケーションを実行している NodeA と、フェイルオーバー ノードとしての NodeB があるとします。NodeA のコードを引っ張ると、アプリケーションは NodeB に移行します。これは予期されることです。しかし、NodeA をオンラインに戻して電話application:start(MyApp)
をかけようとすると、次のようになります。
{error, {shutdown,{myapp, start, [normal,["config.xml"]]}}}
これは、アプリの起動に失敗したことを示しています。
いずれにせよ、他の NodeB ですでにスーパーバイザを実行していて、それらを一緒に net_adm:ping したため、起動に失敗しました。
MyApp で application:takeover/2 を呼び出してノードの制御を取り戻し、他のノードでアプリケーションを強制終了できると思います。
{error,{not_running_distributed, MyApp}}
しかし、これもうまくいきません。私のノードの優先度リストは[NodeA, {NodeB, NodeC}]
です。オンラインに戻ると、アプリはより優先度の高いノードに移動することを認識していると思います。
このシナリオでテイクオーバーを実装するにはどうすればよいですか?