summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)