* [Drbd-dev] DRBD-8: Patch to fix incorrect split-brain occurrence.
@ 2006-12-19 15:45 Graham, Simon
2006-12-19 16:13 ` Lars Ellenberg
0 siblings, 1 reply; 2+ messages in thread
From: Graham, Simon @ 2006-12-19 15:45 UTC (permalink / raw)
To: drbd-dev
[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]
In testing, we have run into a case where we unexpectedly get a
split-brain situation - after some investigation I think I have found
the reason - at the end of syncing, the SyncTarget side finishes up by
setting it's UUID info to the same as the Source (in
drbd_resync_finished) - the code that does this checks for connection
state SyncTarget before doing this.
Now, I have seen that sometimes the resync completes when in PausedSyncT
state - for example, if the last set of blocks is already under way when
we decide to go into the PausedSyncT state - thus it's entirely possible
to enter drbd_resync_finished with connection state PausedSyncT in which
case we do finish up the resync but do not copy the UUID info - this
means that the next time we need to resync, the code determines that we
have a split-brain situation.
In other places in the code, checks are made for either SyncTarget or
PausedSyncT so I propose fixing this (patch attached) the same way -
have drbd_resync_finished check for either SyncTarget OR PausedSyncT.
Simon
[-- Attachment #2: drbd-resync.patch --]
[-- Type: application/octet-stream, Size: 755 bytes --]
Index: src/drbd/drbd_worker.c
===================================================================
--- src/drbd/drbd_worker.c (revision 7932)
+++ src/drbd/drbd_worker.c (working copy)
@@ -402,7 +402,8 @@
if (mdev->rs_failed) {
INFO(" %lu failed blocks\n",mdev->rs_failed);
- if (mdev->state.conn == SyncTarget) {
+ if (mdev->state.conn == SyncTarget ||
+ mdev->state.conn == PausedSyncT) {
dstate = Inconsistent;
pdstate = UpToDate;
} else {
@@ -412,7 +413,8 @@
} else {
dstate = pdstate = UpToDate;
- if ( mdev->state.conn == SyncTarget) {
+ if ( mdev->state.conn == SyncTarget ||
+ mdev->state.conn == PausedSyncT) {
if( mdev->p_uuid ) {
int i;
for ( i=Bitmap ; i<=History_end ; i++ ) {
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Drbd-dev] DRBD-8: Patch to fix incorrect split-brain occurrence.
2006-12-19 15:45 [Drbd-dev] DRBD-8: Patch to fix incorrect split-brain occurrence Graham, Simon
@ 2006-12-19 16:13 ` Lars Ellenberg
0 siblings, 0 replies; 2+ messages in thread
From: Lars Ellenberg @ 2006-12-19 16:13 UTC (permalink / raw)
To: drbd-dev
/ 2006-12-19 10:45:04 -0500
\ Graham, Simon:
> In testing, we have run into a case where we unexpectedly get a
> split-brain situation - after some investigation I think I have found
> the reason - at the end of syncing, the SyncTarget side finishes up by
> setting it's UUID info to the same as the Source (in
> drbd_resync_finished) - the code that does this checks for connection
> state SyncTarget before doing this.
>
> Now, I have seen that sometimes the resync completes when in PausedSyncT
> state - for example, if the last set of blocks is already under way when
> we decide to go into the PausedSyncT state
right, or "resync" "just happens" by application writes.
> - thus it's entirely possible
> to enter drbd_resync_finished with connection state PausedSyncT in which
> case we do finish up the resync but do not copy the UUID info - this
> means that the next time we need to resync, the code determines that we
> have a split-brain situation.
>
> In other places in the code, checks are made for either SyncTarget or
> PausedSyncT so I propose fixing this (patch attached) the same way -
> have drbd_resync_finished check for either SyncTarget OR PausedSyncT.
right.
--
: Lars Ellenberg Tel +43-1-8178292-55 :
: LINBIT Information Technologies GmbH Fax +43-1-8178292-82 :
: Vivenotgasse 48, A-1120 Vienna/Europe http://www.linbit.com :
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-12-19 16:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-19 15:45 [Drbd-dev] DRBD-8: Patch to fix incorrect split-brain occurrence Graham, Simon
2006-12-19 16:13 ` Lars Ellenberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox