<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jul 9, 2013, at 8:46 AM, MORITA Kazutaka <<a href="mailto:morita.kazutaka@gmail.com">morita.kazutaka@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">At Sun,  7 Jul 2013 21:20:51 -0700,</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">Kai Zhang wrote:</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><blockquote type="cite" style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br>Current implementation of reconnection doesn't handle pending block/notify<br>event.<br><br>It is easy to handle notify event by sending it again.<br><br>However, it is a little bit complex for block event.<br>This is because a block event need 4 steps.<br>1. in queue_cluster_request(), send block event by sys->cdrv->block(), and<br> add to pending_block_list.<br>2. in sd_block_handler(), queue the event to work queue of 'block' thread.<br>3. in cluster_op_done(), send unblock event by sys->cdrv->unblock().<br>4. in sd_notify_handler(), remove it from pending_block_list.<br><br>And step 1 and 3 contains broadcast operations.<br>So we have to know which step has been done for a pending block event.<br><br>If step 1 has been done, we can re-queue it simply. (Any block event which sent<br>by this node have been removed due to the leave event)<br>If step 2 has been done, the event is handling by another thread. We have to mark<br>it as 'drop' so that it will be dropped when cluster_op_done() is called later.<br>if step 3 has been done, we should call sd_notify_handler() manually to finish<br>it.<br><br>Signed-off-by: Kai Zhang <<a href="mailto:kyle@zelin.io">kyle@zelin.io</a>><br>---<br>sheep/group.c      |   69 ++++++++++++++++++++++++++++++++++++++++++++++++++--<br>sheep/sheep_priv.h |    8 ++++++<br>2 files changed, 75 insertions(+), 2 deletions(-)<br><br>diff --git a/sheep/group.c b/sheep/group.c<br>index 2fa4091..1a549de 100644<br>--- a/sheep/group.c<br>+++ b/sheep/group.c<br>@@ -251,6 +251,9 @@ static void cluster_op_done(struct work *work)<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>struct vdi_op_message *msg;<br><span class="Apple-tab-span" style="white-space: pre; ">    </span>size_t size;<br><br>+<span class="Apple-tab-span" style="white-space: pre; ">        </span>if (req->status == REQUEST_DROPPED)<br></blockquote><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">I think adding sd_dprintf here would help us to debug.</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br></blockquote><br></div><div>We already have a sd_dprintf when we mark it as REQUEST_DROPPED.</div><div>Do you think we should add one more here?</div><div><br></div><div>Thanks,</div><div>Kyle</div><br></body></html>