diff options
-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) |