summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorggarg <ggarg@redhat.com>2014-04-21 18:59:00 +0530
committerVijay Bellur <vbellur@redhat.com>2014-05-02 09:31:45 -0700
commitdd5e318e020fab5914567885c1b83815b39d46f9 (patch)
tree16e5292e52b6dce61a8da59c82d8f3f19feacaae
parent0f56f0ce2d2e18fbb2eedf14e93b5a592f0005c3 (diff)
glusterd: Differentiate rebalance status and remove-brick status messages
previously when user triggred 'gluster volume remove-brick VOLNAME BRICK start' then command' gluster volume rebalance <volname> status' showing output even user has not triggred "rebalance start" and when user triggred 'gluster volume rebalance <volname> start' then command 'gluster volume remove-brick VOLNAME BRICK status' showing output even user has not run rebalance start and remove brick start. regression test failed in previous patch. file test/dht.rc and test/bug/bug-973073 edited to avoid regression test failure. now with this fix it will differentiate rebalance and remove-brick status messages. Signed-off-by: ggarg <ggarg@redhat.com> Change-Id: I7f92ad247863b9f5fbc0887cc2ead07754bcfb4f BUG: 1089668 Reviewed-on: http://review.gluster.org/7517 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Atin Mukherjee <amukherj@redhat.com> Reviewed-by: Humble Devassy Chirammal <humble.devassy@gmail.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rwxr-xr-xtests/bugs/bug-1089668.t25
-rwxr-xr-xtests/bugs/bug-973073.t2
-rw-r--r--tests/dht.rc13
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-rebalance.c20
4 files changed, 59 insertions, 1 deletions
diff --git a/tests/bugs/bug-1089668.t b/tests/bugs/bug-1089668.t
new file mode 100755
index 0000000..e5e0805
--- /dev/null
+++ b/tests/bugs/bug-1089668.t
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+. $(dirname $0)/../volume.rc
+. $(dirname $0)/../dht.rc
+
+#This script checks command "gluster volume rebalance <volname> status will not
+#show any output when user have done only remove-brick start and command
+#'gluster volume remove-brick <volname> <brick_name> status' will not show
+#any output when user have triggered only rebalance start.
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2}
+TEST $CLI volume start $V0
+
+TEST $CLI volume rebalance $V0 start
+TEST ! $CLI volume remove-brick $V0 $H0:$B0/${V0}1 status
+
+TEST $CLI volume rebalance $V0 stop
+
+TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}1 start
+TEST ! $CLI volume rebalance $V0 status
+
+cleanup
diff --git a/tests/bugs/bug-973073.t b/tests/bugs/bug-973073.t
index 83e2839..619f173 100755
--- a/tests/bugs/bug-973073.t
+++ b/tests/bugs/bug-973073.t
@@ -34,7 +34,7 @@ TEST glusterfs -s $H0 --volfile-id $V0 $M0;
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2 start
## remove-brick status == rebalance_status
-EXPECT_WITHIN 30 "0" rebalance_completed
+EXPECT_WITHIN 30 "0" remove_brick_completed
TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}2 stop
diff --git a/tests/dht.rc b/tests/dht.rc
index 54425c9..a11bbfd 100644
--- a/tests/dht.rc
+++ b/tests/dht.rc
@@ -78,3 +78,16 @@ function rebalance_completed()
echo $val
return $val
}
+
+function remove_brick_completed()
+{
+ val=1
+ test=`gluster volume remove-brick $V0 $H0:$B0/${V0}2 status |grep localhost|grep -v "in progress" 2>&1`
+ if [ $? -eq 0 ]
+ then
+ val=0
+ fi
+
+ echo $val
+ return $val
+}
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
index bdedf4c..4186946 100644
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
@@ -512,6 +512,7 @@ int
glusterd_op_stage_rebalance (dict_t *dict, char **op_errstr)
{
char *volname = NULL;
+ char *cmd_str = NULL;
int ret = 0;
int32_t cmd = 0;
char msg[2048] = {0};
@@ -582,6 +583,25 @@ glusterd_op_stage_rebalance (dict_t *dict, char **op_errstr)
break;
case GF_DEFRAG_CMD_STATUS:
case GF_DEFRAG_CMD_STOP:
+ ret = dict_get_str (dict, "cmd-str", &cmd_str);
+ if (ret) {
+ gf_log (this->name, GF_LOG_ERROR, "Failed to get "
+ "command string");
+ ret = -1;
+ goto out;
+ }
+ if ((strstr(cmd_str,"rebalance") != NULL) &&
+ (volinfo->rebal.op != GD_OP_REBALANCE)){
+ snprintf (msg,sizeof(msg),"Rebalance not started.");
+ ret = -1;
+ goto out;
+ }
+ if ((strstr(cmd_str,"remove-brick")!= NULL) &&
+ (volinfo->rebal.op != GD_OP_REMOVE_BRICK)){
+ snprintf (msg,sizeof(msg),"remove-brick not started.");
+ ret = -1;
+ goto out;
+ }
break;
default:
break;