いつもお世話になります。
ハッシュ空間を追加しているクラスタに、あらたなノードをjoinしようとすると失敗してしまいました。
vn_command_receiver.rb の ev_spushv において
@storages[s[1]].load_stream_dump
としていることろで、新たなノードには追加したハッシュ空間のためのストレージが容易されていないために(@storages[s[1]]が nil)
で失敗しているようです。
あまりこの辺りの仕組みを理解できていないのですが、とりあえずは
--- vn_command_receiver.rb.original 2010-03-01 00:59:37.000000000
+0900
+++ vn_command_receiver.rb 2010-03-10 19:15:54.000000000 +0900
@@ -51,6 +51,7 @@
if vlen != 0
v = read_bytes(vlen, 100)
+ createhash(s[1]) unless @storages[s[1]]
if @storages[s[1]].load_stream_dump(vn, last, clk, expt,
k, v)
count += 1
# @log.debug("#{__method__}:[#{vn} #{last} #{clk}
#{expt} #{k}] was stored.")
@@ -59,6 +60,7 @@
# @log.warn("#{__method__}:[#{vn} #{last} #{clk} #{expt}
#{k}] was rejected.")
end
else
+ createhash(s[1]) unless @storages[s[1]]
if @storages[s[1]].load_stream_dump(vn, last, clk, expt,
k, nil)
# @log.debug("#{__method__}:[#{vn} #{last} #{clk}
#{expt} #{k}] was stored.")
count += 1
のようにして動きはしました。。。
よろしくお願いします。
ご連絡いただきありがとうございます。
ご指摘のとおりこの部分はバグになります。
以下の修正は正しいです。リポジトリに同様の修正を加えさせて頂きます。
問題の箇所は join や recover(障害後冗長度を回復処理)に利用されております。
ノード間データコピーの手順は、まず、データを受け取る側がデータを保持して
いる側に対してデータの送信要求を出し、送信要求を受け取ったノードが要求元
にデータを送信します。問題のコードは、要求元がデータを受けとる部分に当た
ります。データを送るときにハッシュ名と仮想ノード番号の組を引数にしており
ますが、新規ノードの場合はデフォルトのハッシュ名(roma) のみしか存在して
おらずそれ以外を受信した場合エラーとなってしまいます。
この様な背景ですから以下は適切なパッチであります。
いつもありがとうございます。m(_ _)m
鳥居 順次
問題箇所の説明をいただきありがとうございます。
また、修正をしていただけるということで、助かります。
> いつもありがとうございます。m(_ _)m
いえ、こちらこそお役に立てているのであれば光栄です。
以上、よろしくお願いします。
2010年3月11日14:58 jun <jun...@gmail.com>: