Totem spec is clear:

reject retransmitted tokens
if token.aru = aru in token on last rotation ... do some logic

Here is how the current code works:

last_aru = instance->my_last_aru;
instance->my_last_aru = token->aru;
reject retransmitted tokens
if token.aru = aru in token on last rotation ... do some logic

The issue is last_aru will be set to token->aru when a token retransmission occurs before a new token arrives.

This results in the "do some logic" part happening more often then it should on lossy networks.
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c     (revision 2916)
+++ exec/totemsrp.c     (working copy)
@@ -3425,9 +3425,6 @@
                 */
 
        case MEMB_STATE_RECOVERY:
-               last_aru = instance->my_last_aru;
-               instance->my_last_aru = token->aru;
-
                /*
                 * Discard tokens from another configuration
                 */
@@ -3468,6 +3465,8 @@
 
                        return (0); /* discard token */
                }
+               last_aru = instance->my_last_aru;
+               instance->my_last_aru = token->aru;
 
                transmits_allowed = fcc_calculate (instance, token);
                mcasted_retransmit = orf_token_rtr (instance, token, 
&transmits_allowed);
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to