summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGaurav Kumar Garg <ggarg@redhat.com>2015-04-11 17:05:45 +0530
committerKrishnan Parthasarathi <kparthas@redhat.com>2015-04-30 02:13:36 -0700
commit6faf89f4179c452be20f02966b9722641938599d (patch)
tree5fa2772fd1ca4a8ed007e1cf6b153d8bd36d33b2
parent0be5e3d7c580f77f3db0d4282d2ac81071ccd3f5 (diff)
glusterd: volume info should not show "feature.scrub: resume" if scrub resumed
If bitrot is enable on the volume and if user paused the scrub process and then resume the scrub process then command #gluster volume info <VOLNAME> should show status of option features.scrub: Active. If bitrot is enable on the volume and user disable the bitrot on the volume then command #gluster volume info <VOLNAME> should show status of option features.scrub: Inactive. If bitrot is enable on the volume and user paused the scrub porcess then command gluster volume info <VOLNAME> should show the status of option features.scrub: pause. Change-Id: I55972eef3b8570b7cb05dc28700d4e28dc45a86a BUG: 1209818 Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com> Reviewed-on: http://review.gluster.org/10207 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com> Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
-rw-r--r--tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t46
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-bitrot.c25
2 files changed, 70 insertions, 1 deletions
diff --git a/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t b/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t
new file mode 100644
index 00000000000..efba5794b08
--- /dev/null
+++ b/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+## Test case for bitrot.
+## volume info should not show 'features.scrub: resume' if scrub process is
+## resumed from paused state.
+
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+. $(dirname $0)/../../cluster.rc
+
+cleanup;
+
+## Start glusterd
+TEST glusterd;
+TEST pidof glusterd;
+
+## Lets create and start the volume
+TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1
+TEST $CLI volume start $V0
+
+## Enable bitrot on volume $V0
+TEST $CLI volume bitrot $V0 enable
+
+## Set bitrot scrubber process to pause state
+TEST $CLI volume bitrot $V0 scrub pause
+
+## gluster volume info command should show scrub process pause.
+EXPECT 'pause' volinfo_field $V0 'features.scrub';
+
+
+## Resume scrub process on volume $V0
+TEST $CLI volume bitrot $V0 scrub resume
+
+## gluster volume info command should show scrub process Active
+EXPECT 'Active' volinfo_field $V0 'features.scrub';
+
+
+## Disable bitrot on volume $V0
+TEST $CLI volume bitrot $V0 disable
+
+## gluster volume info command should show scrub process Inactive
+EXPECT 'Inactive' volinfo_field $V0 'features.scrub';
+
+
+cleanup;
diff --git a/xlators/mgmt/glusterd/src/glusterd-bitrot.c b/xlators/mgmt/glusterd/src/glusterd-bitrot.c
index 13e08962c7a..55a5e3ac750 100644
--- a/xlators/mgmt/glusterd/src/glusterd-bitrot.c
+++ b/xlators/mgmt/glusterd/src/glusterd-bitrot.c
@@ -208,7 +208,12 @@ glusterd_bitrot_scrub (glusterd_volinfo_t *volinfo, dict_t *dict,
goto out;
}
- option = gf_strdup (scrub_value);
+ if (!strcmp (scrub_value, "resume")) {
+ option = gf_strdup ("Active");
+ } else {
+ option = gf_strdup (scrub_value);
+ }
+
ret = dict_set_dynstr (volinfo->dict, key, option);
if (ret) {
gf_log (this->name, GF_LOG_ERROR, "Failed to set option %s",
@@ -253,6 +258,15 @@ glusterd_bitrot_enable (glusterd_volinfo_t *volinfo, char **op_errstr)
goto out;
}
+ /*Once bitrot is enable scrubber should be in Active state*/
+ ret = dict_set_dynstr_with_alloc (volinfo->dict, "features.scrub",
+ "Active");
+ if (ret) {
+ gf_log (this->name, GF_LOG_ERROR, "Failed to set option "
+ "features.scrub value");
+ goto out;
+ }
+
ret = 0;
out:
if (ret && op_errstr && !*op_errstr)
@@ -280,6 +294,15 @@ glusterd_bitrot_disable (glusterd_volinfo_t *volinfo, char **op_errstr)
goto out;
}
+ /*Once bitrot disabled scrubber should be Inactive state*/
+ ret = dict_set_dynstr_with_alloc (volinfo->dict, "features.scrub",
+ "Inactive");
+ if (ret) {
+ gf_log (this->name, GF_LOG_ERROR, "Failed to set "
+ "features.scrub value");
+ goto out;
+ }
+
ret = 0;
out:
if (ret && op_errstr && !*op_errstr)