2009-05-20 19 views
1

2ノード以上に分散したアプリケーションがあります。最初のノードを停止()するとフェイルオーバーは完全に機能しますが、最初のノードを再起動するとテイクオーバーが失敗し、start_linkの戻りがすでに開始されているためアプリケーションがクラッシュします。フェールオーバーが成功した後にErlang Takeoverが失敗する

SUPERVISOR REPORT <0.60.0>         2009-05-20 12:12:01 
=============================================================================== 
Reporting supervisor       {local,twitter_server_supervisor} 

Child process 
    errorContext              start_error 
    reason           {already_started,<2415.62.0>} 
    pid                undefined 
    name                 tag1 
    start_function        {twitter_server,start_link,[]} 
    restart_type              permanent 
    shutdown                10000 
    child_type               worker 

ok 

マイアプリ

start(_Type, Args)-> 
    twitter_server_supervisor:start_link(Args). 

stop(_State)-> 
    ok. 

上司:

start_link(Args) -> 
    supervisor:start_link({local,?MODULE}, ?MODULE, Args).  

両方のノードが同じsys.configファイルを使用しています。

このプロセスについて、私は上記のことがうまくいかないと理解していませんか?

+1

このようにうまく書式設定されたsasl supervisorレポートがどこに届いているのですか?もっと読みやすく、デフォルトです。あなたはそれまたはそのソースにリンクを共有することはできますか? – gleber

+1

これは、erl_12Bのウィンドウボックスにrb:show(N)で表示される標準的な結果です。 私が見た唯一のバリエーションは、rpc経由で呼び出しを行うと、出力にノード名があふれていますか?何を見ていますか? –

答えて

2

あなたの問題は、Twitterサーバー管理者が子供の1人を起動しようとしているようです。エラーレポートはstart_function

{twitter_server,start_link,[]} 

と子文句を言うそして、あなたはそのコードを示していないので、私はそれが自分自身の名前を登録しようとしていることを推測することができ、それに登録プロセスがすでに存在しているので、名。

さらに推測、その理由は、PID、私たちは私たち自身のためにつかむしようとした名前を持つPIDが示しています。それはゼロだった場合、ゼロ以外の初期整数があり

{already_started,<2415.62.0>} 

はPidそれはそれがローカルプロセスであることを意味します。そこからグローバル名を登録しようとしていることが推測され、その名前ですでにグローバルに登録されているプロセスがある別のノードに接続されています。

関連する問題