#!/bin/bash . $(dirname $0)/../include.rc . $(dirname $0)/../cluster.rc . $(dirname $0)/../dht.rc # Check if every single rebalance process migrated some files function cluster_rebal_all_nodes_migrated_files { val=0 a=$($CLI_1 volume rebalance $V0 status | grep "completed" | awk '{print $2}'); b=($a) for i in "${b[@]}" do if [ "$i" -eq "0" ]; then echo "false"; val=1; fi done echo $val } cleanup TEST launch_cluster 3; TEST $CLI_1 peer probe $H2; TEST $CLI_1 peer probe $H3; EXPECT_WITHIN $PROBE_TIMEOUT 2 peer_count #Start with a pure distribute volume (multiple bricks on the same node) TEST $CLI_1 volume create $V0 $H1:$B1/dist1 $H1:$B1/dist2 $H2:$B2/dist3 $H2:$B2/dist4 TEST $CLI_1 volume start $V0 $CLI_1 volume info $V0 #TEST $CLI_1 volume set $V0 client-log-level DEBUG ## Mount FUSE TEST glusterfs -s $H1 --volfile-id $V0 $M0; TEST mkdir $M0/dir1 2>/dev/null; TEST touch $M0/dir1/file-{1..500} ## Add-brick and run rebalance to force file migration TEST $CLI_1 volume add-brick $V0 $H1:$B1/dist5 $H2:$B2/dist6 #Start a rebalance TEST $CLI_1 volume rebalance $V0 start force #volume rebalance status should work #TEST $CLI_1 volume rebalance $V0 status #$CLI_1 volume rebalance $V0 status EXPECT_WITHIN $REBALANCE_TIMEOUT "0" cluster_rebalance_completed EXPECT "0" cluster_rebal_all_nodes_migrated_files $CLI_1 volume rebalance $V0 status TEST umount -f $M0 TEST $CLI_1 volume stop $V0 TEST $CLI_1 volume delete $V0 ############################################################## # Next, a dist-rep volume TEST $CLI_1 volume create $V0 replica 2 $H1:$B1/drep1 $H2:$B2/drep1 $H1:$B1/drep2 $H2:$B2/drep2 TEST $CLI_1 volume start $V0 $CLI_1 volume info $V0 #TEST $CLI_1 volume set $V0 client-log-level DEBUG ## Mount FUSE TEST glusterfs -s $H1 --volfile-id $V0 $M0; TEST mkdir $M0/dir1 2>/dev/null; TEST touch $M0/dir1/file-{1..500} ## Add-brick and run rebalance to force file migration TEST $CLI_1 volume add-brick $V0 replica 2 $H1:$B1/drep3 $H2:$B2/drep3 #Start a rebalance TEST $CLI_1 volume rebalance $V0 start force #volume rebalance status should work #TEST $CLI_1 volume rebalance $V0 status #$CLI_1 volume rebalance $V0 status EXPECT_WITHIN $REBALANCE_TIMEOUT "0" cluster_rebalance_completed #EXPECT "0" cluster_rebal_all_nodes_migrated_files $CLI_1 volume rebalance $V0 status TEST umount -f $M0 TEST $CLI_1 volume stop $V0 TEST $CLI_1 volume delete $V0 ############################################################## # Next, a disperse volume TEST $CLI_1 volume create $V0 disperse 3 $H1:$B1/ec1 $H2:$B1/ec2 $H3:$B1/ec3 force TEST $CLI_1 volume start $V0 $CLI_1 volume info $V0 #TEST $CLI_1 volume set $V0 client-log-level DEBUG ## Mount FUSE TEST glusterfs -s $H1 --volfile-id $V0 $M0; TEST mkdir $M0/dir1 2>/dev/null; TEST touch $M0/dir1/file-{1..500} ## Add-brick and run rebalance to force file migration TEST $CLI_1 volume add-brick $V0 $H1:$B2/ec4 $H2:$B2/ec5 $H3:$B2/ec6 #Start a rebalance TEST $CLI_1 volume rebalance $V0 start force #volume rebalance status should work #TEST $CLI_1 volume rebalance $V0 status #$CLI_1 volume rebalance $V0 status EXPECT_WITHIN $REBALANCE_TIMEOUT "0" cluster_rebalance_completed # this will not work unless EC is changed to return all node-uuids # comment this out once that patch is ready #EXPECT "0" cluster_rebal_all_nodes_migrated_files $CLI_1 volume rebalance $V0 status TEST umount -f $M0 TEST $CLI_1 volume stop $V0 TEST $CLI_1 volume delete $V0 ############################################################## cleanup #G_TESTDEF_TEST_STATUS_NETBSD7=1501388