Steve,
yes I was trying that and with exception of bug in cpgx which causing
freeze of cpgx until all of CPGXs are killed and started again, it
seemed to work without any regression (cpgx -j -d 1).
I will push to patches to master and wait for results of Andrew's tests
and (hopefully) Jerome's tests.
Regards,
Honza
Steven Dake napsal(a):
Have you tried Dave's cpg test tool? Would be interesting to see if
this introduces any other regressions.
Reviewed-by: Steven Dake<sdake@xxxxxxxxxx>
On 06/13/2012 07:48 AM, Jan Friesse wrote:
Let's say we have 2 nodes:
- node 2 is paused
- node 1 create membership (one node)
- node 2 is unpaused
Result is that node 1 downlist is selected, so it means that from node 2
point of view, node 1 was never down.
Patch solves situation by adding additional check for largest previous
membership.
So current tests are:
1) largest (previous #nodes - #nodes know to have left)
2) (then) largest previous membership
3) (and last as a tie-breaker) node with smallest nodeid
Signed-off-by: Jan Friesse<jfriesse@xxxxxxxxxx>
---
exec/cpg.c | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/exec/cpg.c b/exec/cpg.c
index 8b883f8..47743a5 100644
--- a/exec/cpg.c
+++ b/exec/cpg.c
@@ -811,16 +811,17 @@ static struct downlist_msg* downlist_master_choose (void)
best_members = best->old_members - best->left_nodes;
cmp_members = cmp->old_members - cmp->left_nodes;
- if (cmp_members< best_members) {
- continue;
- }
- else if (cmp_members> best_members) {
- best = cmp;
- }
- else if (cmp->sender_nodeid< best->sender_nodeid) {
+ if (cmp_members> best_members) {
best = cmp;
+ } else if (cmp_members == best_members) {
+ if (cmp->old_members> best->old_members) {
+ best = cmp;
+ } else if (cmp->old_members == best->old_members) {
+ if (cmp->sender_nodeid< best->sender_nodeid) {
+ best = cmp;
+ }
+ }
}
-
}
assert (best != NULL);
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss