2

構成ファイルに基づいて、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}]です。オンラインに戻ると、アプリはより優先度の高いノードに移動することを認識していると思います。

このシナリオでテイクオーバーを実装するにはどうすればよいですか?

4

1 に答える 1