<div>Hi, <span style="line-height: 1.5;">Hitoshi:</span></div><div><span style="line-height: 1.5;">    I think you are right.  </span><span style="line-height: 1.5;">But maybe this bug is hard to trigger. Here is my analysis:<span id="_editor_bookmark_start_15" style="display: none; line-height: 0px;">‍</span></span></div><div><span style="line-height: 1.5;">    If </span><span style="line-height: 1.5;">md.nr_disks changes from 1 to 0, kick_recover() is not called immediately. In most</span><a class="clickable js-inline-clickable" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; cursor: pointer; color: rgb(53, 161, 212); font-family: Tahoma, Arial; font-size: 12px; line-height: 24px; background-color: rgb(242, 242, 242);"><span id="_editor_bookmark_start_5" style="display: none; line-height: 0px;">‍</span></a></div><div><span style="line-height: 1.5;">case, there are more than one io thread. If other io thread access the corrupted directory,</span></div><div><span style="line-height: 1.5;">it will get </span>SD_RES_EIO since md.nr_disks is 0 (See md_handle_eio() function<span id="_editor_bookmark_start_9" style="display: none; line-height: 0px;">‍</span>). Then, main<span id="_editor_bookmark_start_8" style="display: none; line-height: 0px;">‍</span><span id="_editor_bookmark_start_7" style="display: none; line-height: 0px;">‍</span><span id="_editor_bookmark_start_6" style="display: none; line-height: 0px;">‍</span></div><div>thread will call leave_cluster() (See io_op_done() function).<span id="_editor_bookmark_start_10" style="display: none; line-height: 0px;">‍</span></div><div>    I think maybe we can change the code like this:</div><div><br></div><div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if (disk) {</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>if (nr > 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>update_node_disks();</div><div><span class="Apple-tab-span" style="white-space:pre">                 </span>kick_recover();</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>leave_cluster();</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}<span id="_editor_bookmark_start_14" style="display: none; line-height: 0px;">‍</span></div></div><div><div><br><span id="_editor_bookmark_start_16" style="display: none; line-height: 0px;">‍</span></div><div>How do you think?</div><div><br></div><div>Thanks!</div><div>Bingpeng</div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "Bingpeng Zhu";<nkuzbp@foxmail.com>;</div><div><b>发送时间:</b> 2014年9月11日(星期四) 下午2:37</div><div><b>收件人:</b> "Hitoshi Mitake"<mitake.hitoshi@lab.ntt.co.jp>; <wbr></div><div></div><div><b>主题:</b> Re:  [sheepdog]    [PATCH v1] sheep/md: fix dogcluster info command show wrong disk number</div></div><div><br></div><div>I see. But it works OK in my experimental environment:</div><div><br></div><div><div>#dog cluster info</div><div>Cluster status: running, auto-recovery enabled</div><div>Cluster created at Thu Sep 11 14:07:48 2014</div><div><br></div><div>Epoch Time           Version</div><div>2014-09-11 14:26:51      5 [127.0.0.1:7000(3), 127.0.0.1:7001(3), 127.0.0.1:7002(3), 127.0.0.1:7003(3), 127.0.0.1:7004(3), 127.0.0.1:7005(3), 127.0.0.1:7007(3)]</div><div>2014-09-11 14:26:51      4 [127.0.0.1:7000(3), 127.0.0.1:7001(3), 127.0.0.1:7002(3), 127.0.0.1:7003(3), 127.0.0.1:7004(3), 127.0.0.1:7005(3), <font color="#ff0000">127.0.0.1:7006(0)</font>, 127.0.0.1:7007(3)]</div><div>2014-09-11 14:26:27      3 [127.0.0.1:7000(3), 127.0.0.1:7001(3), 127.0.0.1:7002(3), 127.0.0.1:7003(3), 127.0.0.1:7004(3), 127.0.0.1:7005(3), <font color="#ff0000">127.0.0.1:7006(1)</font>, 127.0.0.1:7007(3)]</div><div>2014-09-11 14:26:20      2 [127.0.0.1:7000(3), 127.0.0.1:7001(3), 127.0.0.1:7002(3), 127.0.0.1:7003(3), 127.0.0.1:7004(3), 127.0.0.1:7005(3),<font color="#ff0000"> 127.0.0.1:7006(2)</font>, 127.0.0.1:7007(3)]</div><div>2014-09-11 14:07:49      1 [127.0.0.1:7000(3), 127.0.0.1:7001(3), 127.0.0.1:7002(3), 127.0.0.1:7003(3), 127.0.0.1:7004(3), 127.0.0.1:7005(3), <font color="#ff0000">127.0.0.1:7006(3)</font>, 127.0.0.1:7007(3)]<span id="_editor_bookmark_start_0" style="display: none; line-height: 0px;">‍</span></div></div><div><div><br></div><div>Seems it will notify other nodes even md.nr_disks equals zero. I'll read the code carefully to figure it out.</div><div><br></div><div>Thanks.</div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "Hitoshi Mitake";<mitake.hitoshi@lab.ntt.co.jp>;</div><div><b>发送时间:</b> 2014年9月11日(星期四) 中午12:55</div><div><b>收件人:</b> "Bingpeng Zhu"<nkuzbp@foxmail.com>; <wbr></div><div><b>抄送:</b> "Hitoshi Mitake"<mitake.hitoshi@lab.ntt.co.jp>; "sheepdog"<sheepdog@lists.wpkg.org>; "Yu Fang"<bingpeng.zbp@alibaba-inc.com>; <wbr></div><div><b>主题:</b> Re: [sheepdog]    [PATCH v1] sheep/md: fix dogcluster info command show   wrong disk number</div></div><div><br></div>At Thu, 11 Sep 2014 10:53:42 +0800,<br>=?utf-8?B?QmluZ3BlbmcgWmh1?= wrote:<br>> <br>> [1  <multipart/alternative (8bit)>]<br>> [1.1  <text/plain; utf-8 (base64)>]<br>> If md.nr_disks changes from 1 to 0, the node is pure gateway then. Seems it doesn't need<br>> to do any recovery work since no object will locate in the pure gateway.‍<br><br>But other nodes must execute recovery because redundancy is decreased, no?<br><br>Thanks,<br>Hitoshi<br><br>> <br>> <br>> <br>> <br>> <br>> ------------------ Original ------------------<br>> From:  "Hitoshi Mitake";<mitake.hitoshi@lab.ntt.co.jp>;<br>> Date:  Thu, Sep 11, 2014 10:34 AM<br>> To:  "Bingpeng Zhu"<nkuzbp@foxmail.com>; <br>> Cc:  "sheepdog"<sheepdog@lists.wpkg.org>; "Bingpeng Zhu"<bingpeng.zbp@alibaba-inc.com>; <br>> Subject:  Re: [sheepdog] [PATCH v1] sheep/md: fix dog cluster info command show    wrong disk number<br>> <br>> <br>> <br>> At Wed, 10 Sep 2014 20:08:32 +0800,<br>> Bingpeng Zhu wrote:<br>> > <br>> > If we enable diskvnodes mode and encounter EIO, running dog<br>> > cluster info will show wrong disk number in the new epoch.<br>> > We should update node disks when handling EIO and unplug the<br>> > disk.<br>> > <br>> > Signed-off-by: Bingpeng Zhu <bingpeng.zbp@alibaba-inc.com><br>> > ---<br>> >  sheep/md.c |    3 +++<br>> >  1 files changed, 3 insertions(+), 0 deletions(-)<br>> > <br>> > diff --git a/sheep/md.c b/sheep/md.c<br>> > index b13d30a..378d1f1 100644<br>> > --- a/sheep/md.c<br>> > +++ b/sheep/md.c<br>> > @@ -541,6 +541,9 @@ static void md_do_recover(struct work *work)<br>> >  out:<br>> >   sd_rw_unlock(&md.lock);<br>> >  <br>> > +      if (disk)<br>> > +          update_node_disks();<br>> > +<br>> <br>> The change looks reasonable. But I have a question:<br>> <br>> >       if (nr > 0)<br>> >                  kick_recover();<br>> <br>> Does the above conditional branch (nr > 0) required? When a node has<br>> single disk and faces EIO, md.nr_disks can change from 1 to 0. In such<br>> a case, the code will not call kick_recover(). I think it is a<br>> problematic behavior. How do you think?<br>> <br>> Thanks,<br>> Hitoshi<br>> <br>> >  <br>> > -- <br>> > 1.7.1<br>> > <br>> > <br>> > <br>> > <br>> > -- <br>> > sheepdog mailing list<br>> > sheepdog@lists.wpkg.org<br>> > http://lists.wpkg.org/mailman/listinfo/sheepdog<br>> [1.2  <text/html; utf-8 (base64)>]<br>> <br>> [2  <text/plain; us-ascii (7bit)>]<br>> -- <br>> sheepdog mailing list<br>> sheepdog@lists.wpkg.org<br>> http://lists.wpkg.org/mailman/listinfo/sheepdog<br></div></div>