From d68fbc3f817831a676d60de7be5b095967aadc7a Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Thu, 16 May 2013 18:13:10 +0530 Subject: mgmt/glusterd: Set task op at the time of task-id set Problem: If a remove-brick start is executed on m1 with brick from m2 on local subvolume no rebalance process is launched. Because of this volinfo->rebal.op is not set. This leads to volume status failures. Fix: Set rebal.op even when the reblance process is not started. Change-Id: I71c7e6f09353be14c1e8edca3c8685ebfdf226d6 BUG: 964059 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/5030 Reviewed-by: Kaushal M Tested-by: Gluster Build System --- tests/bugs/bug-964059.t | 30 ++++++++++++++++++++++++++ xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 1 + xlators/mgmt/glusterd/src/glusterd-rebalance.c | 1 + 3 files changed, 32 insertions(+) create mode 100755 tests/bugs/bug-964059.t diff --git a/tests/bugs/bug-964059.t b/tests/bugs/bug-964059.t new file mode 100755 index 000000000..df07f95ee --- /dev/null +++ b/tests/bugs/bug-964059.t @@ -0,0 +1,30 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../cluster.rc + +function check_peers { + $CLI_1 peer status | grep 'Peer in Cluster (Connected)' | wc -l +} + +function volume_count { + local cli=$1; + if [ $cli -eq '1' ] ; then + $CLI_1 volume info | grep 'Volume Name' | wc -l; + else + $CLI_2 volume info | grep 'Volume Name' | wc -l; + fi +} + +cleanup; + +TEST launch_cluster 2; +TEST $CLI_1 peer probe $H2; + +EXPECT_WITHIN 20 1 check_peers + +TEST $CLI_1 volume create $V0 $H1:$B1/$V0 $H2:$B2/$V0 +TEST $CLI_1 volume start $V0 +TEST $CLI_1 volume remove-brick $V0 $H2:$B2/$V0 start +TEST $CLI_1 volume status +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 912a6a798..4e5204ad1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1587,6 +1587,7 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) ret = 0; } else { uuid_parse (task_id_str, volinfo->rebal.rebalance_id) ; + volinfo->rebal.op = GD_OP_REMOVE_BRICK; } force = 0; break; diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index ebb9e7dd4..4f77f0883 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -648,6 +648,7 @@ glusterd_op_rebalance (dict_t *dict, char **op_errstr, dict_t *rsp_dict) ret = 0; } else { uuid_parse (task_id_str, volinfo->rebal.rebalance_id) ; + volinfo->rebal.op = GD_OP_REBALANCE; } ret = glusterd_handle_defrag_start (volinfo, msg, sizeof (msg), cmd, NULL, GD_OP_REBALANCE); -- cgit