From a415d682160dbb9cb86fcfd5c0371dc575de22ab Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Mon, 8 Jun 2015 13:01:44 +0530 Subject: [PATCH 281/304] bitrot/glusterd: gluster volume set command for bitrot should not supported This patch is backport of: http://review.gluster.org/11118 Currently gluster volume set bitrot succeeds. gluster volume set command for bitrot is not supported. Gluster should only accept gluster volume bitrot * commands. >>Change-Id: I5ff4b79f202ad018c76188f19d6311aad0d7c166 >>BUG: 1229134 >>Signed-off-by: Gaurav Kumar Garg BUG: 1228135 Change-Id: I6a9e3d07023021e5f910c8e7f436f9b64d48a277 Signed-off-by: Gaurav Kumar Garg Reviewed-on: https://code.engineering.redhat.com/gerrit/55756 Reviewed-by: Raghavendra Bhat Reviewed-by: Atin Mukherjee Tested-by: Atin Mukherjee --- .../bitrot/bug-1229134-bitd-not-support-vol-set.t | 38 ++++++++++++++ xlators/mgmt/glusterd/src/glusterd-op-sm.c | 53 ++++++++++++++++++++ 2 files changed, 91 insertions(+), 0 deletions(-) create mode 100644 tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t diff --git a/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t b/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t new file mode 100644 index 0000000..471471f --- /dev/null +++ b/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t @@ -0,0 +1,38 @@ +#!/bin/bash + +## Test case for bitrot BZ:1229134 +## gluster volume set bitrot * command succeeds, +## which is not supported to enable bitrot. + +. $(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}{1..2} +TEST $CLI volume start $V0 + +## 'gluster volume set ' command for bitrot should failed. +TEST ! $CLI volume set $V0 bitrot enable +TEST ! $CLI volume set $V0 bitrot disable +TEST ! $CLI volume set $V0 scrub-frequency daily +TEST ! $CLI volume set $V0 scrub pause +TEST ! $CLI volume set $V0 scrub-throttle lazy + + +## 'gluster volume bitrot *' command for bitrot should succeeds. +TEST $CLI volume bitrot $V0 enable +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +TEST $CLI volume bitrot $V0 scrub pause +TEST $CLI volume bitrot $V0 scrub-frequency daily +TEST $CLI volume bitrot $V0 scrub-throttle lazy + +cleanup; + diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 4b06482..1c8925c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -447,6 +447,54 @@ glusterd_op_sm_inject_all_acc (uuid_t *txn_id) } static int +glusterd_check_bitrot_cmd (char *key, char *value, char *errstr, size_t size) +{ + int ret = -1; + + if ((!strncmp (key, "bitrot", strlen ("bitrot"))) || + (!strncmp (key, "features.bitrot", strlen ("features.bitrot")))) { + snprintf (errstr, size, " 'gluster volume set %s' " + "is invalid command. Use 'gluster volume bitrot " + " {enable|disable}' instead.", key); + ret = -1; + goto out; + } else if ((!strncmp (key, "scrub-freq", strlen ("scrub-freq"))) || + (!strncmp (key, "features.scrub-freq", + strlen ("features.scrub-freq")))) { + snprintf (errstr, size, " 'gluster volume " + "set %s' is invalid command. Use 'gluster " + "volume bitrot scrub-frequency" + " {hourly|daily|weekly|biweekly|monthly}' instead.", + key); + ret = -1; + goto out; + } else if ((!strncmp (key, "scrub", strlen ("scrub"))) || + (!strncmp (key, "features.scrub", + strlen ("features.scrub")))) { + snprintf (errstr, size, " 'gluster volume set %s' is " + "invalid command. Use 'gluster volume bitrot " + " scrub {pause|resume}' instead.", key); + ret = -1; + goto out; + } else if ((!strncmp (key, "scrub-throttle", + strlen ("scrub-throttle"))) || + (!strncmp (key, "features.scrub-throttle", + strlen ("features.scrub-throttle")))) { + snprintf (errstr, size, " 'gluster volume set %s' is " + "invalid command. Use 'gluster volume bitrot " + " scrub-throttle {lazy|normal|aggressive}' " + "instead.", + key); + ret = -1; + goto out; + } + + ret = 0; +out: + return ret; +} + +static int glusterd_check_quota_cmd (char *key, char *value, char *errstr, size_t size) { int ret = -1; @@ -975,6 +1023,11 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr) } } + ret = glusterd_check_bitrot_cmd (key, value, errstr, + sizeof (errstr)); + if (ret) + goto out; + ret = glusterd_check_quota_cmd (key, value, errstr, sizeof (errstr)); if (ret) goto out; -- 1.7.1