same patch for whitetank
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c     (revision 2144)
+++ exec/totemsrp.c     (working copy)
@@ -297,6 +297,8 @@
 struct totemsrp_instance {
        int iface_changes;
 
+       int failed_to_recv;
+
        /*
         * Flow control mcasts and remcasts on last and current orf_token
         */
@@ -3320,19 +3322,16 @@
                }
 
                if (instance->my_aru_count > 
instance->totem_config->fail_to_recv_const &&
-                       token->aru_addr != instance->my_id.addr[0].nodeid) {
+                       token->aru_addr == instance->my_id.addr[0].nodeid) {
                        
                        log_printf (instance->totemsrp_log_level_error,
                                "FAILED TO RECEIVE\n");
-// TODO if we fail to receive, it may be possible to end with a gather
-// state of proc == failed = 0 entries
-/* THIS IS A BIG TODO
-                       memb_set_merge (&token->aru_addr, 1,
+
+                       memb_set_merge (&instance->my_id, 1,
                                instance->my_failed_list,
                                &instance->my_failed_list_entries);
-*/
 
-                       ring_state_restore (instance);
+                       instance->failed_to_recv = 1;
 
                        memb_state_gather_enter (instance, 6);
                } else {
@@ -3590,10 +3589,7 @@
 
 #ifdef TEST_DROP_MCAST_PERCENTAGE
        if (random()%100 < TEST_DROP_MCAST_PERCENTAGE) {
-               printf ("dropping message %d\n", mcast_header.seq);
                return (0);
-       } else {
-               printf ("accepting message %d\n", mcast_header.seq);
        }
 #endif
 
@@ -3766,6 +3762,19 @@
 
                memb_consensus_set (instance, &memb_join->system_from);
        
+               if (memb_consensus_agreed && instance->failed_to_recv == 1) {
+                               instance->failed_to_recv = 0;
+                               srp_addr_copy (&instance->my_proc_list[0],
+                                       &instance->my_id);
+                               instance->my_proc_list_entries = 1;
+                               instance->my_failed_list_entries = 0;
+
+                               memb_state_commit_token_create (instance, 
my_commit_token);
+
+                               memb_state_commit_enter (instance, 
my_commit_token);
+                               return (0);
+               }
+
                if (memb_consensus_agreed (instance) &&
                        memb_lowest_in_config (instance)) {
 
_______________________________________________
Openais mailing list
Openais@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to