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