<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On 13 Jun 2012, at 09:05, Dan Berindei wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Sanne and I resumed the meeting later yesterday afternoon, but we<br>basically just rehashed the stuff that we've been discussing before<br>lunch. Logs here:<br><br>(07:10:10 PM) jbott: Meeting ended Tue Jun 12 16:09:55 2012 UTC.<br>Information about MeetBot at <a href="http://wiki.debian.org/MeetBot">http://wiki.debian.org/MeetBot</a> . (v<br>0.1.4)<br>(07:10:10 PM) jbott: Minutes:<br><a href="http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-15.26.html">http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-15.26.html</a><br>(07:10:10 PM) jbott: Minutes (text):<br>http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-15.26.txt<br>(07:10:10 PM) jbott: Log:<br>http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-15.26.log.html<br><br><br>The main conclusion was that the number of total virtual nodes/hash<br>segments will be fixed per cluster, not per node. Kind of like the old<br>AbstractWheelConsistentHash.HASH_SPACE, only configurable. A physical<br>node will have a variable number of vnodes/segments over its lifetime.<br><br>We also decided to add a pull component to our state transfer. The<br>current NBST design requires all the nodes to push state to a joiner<br>more or less at the same time, which results in lots of congestion at<br>the network layer and sometimes even in the joiner being excluded from<br>the cluster. We have decided that a node will not start pushing data<br>as soon as it receives the PREPARE_VIEW command from the coordinator,<br>but instead it will wait for a START_PUSH command from the receiver.<br>The receiver will only ask one previous owner at a time, thus<br>eliminating the congestion.<br><br><br>We've had a lot of back-and-forth discussions about whether the CH<br>should be "non-deterministic". We agreed in the end that (I think)<br>that it's fine if the creation of the CH is not based solely on the<br>current members list, and it depends on the previous CH as well. This<br>is quite important, I think it would be hard to find an algorithm<br>based only on member list that doesn't change ownership for a lot of<br>nodes in case of a leave (even if we use the previous members list as<br>well): see https://issues.jboss.org/browse/ISPN-1275.<br></div></blockquote><div><br></div><div>Would this still be encapsulated by the existing ConsistentHash interface? &nbsp;We should be careful about impl details leaking into the rest of the codebase.</div><br><blockquote type="cite"><div><br>I had an idea (that I'm pretty sure I didn't explained properly in the<br>chat) that we could avoid state transfer blocking everything while<br>receiving the transaction table from a previous owner by splitting the<br>state transfer in two:<br>* In the first phase, we'd pick the new backup owners for each<br>segment, and we'd transfer all the state to them (entries, transaction<br>table, etc.)<br>* In the second phase, we'd pick a new primary owner for each segment,<br>but the primary owner can only be one of the existing backup owners.<br>Since the data has already been transferred, we can now also remove<br>the extra owners.<br></div></blockquote><div><br></div><div>Who is "we"? &nbsp;The joiner? &nbsp;The coordinator? &nbsp;Everyone (deterministic, triggered on an event/message)?</div><br><blockquote type="cite"><div>During the first phase, a segment could have more than numOwners<br>owners, and commands would reach both the new owners and the old<br>owners. We will need to handle commit commands for transactions that<br>the new owner doesn't have yet in its transaction table, but we would<br>not need to block prepare commands (like the current NBST design<br>does). During the second phase, the new primary owner already has the<br>transaction table, so we don't need a blocking phase either.<br></div></blockquote><div><br></div><div>So the new primary owner would queue up these commit commands? Or just ignore them/respond with a +1?</div><br><blockquote type="cite"><div><br>I didn't explain this properly in the chat because I was certain it<br>would only make sense if the coordinator initiated state transfer one<br>node at a time, making it non-deterministic. But I think if we allow<br>the CH creation algorithm to use the previous CH, we can<br>deterministically decide if the backup owners are properly balanced<br>(if not, we need to start phase 1) and if the primary owners are<br>properly balanced (if not, we need to start phase 2).<br></div></blockquote><div><br></div><div>+1 to a deterministic CH.</div><br><blockquote type="cite"><div><br><br>There is something else that I've been thinking about since yesterday<br>that might improve performance and even simplify the state transfer at<br>the cost of determinism. When state transfer fails (usually because a<br>node has died, but not necessarily), the coordinator could ask each<br>node how far it got with the state transfer in progress (how many<br>segments they got, from which owners, etc). The coordinator would then<br>create a new "base CH" based on the actually transferred data instead<br>of the actual start CH or the "pending CH", or even the whole<br>chain/tree of CHs, none of which reflect how data is effectively<br>stored in the clustered at that moment. Because this base CH would<br>reflect the actual owners of each segment, there would be less data<br>moving around in the new state transfer and we wouldn't need to keep a<br>chain/tree of previous owner lists either.<br></div></blockquote><div><br></div><div>When you say at the cost of determinism, what are the consequences of this? &nbsp;Some nodes may get "wrong answers" from their CH instances? &nbsp;And if so, then what? &nbsp;When these nodes contact "wrong nodes" for a specific key, would this "wrong node" then proxy to the coordinator (who has the definitive CH)?</div><br><blockquote type="cite"><div><br><br>I'm going to take a stab at implementing a new CH with a fixed number<br>of vnodes, that can take an existing CH as input and change owners as<br>little as possible. Then I'm going to try and implement the balanced<br>backup owners/balanced primary owners check as well, just to see if<br>it's really possible. I'm not going to modify the design document just<br>yet, I need to see first if it does work and what you guys think about<br>it…<br></div></blockquote><div><br></div><div>+1. &nbsp;It will also give you an idea of the effort involved in implementing this, and how to break up the work into subtasks, how to test, etc.</div><div><br></div><div>Cheers</div><div>Manik</div><div><br></div><br><blockquote type="cite"><div><br><br>Cheers<br>Dan<br><br><br>On Tue, Jun 12, 2012 at 4:02 PM, Manik Surtani &lt;<a href="mailto:manik@jboss.org">manik@jboss.org</a>&gt; wrote:<br><blockquote type="cite">Meeting minutes from part 1. &nbsp;Had to break for lunch. &nbsp;:)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Meeting ended Tue Jun 12 13:00:43 2012 UTC. &nbsp;Information about MeetBot <a href="athttp://wiki.debian.org/MeetBot">athttp://wiki.debian.org/MeetBot</a> . (v 0.1.4)<br></blockquote><blockquote type="cite">14:01<br></blockquote><blockquote type="cite">Minutes: &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.html">http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.html</a><br></blockquote><blockquote type="cite">14:01<br></blockquote><blockquote type="cite">Minutes (text): <a href="http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.txt">http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.txt</a><br></blockquote><blockquote type="cite">14:01<br></blockquote><blockquote type="cite">Log: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.log.html">http://transcripts.jboss.org/meeting/irc.freenode.org/infinispan/2012/infinispan.2012-06-12-09.58.log.html</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">--<br></blockquote><blockquote type="cite">Manik Surtani<br></blockquote><blockquote type="cite"><a href="mailto:manik@jboss.org">manik@jboss.org</a><br></blockquote><blockquote type="cite"><a href="http://twitter.com/maniksurtani">twitter.com/maniksurtani</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Project Lead, Infinispan<br></blockquote><blockquote type="cite"><a href="http://www.infinispan.org">http://www.infinispan.org</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Platform Architect, JBoss Data Grid<br></blockquote><blockquote type="cite"><a href="http://www.redhat.com/promo/dg6beta">http://www.redhat.com/promo/dg6beta</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">infinispan-dev mailing list<br></blockquote><blockquote type="cite"><a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br></blockquote><blockquote type="cite"><a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br></blockquote><br>_______________________________________________<br>infinispan-dev mailing list<br><a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>https://lists.jboss.org/mailman/listinfo/infinispan-dev<br></div></blockquote></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; 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-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div>--</div><div>Manik Surtani</div><div><a href="mailto:manik@jboss.org">manik@jboss.org</a></div><div><a href="http://twitter.com/maniksurtani">twitter.com/maniksurtani</a></div><div><br></div><div>Project Lead, Infinispan</div><div><a href="http://www.infinispan.org">http://www.infinispan.org</a></div><div><br></div><div>Platform Architect, JBoss Data Grid</div><div><a href="http://www.redhat.com/promo/dg6beta">http://www.redhat.com/promo/dg6beta</a></div></div></div></div></span></span>
</div>
<br></body></html>