[DRBD-cvs] r1790 - in trunk: . drbd

www-data www-data at garcon.linbit.com
Mon May 9 23:36:46 CEST 2005


Author: phil
Date: 2005-05-09 23:36:44 +0200 (Mon, 09 May 2005)
New Revision: 1790

Modified:
   trunk/ROADMAP
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_receiver.c
Log:
Fixed a bit of the "split-brain-fix" behaviour.
 - An even more strict mode of operation would be possible.
 - Now every thing works when I "disconnect" the peer. 
   Need to test what happens when the peer is "down"ed.


Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP	2005-05-09 08:13:38 UTC (rev 1789)
+++ trunk/ROADMAP	2005-05-09 21:36:44 UTC (rev 1790)
@@ -41,7 +41,9 @@
    discard-less-modified
                   Auto sync from is the node that did more modifications
    discard-NODENAME 
-                  Auto sync to the named node 
+                  Auto sync to the named node
+   discard-current-secondary
+   		  Auto sync from current primary (What if there is no primary?)
   
   pri-sees-sec-with-newer-data =
    disconnect         (current behaviour)

Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2005-05-09 08:13:38 UTC (rev 1789)
+++ trunk/drbd/drbd_fs.c	2005-05-09 21:36:44 UTC (rev 1790)
@@ -711,8 +711,8 @@
 	case 4: /* peer is outdated */
 		nps = Outdated;
 		break;
-	case 5: /* peer was down, increase GENCNT ... */
-		drbd_uuid_new_current(mdev);
+	case 5: /* peer was down, we will(have) create(d) a new UUID anyways... */
+		/* If we would be more strict, we would return DUnknown here. */
 		nps = Outdated;
 		break;
 	case 6: /* Peer is primary, voluntarily outdate myself */
@@ -721,11 +721,13 @@
 		break;
 	default:
 		/* The script is broken ... */
-		drbd_uuid_new_current(mdev);
 		nps = DUnknown;
-		ERR("outdate-peer helper returned %d (%d)\n",(r>>8)&0xff,r);
+		drbd_request_state(mdev,NS(disk,Outdated));
+		ERR("outdate-peer helper broken, returned %d \n",(r>>8)&0xff);
+		return nps;
 	}
 
+	INFO("outdate-peer helper returned %d \n",(r>>8)&0xff);
 	return nps;
 }
 

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2005-05-09 08:13:38 UTC (rev 1789)
+++ trunk/drbd/drbd_main.c	2005-05-09 21:36:44 UTC (rev 1790)
@@ -648,6 +648,7 @@
 	}
 
 #if DUMP_MD >= 2
+	char *pbp,pb[300];
 	pbp = pb;
 	PSC(role);
 	PSC(peer);

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2005-05-09 08:13:38 UTC (rev 1789)
+++ trunk/drbd/drbd_receiver.c	2005-05-09 21:36:44 UTC (rev 1790)
@@ -1883,11 +1883,19 @@
 	}
 
 	if ( mdev->state.s.role == Primary ) {
+		if ( mdev->state.s.pdsk >= DUnknown &&
+		     mdev->uuid[Bitmap] == 0 ) {
+			/* We only create a new UUID if the peer might
+			   possibly be UpToDate. Since the connection is
+			   already gone it is DUnknown by now. 
+			   In case we already created a BitMap there is
+			   no need to create a new UUID.
+			*/
+			drbd_uuid_new_current(mdev);
+		}
 		if ( test_bit(SPLIT_BRAIN_FIX,&mdev->flags) ) {
 			drbd_disks_t nps = drbd_try_outdate_peer(mdev);
 			drbd_request_state(mdev,NS(pdsk,nps));
-		} else {
-			drbd_uuid_new_current(mdev);
 		}
 		drbd_md_write(mdev);
 	}



More information about the drbd-cvs mailing list