1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#!/bin/bash
. $(dirname $0)/../../include.rc
. $(dirname $0)/../../volume.rc
#This tests checks if the manual rebalance happens simialr to normal rebalance
TESTS_EXPECTED_IN_LOOP=10
cleanup;
TEST glusterd
TEST pidof glusterd
TEST $CLI volume create $V0 $H0:$B0/${V0}0
TEST $CLI volume set $V0 performance.quick-read off
TEST $CLI volume set $V0 performance.io-cache off
TEST $CLI volume set $V0 performance.write-behind off
TEST $CLI volume set $V0 performance.stat-prefetch off
TEST $CLI volume set $V0 performance.read-ahead off
TEST $CLI volume start $V0
TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0
TEST mkdir $M0/d
declare -a checksums
for i in {1..10};
do
TEST_IN_LOOP dd if=/dev/urandom of=$M0/d/$i bs=1M count=1
checksums[$i]="$(md5sum $M0/d/$i | awk '{print $1}')"
done
TEST $CLI volume add-brick $V0 $H0:$B0/${V0}1 force
TEST $CLI volume rebalance $V0 fix-layout start
EXPECT_WITHIN $REBALANCE_TIMEOUT "fix-layout completed" fix-layout_status_field $V0
errors=0
migrations=0
for i in {1..10};
do
setfattr -n trusted.distribute.migrate-data -v 1 $M0/d/$i 2>/dev/null
if [ $? -eq 0 ] #Migration happened for the file
then
if [ "${checksums[i]}" != "$(md5sum $B0/${V0}1/d/$i | awk '{print $1}')" ]
then
errors=$((errors+1)) #Data on new brick shouldn't change
else
migrations=$((migrations+1))
fi
else #Migration is not applicable
if [ "${checksums[i]}" != "$(md5sum $B0/${V0}0/d/$i | awk '{print $1}')" ]
then
errors=$((errors+1)) #Data on old brick shouldn't change
fi
fi
done
EXPECT_NOT "^0$" echo $migrations #At least one file should migrate
EXPECT "^0$" echo $errors
#Test that rebalance crawl is equivalent to manual rebalance
TEST $CLI volume rebalance $V0 start
EXPECT_WITHIN $REBALANCE_TIMEOUT "completed" rebalance_status_field $V0
EXPECT "^0$" rebalanced_files_field $V0
#Do one final check that data didn't change after normal rebalance
success=0
for i in {1..10}
do
if [ -f $B0/${V0}0/d/$i ]
then
if [ "${checksums[i]}" == "$(md5sum $B0/${V0}0/d/$i | awk '{print $1}')" ]
then
success=$((success+1))
fi
else
if [ "${checksums[i]}" == "$(md5sum $B0/${V0}1/d/$i | awk '{print $1}')" ]
then
success=$((success+1))
fi
fi
done
EXPECT "^10$" echo $success
cleanup
|