Reviewed-by: Jan Friesse <[email protected]> Steven Dake wrote: > The current code stores the current ring information every time a commit > token is generated. This causes the old ring id used for comparison purposes > to increase if a token is lost in commit or recovery, resulting in failure of > totem. This patch changes the behavior to only store the old ring id one > time when the commit token is received, and then further commit token ring > id saves are not done until OPERATIONAL is reached. > > Signed-off-by: Steven Dake <[email protected]> > --- > exec/totemsrp.c | 20 +++++++++++++------- > 1 files changed, 13 insertions(+), 7 deletions(-) > > diff --git a/exec/totemsrp.c b/exec/totemsrp.c > index 6ea5bc0..7314616 100644 > --- a/exec/totemsrp.c > +++ b/exec/totemsrp.c > @@ -475,6 +475,8 @@ struct totemsrp_instance { > > unsigned int set_aru; > > + int old_ring_state_saved; > + > int old_ring_state_aru; > > unsigned int old_ring_state_high_seq_received; > @@ -1411,13 +1413,16 @@ static void cancel_merge_detect_timeout (struct > totemsrp_instance *instance) > */ > static void old_ring_state_save (struct totemsrp_instance *instance) > { > - memcpy (&instance->my_old_ring_id, &instance->my_ring_id, > - sizeof (struct memb_ring_id)); > - instance->old_ring_state_aru = instance->my_aru; > - instance->old_ring_state_high_seq_received = > instance->my_high_seq_received; > - log_printf (instance->totemsrp_log_level_debug, > - "Saving state aru %x high seq received %x\n", > - instance->my_aru, instance->my_high_seq_received); > + if (instance->old_ring_state_saved == 0) { > + instance->old_ring_state_saved = 1; > + memcpy (&instance->my_old_ring_id, &instance->my_ring_id, > + sizeof (struct memb_ring_id)); > + instance->old_ring_state_aru = instance->my_aru; > + instance->old_ring_state_high_seq_received = > instance->my_high_seq_received; > + log_printf (instance->totemsrp_log_level_debug, > + "Saving state aru %x high seq received %x\n", > + instance->my_aru, instance->my_high_seq_received); > + } > } > > static void old_ring_state_restore (struct totemsrp_instance *instance) > @@ -1433,6 +1438,7 @@ static void old_ring_state_reset (struct > totemsrp_instance *instance) > { > log_printf (instance->totemsrp_log_level_debug, > "Resetting old ring state\n"); > + instance->old_ring_state_saved = 0; > } > > static void reset_pause_timeout (struct totemsrp_instance *instance)
_______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
