[SCM] Samba Shared Repository - branch master updated

Amitay Isaacs amitay at samba.org
Wed Feb 12 20:06:04 MST 2014


The branch, master has been updated
       via  a9ccdec ctdb-tests: Handle interactions with monitor events
       via  f1a20d7 ctdb-recoverd: Fix a bug in the LCP2 rebalancing code
       via  50fc53d ctdb-tests: New test to ensure "ctdb reloadips" manipulates IPs correctly
       via  a226015 ctdb-tests-eventscripts: Testing support for promote_secondaries
       via  176ae6c ctdb-eventscripts: Deleting IPs should use the promote_secondaries option
      from  6a7c420 waf:lib/replace fix iconv checks on HP/UX

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit a9ccdec008ebcb1b286eede4f43167e3e4d4cbe0
Author: Martin Schwenke <martin at meltin.net>
Date:   Wed Feb 12 15:33:19 2014 +1100

    ctdb-tests: Handle interactions with monitor events
    
    In the first case, reconfiguration can longer happen in a monitor
    event, so this is no longer a problem.  Drop it.
    
    Running a monitor event by hand no longer cancels the existing monitor
    event.  Instead the hand-run event fails.  So do this differently and
    just wait for a monitor event before continuing.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    
    Autobuild-User(master): Amitay Isaacs <amitay at samba.org>
    Autobuild-Date(master): Thu Feb 13 04:05:57 CET 2014 on sn-devel-104

commit f1a20d748f6ab4702be5b17047a3fbfa0f3e8d0c
Author: Martin Schwenke <martin at meltin.net>
Date:   Fri Feb 7 17:19:20 2014 +1100

    ctdb-recoverd: Fix a bug in the LCP2 rebalancing code
    
    srcimbl gets changed on every iteration of the loop.  The value that
    should be stored for the new imbalance of the source node is
    minsrcimbl.
    
    To help diagnose this, added some extra debug that can be left in.
    
    The extra debug changes the output of a couple of tests.  Note that
    the resulting IP allocations in those tests is unchanged - only the
    debug output is changed.
    
    Also add some new tests that illustrates the bug.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 50fc53d7f11a3c28fd4ef5318d90f842bbc0f19c
Author: Martin Schwenke <martin at meltin.net>
Date:   Wed Feb 12 09:49:11 2014 +1100

    ctdb-tests: New test to ensure "ctdb reloadips" manipulates IPs correctly
    
    This adds a lot of IPs (currently 100) in a new network and deletes
    them in a few steps.  First the primary is deleted and then a check is
    done to ensure that the remaining IPs are all correct.  Then about 1/2
    of the IPs and deleted and remaining IPs are checked.  Then the
    remaining IPs are deleted and a check is done to ensure they are all
    gone.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit a226015990356ee989c5b9a472581bb3187de894
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Jan 28 16:08:50 2014 +1100

    ctdb-tests-eventscripts: Testing support for promote_secondaries
    
    Just enable this behaviour by default in the ip command stub, since
    10.interface assumes/sets it.  The rc.local replacement for set_proc()
    doesn't do anything...
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 176ae6c704528c021fcc34a41878584f43a00119
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Jan 28 14:41:25 2014 +1100

    ctdb-eventscripts: Deleting IPs should use the promote_secondaries option
    
    If a primary IP address is being deleted from an interface, the
    secondaries are remembered and added back after the primary is
    deleted.  This is done under a lock shared by the add/del script code.
    It is necessary because, by default, Linux deletes secondaries when
    the corresponding primary is deleted.
    
    There is a race here between ctdbd and the scripts, since ctdbd
    doesn't know about the lock.  If ctdbd receives a release IP control
    and the IP address is not on an interface then it is regarded as a
    "Redundant release of IP" so no "releaseip" event is generated.  This
    can occur if the IP address in question is a secondary that has been
    temporarily dropped.  It is more likely if the number of secondaries
    is large.
    
    Since Linux 2.6.12 (i.e. 2005) Linux has supported a
    promote_secondaries option on interfaces.  This option is currently
    undocumented but that will change in Linux 3.14.  With
    promote_secondaries enabled the kernel will not drop secondaries but
    will promote a corresponding secondary instead.  The kernel does all
    necessary locking.
    
    Use promote_secondaries to simplify the code, avoid re-adding
    secondaries, avoid re-adding routes and provide improved performance.
    
    This could be done conditionally, with a fallback to legacy
    secondary-re-adding code, but no supported Linux distribution is
    running a pre-2.6.12 kernel so this is unnecessary.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

-----------------------------------------------------------------------

Summary of changes:
 ctdb/config/events.d/10.interface           |    4 +
 ctdb/config/functions                       |   87 +-----
 ctdb/server/ctdb_takeover.c                 |    5 +-
 ctdb/tests/complex/18_ctdb_reloadips.sh     |  234 ++++++++++++++
 ctdb/tests/eventscripts/etc-ctdb/rc.local   |    3 +
 ctdb/tests/eventscripts/stubs/ip            |   11 +-
 ctdb/tests/simple/60_recoverd_missing_ip.sh |   10 +-
 ctdb/tests/takeover/lcp2.005.sh             |   63 +++-
 ctdb/tests/takeover/lcp2.023.sh             |   34 ++-
 ctdb/tests/takeover/lcp2.031.sh             |  143 +++++++++
 ctdb/tests/takeover/lcp2.032.sh             |  450 +++++++++++++++++++++++++++
 11 files changed, 942 insertions(+), 102 deletions(-)
 create mode 100755 ctdb/tests/complex/18_ctdb_reloadips.sh
 create mode 100755 ctdb/tests/takeover/lcp2.031.sh
 create mode 100755 ctdb/tests/takeover/lcp2.032.sh


Changeset truncated at 500 lines:

diff --git a/ctdb/config/events.d/10.interface b/ctdb/config/events.d/10.interface
index f44c674..32d841f 100755
--- a/ctdb/config/events.d/10.interface
+++ b/ctdb/config/events.d/10.interface
@@ -151,6 +151,10 @@ case "$1" in
 	get_proc sys/net/ipv4/conf/all/arp_filter >/dev/null 2>&1 && {
 	    set_proc sys/net/ipv4/conf/all/arp_filter 1
 	}
+
+	_promote="sys/net/ipv4/conf/all/promote_secondaries"
+	get_proc "$_promote" >/dev/null 2>&1 || \
+	    die "Public IPs only supported if promote_secondaries is available"
 	;;
 
      #############################
diff --git a/ctdb/config/functions b/ctdb/config/functions
index 1aad3ae..4363d3d 100755
--- a/ctdb/config/functions
+++ b/ctdb/config/functions
@@ -820,34 +820,20 @@ nfs_statd_update ()
     fi
 }
 
-add_ip_to_iface()
+########################################################
+
+add_ip_to_iface ()
 {
     _iface=$1
     _ip=$2
     _maskbits=$3
 
-    _lockfile="${CTDB_VARDIR}/state/interface_modify_${_iface}.flock"
-    mkdir -p "${_lockfile%/*}" # dirname
-    [ -f "$_lockfile" ] || touch "$_lockfile"
-
-    (
-	# Note: use of return/exit/die() below only gets us out of the
-	# sub-shell, which is actually what we want.  That is, the
-	# function should just return non-zero.
-
-	flock --timeout 30 0 || \
-	    die "add_ip_to_iface: unable to get lock for ${_iface}"
-
-	# Ensure interface is up
-	ip link set "$_iface" up || \
-	    die "Failed to bringup interface $_iface"
+    # Ensure interface is up
+    ip link set "$_iface" up || \
+	die "Failed to bringup interface $_iface"
 
-	ip addr add "$_ip/$_maskbits" brd + dev "$_iface" || \
-	    die "Failed to add $_ip/$_maskbits on dev $_iface"
-    ) <"$_lockfile"
-
-    # Do nothing here - return above only gets us out of the subshell
-    # and doing anything here will affect the return code.
+    ip addr add "$_ip/$_maskbits" brd + dev "$_iface" || \
+	die "Failed to add $_ip/$_maskbits on dev $_iface"
 }
 
 delete_ip_from_iface()
@@ -856,56 +842,15 @@ delete_ip_from_iface()
     _ip=$2
     _maskbits=$3
 
-    _lockfile="${CTDB_VARDIR}/state/interface_modify_${_iface}.flock"
-    mkdir -p "${_lockfile%/*}" # dirname
-    [ -f "$_lockfile" ] || touch "$_lockfile"
-
-    (
-	# Note: use of return/exit/die() below only gets us out of the
-	# sub-shell, which is actually what we want.  That is, the
-	# function should just return non-zero.
-
-	flock --timeout 30 0 || \
-	    die "delete_ip_from_iface: unable to get lock for ${_iface}"
-
-	_im="$_ip/$_maskbits"  # shorthand for readability
-
-	# "ip addr del" will delete all secondary IPs if this is the
-	# primary.  To work around this _very_ annoying behaviour we
-	# have to keep a record of the secondaries and re-add them
-	# afterwards.  Yuck!
-
-	_secondaries=""
-	if ip addr list dev "$_iface" primary | grep -Fq "inet $_im " ; then
-	    _secondaries=$(ip addr list dev "$_iface" secondary | \
-		awk '$1 == "inet" { print $2 }')
-	fi
-
-	local _rc=0
-	ip addr del "$_im" dev "$_iface" || {
-	    echo "Failed to del $_ip on dev $_iface"
-	    _rc=1
-	}
-
-	if [ -n "$_secondaries" ] ; then
-	    for _i in $_secondaries; do
-		if ip addr list dev "$_iface" | grep -Fq "inet $_i" ; then
-		    echo "Kept secondary $_i on dev $_iface"
-		else
-		    echo "Re-adding secondary address $_i to dev $_iface"
-		    ip addr add $_i brd + dev $_iface || {
-			echo "Failed to re-add address $_i to dev $_iface"
-			_rc=1
-		    }
-		fi
-	    done
-	fi
-
-	return $_rc
-    ) <"$_lockfile"
+    # This could be set globally for all interfaces but it is probably
+    # better to avoid surprises, so limit it the interfaces where CTDB
+    # has public IP addresses.  There isn't anywhere else convenient
+    # to do this so just set it each time.  This is much cheaper than
+    # remembering and re-adding secondaries.
+    set_proc "sys/net/ipv4/conf/${_iface}/promote_secondaries" 1
 
-    # Do nothing here - return above only gets us out of the subshell
-    # and doing anything here will affect the return code.
+    ip addr del "$_ip/$_maskbits" dev "$_iface" || \
+	die "Failed to del $_ip on dev $_iface"
 }
 
 # If the given IP is hosted then print 2 items: maskbits and iface 
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c
index c21736e..d3a6e25 100644
--- a/ctdb/server/ctdb_takeover.c
+++ b/ctdb/server/ctdb_takeover.c
@@ -1958,7 +1958,7 @@ static bool lcp2_failback_candidate(struct ctdb_context *ctdb,
 				  mindstnode, mindstimbl - lcp2_imbalances[mindstnode]));
 
 
-		lcp2_imbalances[srcnode] = srcimbl;
+		lcp2_imbalances[srcnode] = minsrcimbl;
 		lcp2_imbalances[mindstnode] = mindstimbl;
 		minip->pnn = mindstnode;
 
@@ -2024,10 +2024,13 @@ try_again:
 	 * iterate through candidates.  Usually the 1st one will be
 	 * used, so this doesn't cost much...
 	 */
+	DEBUG(DEBUG_DEBUG,("+++++++++++++++++++++++++++++++++++++++++\n"));
+	DEBUG(DEBUG_DEBUG,("Selecting most imbalanced node from:\n"));
 	lips = talloc_array(ctdb, struct lcp2_imbalance_pnn, numnodes);
 	for (i=0; i<numnodes; i++) {
 		lips[i].imbalance = lcp2_imbalances[i];
 		lips[i].pnn = i;
+		DEBUG(DEBUG_DEBUG,(" %d [%d]\n", i, lcp2_imbalances[i]));
 	}
 	qsort(lips, numnodes, sizeof(struct lcp2_imbalance_pnn),
 	      lcp2_cmp_imbalance_pnn);
diff --git a/ctdb/tests/complex/18_ctdb_reloadips.sh b/ctdb/tests/complex/18_ctdb_reloadips.sh
new file mode 100755
index 0000000..042683c
--- /dev/null
+++ b/ctdb/tests/complex/18_ctdb_reloadips.sh
@@ -0,0 +1,234 @@
+#!/bin/bash
+
+test_info()
+{
+    cat <<EOF
+Verify that adding/deleting IPs using 'ctdb reloadips' works
+
+Checks that when IPs are added to and deleted from a single node then
+those IPs are actually assigned and unassigned from the specified
+interface.
+
+Prerequisites:
+
+* An active CTDB cluster with public IP addresses configured
+
+Expected results:
+
+* When IPs are added to a single node then they are assigned to an
+  interface.
+
+* When IPs are deleted from a single node then they disappear from an
+  interface.
+EOF
+}
+
+. "${TEST_SCRIPTS_DIR}/integration.bash"
+
+set -e
+
+ctdb_test_init "$@"
+
+ctdb_test_check_real_cluster
+
+cluster_is_healthy
+
+# Reset configuration
+ctdb_restart_when_done
+
+select_test_node_and_ips
+
+####################
+
+# Search for an unused 10.B.1.0/24 network on which to add public IP
+# addresses.
+
+# The initial search is for a 10.B.0.0/16 network since some
+# configurations may use a whole class B for the private network.
+# Check that there are no public IP addresses (as reported by "ctdb ip
+# -n -all") or other IP addresses (as reported by "ip addr show") with
+# the provided prefix.  Note that this is an IPv4-specific test.
+
+echo "Getting public IP information from CTDB..."
+try_command_on_node any "$CTDB ip -Y -v -n all"
+ctdb_ip_info=$(echo "$out" | awk -F: 'NR > 1 { print $2, $3, $5 }')
+
+echo "Getting IP information from interfaces..."
+try_command_on_node all "ip addr show"
+ip_addr_info=$(echo "$out" | \
+    awk '$1 == "inet" { print gensub(/\/.*/, "", "", $2)}')
+
+prefix=""
+for b in $(seq 0 255) ; do
+    prefix="10.${b}"
+
+    # Does the prefix match any IP address returned by "ip addr info"?
+    while read ip ; do
+	if [ "${ip#${prefix}.}" != "$ip" ] ; then
+	    prefix=""
+	    continue 2
+	fi
+    done <<<"$ip_addr_info"
+
+    # Does the prefix match any public IP address "ctdb ip -n all"?
+    while read ip pnn iface ; do
+	if [ "${ip#${prefix}.}" != "$ip" ] ; then
+	    prefix=""
+	    continue 2
+	fi
+    done <<<"$ctdb_ip_info"
+
+    # Got through the IPs without matching prefix - done!
+    break
+done
+
+[ -n "$prefix" ] || die "Unable to find a usable IP address prefix"
+
+# We really want a class C: 10.B.1.0/24
+prefix="${prefix}.1"
+
+####################
+
+iface=$(echo "$ctdb_ip_info" | awk -v pnn=$test_node '$2 == pnn { print $3 ; exit }')
+
+####################
+
+new_takeover_timeout=90
+echo "Setting TakeoverTimeout=${new_takeover_timeout} to avoid potential bans"
+try_command_on_node $test_node "$CTDB setvar TakeoverTimeout ${new_takeover_timeout}"
+
+####################
+
+addresses=$(get_ctdbd_command_line_option $test_node "public-addresses")
+echo "Public addresses file on node $test_node is \"$addresses\""
+backup="${addresses}.$$"
+
+backup_public_addresses ()
+{
+    try_command_on_node $test_node "cp -a $addresses $backup"
+}
+
+restore_public_addresses ()
+{
+    try_command_on_node $test_node "mv $backup $addresses >/dev/null 2>&1 || true"
+}
+ctdb_test_exit_hook_add restore_public_addresses
+
+# Now create that backup
+backup_public_addresses
+
+####################
+
+add_ips_to_original_config ()
+{
+    local test_node="$1"
+    local addresses="$2"
+    local iface="$3"
+    local prefix="$4"
+    local first="$5"
+    local last="$6"
+
+    echo "Adding new public IPs to original config on node ${test_node}..."
+    echo "IPs will be ${prefix}.${first}/24..${prefix}.${last}/24"
+
+    # Implement this by completely rebuilding the public_addresses
+    # file.  This is easier than deleting entries on a remote node.
+    restore_public_addresses
+    backup_public_addresses
+
+    # Note that tee is a safe way of creating a file on a remote node.
+    # This avoids potential fragility with quoting or redirection.
+    for i in $(seq $first $last) ; do
+	echo "${prefix}.${i}/24 ${iface}"
+    done |
+    try_command_on_node -i $test_node "tee -a $addresses"
+}
+
+check_ips ()
+{
+    local test_node="$1"
+    local iface="$2"
+    local prefix="$3"
+    local first="$4"
+    local last="$5"
+
+    # If just 0 specified then this is an empty range
+    local public_ips_file=$(mktemp)
+    if [ "$first" = 0 -a -z "$last" ] ; then
+	echo "Checking that there are no IPs in ${prefix}.0/24"
+    else
+	local prefix_regexp="inet *${prefix//./\.}"
+
+	echo "Checking IPs in range ${prefix}.${first}/24..${prefix}.${last}/24"
+
+	local i
+	for i in $(seq $first $last) ; do
+	    echo "${prefix}.${i}"
+	done | sort >"$public_ips_file"
+    fi
+
+    try_command_on_node $test_node "ip addr show dev ${iface}"
+    local ip_addrs_file=$(mktemp)
+    echo "$out" | \
+	sed -n -e "s at .*inet * \(${prefix//./\.}\.[0-9]*\)/.*@\1 at p" | \
+	sort >"$ip_addrs_file"
+
+    local diffs=$(diff "$public_ips_file" "$ip_addrs_file") || true
+    rm -f "$ip_addrs_file" "$public_ips_file"
+
+    if [ -z "$diffs" ] ; then
+	echo "GOOD: IP addresses are as expected"
+    else
+	echo "BAD: IP addresses are incorrect:"
+	echo "$diffs"
+	exit 1
+    fi
+}
+
+####################
+
+new_ip_max=100
+
+####################
+
+add_ips_to_original_config \
+    $test_node "$addresses" "$iface" "$prefix" 1 $new_ip_max
+
+try_command_on_node $test_node "$CTDB reloadips"
+
+check_ips $test_node "$iface" "$prefix" 1 $new_ip_max
+
+####################
+
+# This should be the primary.  Ensure that no other IPs are lost
+echo "Using 'ctdb reloadips' to remove the 1st address just added..."
+
+add_ips_to_original_config \
+    $test_node "$addresses" "$iface" "$prefix" 2 $new_ip_max
+
+try_command_on_node $test_node "$CTDB reloadips"
+
+check_ips $test_node "$iface" "$prefix" 2 $new_ip_max
+
+####################
+
+# Get rid of about 1/2 the IPs
+start=$(($new_ip_max / 2 + 1))
+echo "Updating to include only about 1/2 of the new IPs..."
+
+add_ips_to_original_config \
+    $test_node "$addresses" "$iface" "$prefix" $start $new_ip_max
+
+try_command_on_node $test_node "$CTDB reloadips"
+
+check_ips $test_node "$iface" "$prefix" $start $new_ip_max
+
+####################
+
+# Delete the rest
+echo "Restoring original IP configuration..."
+restore_public_addresses
+
+try_command_on_node $test_node "$CTDB reloadips"
+
+check_ips $test_node "$iface" "$prefix" 0
diff --git a/ctdb/tests/eventscripts/etc-ctdb/rc.local b/ctdb/tests/eventscripts/etc-ctdb/rc.local
index 6052d87..0dc531f 100755
--- a/ctdb/tests/eventscripts/etc-ctdb/rc.local
+++ b/ctdb/tests/eventscripts/etc-ctdb/rc.local
@@ -33,6 +33,9 @@ get_proc ()
 	sys/net/ipv4/conf/all/arp_filter)
 	    echo 1
 	    ;;
+	sys/net/ipv4/conf/all/promote_secondaries)
+	    echo 1
+	    ;;
 	fs/nfsd/threads)
 	    echo "$FAKE_NFSD_THREAD_PIDS" | wc -w
 	    ;;
diff --git a/ctdb/tests/eventscripts/stubs/ip b/ctdb/tests/eventscripts/stubs/ip
index f076cb9..860f6a5 100755
--- a/ctdb/tests/eventscripts/stubs/ip
+++ b/ctdb/tests/eventscripts/stubs/ip
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+promote_secondaries=true
+
 not_implemented ()
 {
     echo "ip stub command: \"$1\" not implemented"
@@ -305,8 +307,13 @@ ip_addr_del ()
 	echo "RTNETLINK answers: Cannot assign requested address" >&2
 	exit 254
     elif grep -Fq "$local" "$pf" ; then
-	# Remove primaries AND SECONDARIES.
-	rm -f "$pf" "$sf"
+	if $promote_secondaries && [ -s "$sf" ] ; then
+	    head -n 1 "$sf" >"$pf"
+	    sed -i -e '1d' "$sf"
+	else
+	    # Remove primaries AND SECONDARIES.
+	    rm -f "$pf" "$sf"
+	fi
     elif [ -f "$sf" ] && grep -Fq "$local" "$sf" ; then 
 	grep -Fv "$local" "$sf" >"${sf}.new"
 	mv "${sf}.new" "$sf"
diff --git a/ctdb/tests/simple/60_recoverd_missing_ip.sh b/ctdb/tests/simple/60_recoverd_missing_ip.sh
index 0734aee..88e4502 100755
--- a/ctdb/tests/simple/60_recoverd_missing_ip.sh
+++ b/ctdb/tests/simple/60_recoverd_missing_ip.sh
@@ -37,10 +37,6 @@ fi
 
 echo "$test_ip/$mask is on $iface"
 
-# Push out the next monitor event so it is less likely to be cancelled
-# and result in services not being restarted properly.
-try_command_on_node $test_node $CTDB eventscript monitor
-
 echo "Deleting IP $test_ip from all nodes"
 try_command_on_node -v $test_node $CTDB delip -n all $test_ip
 
@@ -61,9 +57,9 @@ ctdb_test_exit_hook_add my_exit_hook
 # delips is complete.
 try_command_on_node $test_node $CTDB sync
 
-# This effectively cancels any monitor event that is in progress and
-# runs a new one
-try_command_on_node $test_node $CTDB eventscript monitor
+# Wait for a monitor event.  Then the next steps are unlikely to occur
+# in the middle of a monitor event and will have the expected effect.
+wait_for_monitor_event $test_node
 
 if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
     # Stop monitor events from bringing up the link status of an interface
diff --git a/ctdb/tests/takeover/lcp2.005.sh b/ctdb/tests/takeover/lcp2.005.sh
index 113e52f..4e0bed8 100755
--- a/ctdb/tests/takeover/lcp2.005.sh
+++ b/ctdb/tests/takeover/lcp2.005.sh
@@ -10,6 +10,11 @@ required_result <<EOF
 DATE TIME [PID]:  ----------------------------------------
 DATE TIME [PID]:  CONSIDERING MOVES (UNASSIGNED)
 DATE TIME [PID]:  ----------------------------------------
+DATE TIME [PID]: +++++++++++++++++++++++++++++++++++++++++
+DATE TIME [PID]: Selecting most imbalanced node from:
+DATE TIME [PID]:  0 [0]
+DATE TIME [PID]:  1 [539166]
+DATE TIME [PID]:  2 [0]
 DATE TIME [PID]:  ----------------------------------------
 DATE TIME [PID]:  CONSIDERING MOVES FROM 1 [539166]
 DATE TIME [PID]:  1 [-116718] -> 192.168.21.254 -> 0 [+0]
@@ -32,8 +37,13 @@ DATE TIME [PID]:  1 [-121110] -> 192.168.20.249 -> 0 [+0]
 DATE TIME [PID]:  1 [-121110] -> 192.168.20.249 -> 2 [+0]
 DATE TIME [PID]:  ----------------------------------------
 DATE TIME [PID]: 1 [-121363] -> 192.168.20.253 -> 0 [+0]
+DATE TIME [PID]: +++++++++++++++++++++++++++++++++++++++++
+DATE TIME [PID]: Selecting most imbalanced node from:
+DATE TIME [PID]:  0 [0]
+DATE TIME [PID]:  1 [417803]
+DATE TIME [PID]:  2 [0]
 DATE TIME [PID]:  ----------------------------------------
-DATE TIME [PID]:  CONSIDERING MOVES FROM 1 [418056]
+DATE TIME [PID]:  CONSIDERING MOVES FROM 1 [417803]
 DATE TIME [PID]:  1 [-102557] -> 192.168.21.254 -> 0 [+14161]
 DATE TIME [PID]:  1 [-102557] -> 192.168.21.254 -> 2 [+0]
 DATE TIME [PID]:  1 [-102810] -> 192.168.21.253 -> 0 [+14161]
@@ -52,8 +62,13 @@ DATE TIME [PID]:  1 [-105485] -> 192.168.20.249 -> 0 [+15625]
 DATE TIME [PID]:  1 [-105485] -> 192.168.20.249 -> 2 [+0]
 DATE TIME [PID]:  ----------------------------------------
 DATE TIME [PID]: 1 [-105738] -> 192.168.20.251 -> 2 [+0]
+DATE TIME [PID]: +++++++++++++++++++++++++++++++++++++++++


-- 
Samba Shared Repository


More information about the samba-cvs mailing list