5

サーバーの4つのインスタンスを実行し、サーバーボックスごとに2つのインスタンスを実行するセットアップがあります。私のサーバーには、無名関数を渡して別のスレッド(おそらく別のサーバー上にある)で実行することがたくさん含まれています。

今日、私はコードのリロードを行いました。これには、インスタンスの1つでいくつかの静的関数の内容を変更することが含まれていました(各インスタンスを順番に実行することを計画しています)。リロードを実行すると、大量のbadfunエラーが発生しました。そのボックスの他のインスタンスも同様のエラーを吐き出し始めました。もう一方のボックスの2つのインスタンスは、影響を受けていないようです。

私はこの記事を見つけました: http ://www.javalimit.com/2010/05/passing-funs-to-other-erlang-nodes.html これは、これらのエラーの理由が無名関数のバージョンが異なることを示唆しているようです2つのノード間で、したがって壊れました。ただし、テストでは、このエラーを再現できません。また、私はこのようなものを見ることなく、以前に何度もコードをリロードしました。ただし、ボックスごとに2つのインスタンスをリロードしたのはこれが初めてです(以前はボックスごとに1つのインスタンスでした)。誰かがこれが起こった理由、そしておそらくそれを防ぐ方法について何か洞察を持っていますか(すべてを殺して再起動することなく、それは私がしなければならなかったことです)。

4

1 に答える 1

3

ファンを識別するために、erlang vmはコードをハッシュし、それをファン識別子に組み込みます。他のノードに送信されるのはこの識別子であり、リモート側でその楽しみにアクセスしようとすると、そのハッシュで楽しみを見つけることができません。

これが実際に動作することを確認するには、匿名の楽しいコードを1つの仮想マシンにロードしてから、楽しいコードを編集して新しいコードを別の仮想マシンにロードします。次に、元の楽しみを2番目のVMに送信して、実行してみます。

于 2012-10-24T08:02:19.290 に答える