From a99d935a876851efa25fad5f48889fd9d2a59f68 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Mon, 8 Jun 2015 13:01:44 +0530 Subject: bitrot/glusterd: gluster volume set command for bitrot should not supported 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: 1232589 Signed-off-by: Gaurav Kumar Garg Reviewed-on: http://review.gluster.org/11118 Tested-by: Gluster Build System Reviewed-by: Atin Mukherjee Tested-by: Atin Mukherjee (cherry picked from commit 1ac3d28d8dde6360550c80a10d8add572937be16) Reviewed-on: http://review.gluster.org/11265 --- .../bitrot/bug-1229134-bitd-not-support-vol-set.t | 38 ++++++++++++++++ xlators/mgmt/glusterd/src/glusterd-op-sm.c | 53 ++++++++++++++++++++++ 2 files changed, 91 insertions(+) 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 00000000000..471471f4b6b --- /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 61c9fad97d6..06d9923ea14 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -446,6 +446,54 @@ glusterd_op_sm_inject_all_acc (uuid_t *txn_id) return ret; } +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) { @@ -971,6 +1019,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; -- cgit