<div dir="ltr"><font face="monospace, monospace">Hello honza, thanks for the response !</font><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">With state sync, I simply mean that &#39;k-1&#39; messages were delivered to N1, N2 and N3 and they have applied these messages to change their program state.</font></div><div><font face="monospace, monospace">N1.state = apply(m(k-1);</font></div><div><font face="monospace, monospace">N2.state = apply(m(k-1);</font></div><div><font face="monospace, monospace">N3.state = apply(m(k-1);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">The document you shared cleared many doubts. However I still need one clarification.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">According to the document:</font></div><div><font face="monospace, monospace">&quot;The configuration change messages warn the application that a membership change has occurred, so that the application program can take appropriate action based on the membership change. Extended virtual synchrony guarantees a consistent order of messages delivery across a partition, which is essential if the application program are to be able to reconcile their states following repair of a failed processor or reemerging of the partitioned network.&quot;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">I just want to know that this property is not something related to CPG_TYPE_SAFE, which is still not implemented.</font></div><div><font face="monospace, monospace">Please consider this scenario:</font></div><div><font face="monospace, monospace">0. N1, N2 and N3 has received the message m(k-1).</font></div><div><font face="monospace, monospace">1. N1 mcast(CPG_TYPE_AGREED) m(k) message.</font></div><div><span style="font-family:monospace,monospace">2. As it is not CPG_TYPE_SAFE, </span><span style="font-family:monospace,monospace">m(k) delievered to N1 but was not yet delivered to N2 and N3.</span></div><div><font face="monospace, monospace">3. Network partition separate N1 from N2 and N3. N2 and N3 can never see m(k).</font></div><div><font face="monospace, monospace">4. Configuration change message is now delivered to N1, N2 and N3.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Here, N1 will change its state to N1.state = apply(m(k), thinking all in the current configuration has received the message. </font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">According to your reply it looks like N1 will not receive m(k). So this is what each node will see:</font></div><div><font face="monospace, monospace">N1 will see: m(k-1) -&gt; C1 (config change)</font></div><div><font face="monospace, monospace">N2 will see: m(k-1) -&gt; C1 (config change)</font></div><div><font face="monospace, monospace">N3 will see: m(k-1) -&gt; C1 (config change)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Message m(k) will be discarded, and will not be delivered to N1 even if it was sent by N1 before the network partition.</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">This is the expected behavior with </font><span style="font-family:monospace,monospace">CPG_TYPE_AGREED?</span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace">Regards,</span></div><div><span style="font-family:monospace,monospace">Satish</span></div><div><span style="font-family:monospace,monospace"><br></span></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 6, 2016 at 4:15 PM, Jan Friesse <span dir="ltr">&lt;<a href="mailto:jfriesse@redhat.com" target="_blank">jfriesse@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi,<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
Hello,<br>
<br>
Virtual Synchrony Property - messages are delivered in agreed order and<br>
configuration changes are delivered in agreed order relative to message.<br>
<br>
What happen to this property when network is partitioned the cluster into<br>
two. Consider following scenario (which I took from one of the<br>
previous query by Andrei Elkin):<br>
<br>
* N1, N2 and N3 are in state sync with m(k-1) messages are delivered.<br>
</blockquote>
<br></span>
What exactly you mean by &quot;state sync&quot;?<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
* N1 sends m(k) and just now network partition N1 node from N2 and N3.<br>
<br>
Does CPG_TYPE_AGREED guarantee that virtual synchrony is held?<br>
</blockquote>
<br></span>
Yes it does (actually higher level of VS called EVS)<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
When property is held, configuration change message C1 is guaranteed to<br>
delivered before m(k) to N1.<br>
N1 will see: m(k-1) C1 m(k)<br>
N2 and N3 will see: m(k-1) C1<br>
<br>
But if this property is violated:<br>
N1 will see: m(k-1) m(k) C1<br>
N2 and N3 will see: m(k-1) C1<br>
<br>
Violation will screw any user application running on the cluster.<br>
<br>
Could someone please explain what is the behavior of Corosync in this<br>
scenario with CPG_TYPE_AGREED ordering.<br>
</blockquote>
<br></span>
For description how exactly totem synchronization works take a look to <a href="http://corosync.github.com/corosync/doc/DAAgarwal.thesis.ps.gz" rel="noreferrer" target="_blank">http://corosync.github.com/corosync/doc/DAAgarwal.thesis.ps.gz</a><br>
<br>
After totem is synchronized, there is another level of synchronization of services (not described in above doc). All services synchronize in very similar way, so you can take a look to CPG as example. Basically only state held by CPG is connected clients. So every node sends it&#39;s connected clients list to every other node. If sync is aborted (change of membership), it&#39;s restarted. These sync messages has priority over user messages (actually it&#39;s not possible to send messages during sync). User app can be sure that message was delivered only after it gets it&#39;s own message. Also app gets configuration change message so it knows, who got the message.<br>
<br>
Regards,<br>
  Honza<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Regards,<br>
Satish<br>
<br>
<br>
<br>
_______________________________________________<br>
Users mailing list: <a href="mailto:Users@clusterlabs.org" target="_blank">Users@clusterlabs.org</a><br>
<a href="http://clusterlabs.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://clusterlabs.org/mailman/listinfo/users</a><br>
<br>
Project Home: <a href="http://www.clusterlabs.org" rel="noreferrer" target="_blank">http://www.clusterlabs.org</a><br>
Getting started: <a href="http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf" rel="noreferrer" target="_blank">http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf</a><br>
Bugs: <a href="http://bugs.clusterlabs.org" rel="noreferrer" target="_blank">http://bugs.clusterlabs.org</a><br>
<br>
</blockquote>
<br>
<br>
_______________________________________________<br>
Users mailing list: <a href="mailto:Users@clusterlabs.org" target="_blank">Users@clusterlabs.org</a><br>
<a href="http://clusterlabs.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://clusterlabs.org/mailman/listinfo/users</a><br>
<br>
Project Home: <a href="http://www.clusterlabs.org" rel="noreferrer" target="_blank">http://www.clusterlabs.org</a><br>
Getting started: <a href="http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf" rel="noreferrer" target="_blank">http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf</a><br>
Bugs: <a href="http://bugs.clusterlabs.org" rel="noreferrer" target="_blank">http://bugs.clusterlabs.org</a><br>
</blockquote></div><br></div></div>