diff options
author | Gaurav Kumar Garg <ggarg@redhat.com> | 2015-04-11 17:05:45 +0530 |
---|---|---|
committer | Krishnan Parthasarathi <kparthas@redhat.com> | 2015-04-30 02:13:36 -0700 |
commit | 6faf89f4179c452be20f02966b9722641938599d (patch) | |
tree | 5fa2772fd1ca4a8ed007e1cf6b153d8bd36d33b2 | |
parent | 0be5e3d7c580f77f3db0d4282d2ac81071ccd3f5 (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.t | 46 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-bitrot.c | 25 |
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) |