diff options
author | N Balachandran <nbalacha@redhat.com> | 2017-05-10 21:26:28 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2017-05-16 16:01:39 +0000 |
commit | b23bd3dbc2c153171d0bb1205e6804afe022a55f (patch) | |
tree | 490914f794819e6bc7b52f2f0411e3ea1909963c /tests/basic/distribute/rebal-all-nodes-migrate.t | |
parent | 6f7d55c9d58797beaf8d5393c03a5a545bed8bec (diff) |
cluster/dht: Rebalance on all nodes should migrate files
Problem:
Rebalance compares the node-uuid of a file against its own
to and migrates a file only if they match. However, the
current behaviour in both AFR and EC is to return
the node-uuid of the first brick in a replica set for all
files. This means a single node ends up migrating all
the files if the first brick of every replica set is on the
same node.
Fix:
AFR and EC will return all node-uuids for the replica set.
The rebalance process will divide the files to be migrated
among all the nodes by hashing the gfid of the file and
using that value to select a node to perform the migration.
This patch makes the required DHT and tiering changes.
Some tests in rebal-all-nodes-migrate.t will need to be
uncommented once the AFR and EC changes are merged.
Change-Id: I5ce41600f5ba0e244ddfd986e2ba8fa23329ff0c
BUG: 1366817
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Reviewed-on: https://review.gluster.org/17239
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Diffstat (limited to 'tests/basic/distribute/rebal-all-nodes-migrate.t')
-rw-r--r-- | tests/basic/distribute/rebal-all-nodes-migrate.t | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/basic/distribute/rebal-all-nodes-migrate.t b/tests/basic/distribute/rebal-all-nodes-migrate.t new file mode 100644 index 00000000000..14f0a53b1f8 --- /dev/null +++ b/tests/basic/distribute/rebal-all-nodes-migrate.t @@ -0,0 +1,143 @@ +#!/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}'); +# echo $a + b=($a) + for i in "${b[@]}" + do +# echo "$i"; + 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 |