From da9d54cac629d9c0f7ae6b431abfb134b5f0eca3 Mon Sep 17 00:00:00 2001 From: Jeff Darcy Date: Tue, 5 Feb 2013 19:19:06 -0500 Subject: dht: better layout-optimization algorithm This method deals with the case where swapping might gain a bigger overlap for the xlator currently under consideration, but sacrifices even more from the xlator we're swapping with. For example: A = 0x00000000 - 0x44444443 (new 0x00000000 - 0x55555554) B = 0x44444444 - 0x77777776 (new 0x55555555 - 0xaaaaaaa9) C = 0x77777777 - 0xffffffff (new 0xaaaaaaaa - 0xffffffff) Here, the new range for B has a bigger overlap with the old C than with the old B (0x33333333 vs. 0x22222222 to be precise) so looking only at that might lead us to swap. However, such a swap turns the new C's overlap from 0x55555556 (vs. old C) to *zero* (vs. old B). In other words, we've gained 0x11111111 for B but lost 0x55555556 for C, so it's a bad idea. The new algorithm accounts for all effects of the swap, so it not only avoids bad swaps but can make some good ones that would have been missed previously. For example, if swapping a range X with a later range Y would not increase the overlap for X we would previously have skipped it even if the swap would increase Y's overlap without affecting X's. This is the normal case when we're adding a new brick (which initially has zero overlap with any old range) so finding more good swaps is probably even more important than avoiding bad ones. Also, the logic in dht_overlap_calc was completely broken before, causing integer overflows instead of providing correct values, so no matter what higher-level algorithm was in place the GIGO effect would have resulted in bad decisions. Change-Id: If61ed513cfcb931916c6b51da293e3efbaaf385f BUG: 853258 Signed-off-by: Jeff Darcy Reviewed-on: http://review.gluster.org/3908 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- tests/volume.rc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'tests/volume.rc') diff --git a/tests/volume.rc b/tests/volume.rc index 9daf560b..2a6ada3e 100644 --- a/tests/volume.rc +++ b/tests/volume.rc @@ -26,8 +26,8 @@ function volume_option() \$CLI volume info \$vol | egrep "^\$key: " | cut -f2 -d' '; } -function rebalance_status_completed_field { - \$CLI volume rebalance \$V0 status | awk '{print \$6}' | sed -n 3p +function rebalance_status_field { + \$CLI volume rebalance \$1 status | sed -n '\$p' | cut -d' ' -f4 } function remove_brick_status_completed_field { @@ -194,3 +194,8 @@ function gd_is_replace_brick_completed { echo "N" fi } + +function dht_get_layout { + local my_xa=trusted.glusterfs.dht + getfattr -d -e hex -n \$my_xa \$1 2> /dev/null | grep "\$my_xa=" | cut -d= -f2 +} -- cgit