[DRBD-cvs] r1776 - trunk
www-data
www-data at garcon.linbit.com
Mon Apr 4 14:05:09 CEST 2005
Author: phil
Date: 2005-04-04 14:05:08 +0200 (Mon, 04 Apr 2005)
New Revision: 1776
Modified:
trunk/ROADMAP
Log:
More work on intellectual work on item 16 (= new UUID concept).
Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP 2005-04-04 11:04:36 UTC (rev 1775)
+++ trunk/ROADMAP 2005-04-04 12:05:08 UTC (rev 1776)
@@ -43,12 +43,12 @@
discard-NODENAME
Auto sync to the named node
- pri-sees-sec-with-higher-gc =
+ pri-sees-sec-with-newer-data =
disconnect (current behaviour)
discard-secondary Auto sync from is the current primary
suspend_io The current primary freezes IO.
- pri-sees-sec-with-higher-gc-cmd "command";
+ pri-sees-sec-with-newer-data-cmd "command";
In the same event this command will be executed.
@@ -64,6 +64,7 @@
use the GC to tag the bitmap it is better the current way ]
4) The execution of the pri-sees-sec-with-higher-gc-cmd should
be implemented like the kernel can execute modprobe...
+ 5) To implement this we have the "primary" bit in the data-gen-UUIDs.
0% DONE
6 It is possible that a secondary node crashes a primary by
@@ -392,75 +393,81 @@
* Lots of other shortcommings.
We associate each data generation with an unique UUID (=64 bit random
- number). A new data generation is created if a node becomes primary
- and the new auth-enum (see below) is different from the current
- auth enum.
+ number). A new data generation is created if a primary node is
+ disconnected from its secondary and when a degraded secondary
+ becomes primary for the first time.
In the meta-data we store a few generations-UUIDs:
* current
* bitmap
* history[2]
- In addition there is an enum describing the authorisation of the
- current gen-UUID: Human, Timout, Connected, Degraded
As well as the currently known flags:
Consistent, WasUpToDate, LastState, ConnectedInd, WantFullSync
The difference here is that the former flags are determined
when the current-UUID is created, while the latter are modified
as the state changes. When drbdmeta initializes the meta-data
- block it sets the current-UUID to JustCreated (a constant 64 bit number).
+ block it sets the current-UUID to JustCreated (a 64 bit constant ).
- When the cluster is in Connected state, then the bitmpat gen-uuid
+ When the cluster is in Connected state, then the bitmpat gen-UUID
is set to 0 (Since the Bitmap is empty). When we create a new current
gen-UUID while we are disconencted the (old) current gets backuped
to the bitmap gen-UUID. (This allowes us to identify the base of
of the bitmap later)
+ Special UUID values:
+ JustCreated [JC] ___ 4
+
ALGORITHMS
Upon Connect:
self peer action
- 1. JustC JustC No Sync
- 2. JustC !JustC I am SyncTarget setting BM
- 3. !JustC JustC I am SyncSource setting BM
+ 1. C=JC C=JC No Sync
+ 2. C=JC C!=JC I am SyncTarget setting BM
+ 3. C!=JC C=JC I am SyncSource setting BM
4. C = C No Sync
5. C = B I am SyncTarget using BM
6. C = H1|H2 I am SyncTarget setting BM
7. B = C I am SyncSource using BM
8. H1|H2 = C I am SyncSource setting BM
- 9. B = B [ B != 0 ] SplitBrain, try auto recover strategies
+ 9. B = B [ and B != 0 ] SplitBrain, try auto recover strategies.
10 H1|H2 = H1|H2 SplitBrain, disconnect.
11. Warn about unrelated Data, disconnect.
Upon Disconnect:
Primary:
- Copy the current-UUID over to the bitmap-UUID, create a new
+ Copy the current-UUID over to the bitmap-UUID, create a new
current-UUID.
Secondary:
Nothing to do.
Upon becomming Primary:
- If new auth-enum would be different from current auth-enum, create
- a new one.
+ In case we are disconnected and the bitmap-UUID is emptry, copy the
+ current-UUID over to the bitmap-UUID and create a new current-UUID.
+ Special-case: primary with --do-what-I-say, clearing the inconsistent
+ flag causes a new UUID to be generated.
Upon start of resync:
- Clear Consistent on the SyncTarget. The SyncTarget sets its
+ Clear the consistent-flag on the SyncTarget. The SyncTarget sets its
bitmap-UUID to the peer's current-UUID.
Upon finish of resync:
Set the bitmap-UUID to 0. The SyncTarget addopts the current-UUID
- of the SyncSource. Set Consistent.
-
- * Note for the auto recover strategies after split brain (see
- item 5) it is probabely a good idea to embedd the node's role
- (i.e. Primary or Secondary) into the UUIDs.
+ of the SyncSource, and sets its consistent-flag.
- Open Issues:
- - When gets something moved to the History
- - When to create a new UUID
- - When (not) to overwrite the bitmap-UUID
+ When the bitmap-UUID gets cleared, move the previous value to H1.
+ In case H1 was already set copy its previous value to H2. Etc..
+ For the auto recover strategies after split brain (see item 5)
+ it is neccessary to embedd the node's role into the UUIDs.
+ This is masked out of course when the UUIDs are compared.
+
+ * Note1: Discontinue the --human and --timout options when
+ becoming primary.
+ NB: If they are needed, I think they can be implemented
+ as special UUID values.
+
17 Something like
drbdx: WARNING disk sizes more than 10% different
More information about the drbd-cvs
mailing list