Просмотр исходного кода

Merge trunk revision 2792:
r2792 | sdake | 2010-04-29 22:12:26 -0700 (Thu, 29 Apr 2010) | 3 lines

Save the ring id and restore it properly when the recovery operation fails as
a result of a new gather or token loss.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/branches/flatiron@2862 fd59a12c-fef9-0310-b244-a6a79926bd2f

Steven Dake 15 лет назад
Родитель
Сommit
657b9168cf
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      exec/totemsrp.c

+ 7 - 1
exec/totemsrp.c

@@ -1390,6 +1390,8 @@ static void old_ring_state_save (struct totemsrp_instance *instance)
 {
 {
 	if (instance->old_ring_state_saved == 0) {
 	if (instance->old_ring_state_saved == 0) {
 		instance->old_ring_state_saved = 1;
 		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_aru = instance->my_aru;
 		instance->old_ring_state_high_seq_received = instance->my_high_seq_received;
 		instance->old_ring_state_high_seq_received = instance->my_high_seq_received;
 		log_printf (instance->totemsrp_log_level_debug,
 		log_printf (instance->totemsrp_log_level_debug,
@@ -1401,7 +1403,9 @@ static void old_ring_state_save (struct totemsrp_instance *instance)
 static void ring_state_restore (struct totemsrp_instance *instance)
 static void ring_state_restore (struct totemsrp_instance *instance)
 {
 {
 	if (instance->old_ring_state_saved) {
 	if (instance->old_ring_state_saved) {
-		totemip_zero_set(&instance->my_ring_id.rep);
+		memcpy (&instance->my_ring_id, &instance->my_old_ring_id,
+			sizeof (struct memb_ring_id));
+
 		instance->my_aru = instance->old_ring_state_aru;
 		instance->my_aru = instance->old_ring_state_aru;
 		instance->my_high_seq_received = instance->old_ring_state_high_seq_received;
 		instance->my_high_seq_received = instance->old_ring_state_high_seq_received;
 		log_printf (instance->totemsrp_log_level_debug,
 		log_printf (instance->totemsrp_log_level_debug,
@@ -1412,6 +1416,8 @@ static void ring_state_restore (struct totemsrp_instance *instance)
 
 
 static void old_ring_state_reset (struct totemsrp_instance *instance)
 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;
 	instance->old_ring_state_saved = 0;
 }
 }