From 3d74ea737b398159702c24be36fe8e06b94e6985 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Wed, 16 Feb 2022 10:24:13 +0100 Subject: [PATCH] marsadm: improve reported split-brain number accuracy --- userspace/marsadm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/userspace/marsadm b/userspace/marsadm index 6859ea32..71865a50 100755 --- a/userspace/marsadm +++ b/userspace/marsadm @@ -3691,7 +3691,9 @@ sub detect_splitbrain { foreach my $host1 (@hosts) { $alive_host_stamps{$host1} = get_alive_link("time", $host1, 1); foreach my $host2 (@hosts) { + # reduce O(k^2) by some factor next if $host1 ge $host2; + my $re_checked = 0; my ($point, $split, $size1, $size2); for (my $retry = 2; $retry > 0; $retry--) { ($point, $split, $size1, $size2) = get_common_ancestor($basedir, $host1, $host2); @@ -3699,6 +3701,7 @@ sub detect_splitbrain { # Workaround races. sleep(0); } + re_check: if ($split) { $ok = 0; if ($do_report) { @@ -3726,6 +3729,13 @@ sub detect_splitbrain { $involved_hosts{$host2} = $size2; } } + if (!$re_checked++) { + # Safeguard against unknown roles (primary vs secondary) + # Also try the same pair in reverse roles, the result _might_ be different + # due to some mathematical reasons ;) + ($point, $split, $size2, $size1) = get_common_ancestor($basedir, $host2, $host1); + goto re_check; + } } } }