From f972f21fa810f4c14701a14b8a1cd1f3db92f313 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Sat, 11 Apr 2015 17:05:45 +0530 Subject: 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 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 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 should show the status of option features.scrub: pause. Change-Id: I55972eef3b8570b7cb05dc28700d4e28dc45a86a BUG: 1218036 Signed-off-by: Gaurav Kumar Garg Reviewed-on: http://review.gluster.org/10207 Tested-by: Gluster Build System Reviewed-by: Venky Shankar Reviewed-by: Krishnan Parthasarathi (cherry picked from commit 6faf89f4179c452be20f02966b9722641938599d) Reviewed-on: http://review.gluster.org/10482 Tested-by: NetBSD Build System Reviewed-by: Kaushal M --- .../1209818-vol-info-show-scrub-process-properly.t | 46 ++++++++++++++++++++++ xlators/mgmt/glusterd/src/glusterd-bitrot.c | 25 +++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t 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) -- cgit