ハッシュ空間追加時のjoinで失敗

4 views
Skip to first unread message

きくもと

unread,
Mar 10, 2010, 5:39:59 AM3/10/10
to roma-user-japan
きくもとです。

いつもお世話になります。
ハッシュ空間を追加しているクラスタに、あらたなノードを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


のようにして動きはしました。。。
よろしくお願いします。

jun

unread,
Mar 11, 2010, 12:58:48 AM3/11/10
to roma-user-japan
鳥居です。

ご連絡いただきありがとうございます。
ご指摘のとおりこの部分はバグになります。

以下の修正は正しいです。リポジトリに同様の修正を加えさせて頂きます。

問題の箇所は join や recover(障害後冗長度を回復処理)に利用されております。
ノード間データコピーの手順は、まず、データを受け取る側がデータを保持して
いる側に対してデータの送信要求を出し、送信要求を受け取ったノードが要求元
にデータを送信します。問題のコードは、要求元がデータを受けとる部分に当た
ります。データを送るときにハッシュ名と仮想ノード番号の組を引数にしており
ますが、新規ノードの場合はデフォルトのハッシュ名(roma) のみしか存在して
おらずそれ以外を受信した場合エラーとなってしまいます。

この様な背景ですから以下は適切なパッチであります。

いつもありがとうございます。m(_ _)m

鳥居 順次

Takahiro Kikumoto

unread,
Mar 11, 2010, 2:31:39 AM3/11/10
to roma-us...@googlegroups.com
きくもとです。

問題箇所の説明をいただきありがとうございます。
また、修正をしていただけるということで、助かります。

> いつもありがとうございます。m(_ _)m

いえ、こちらこそお役に立てているのであれば光栄です。
以上、よろしくお願いします。


2010年3月11日14:58 jun <jun...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages