diff options
| author | Gaurav Kumar Garg <ggarg@redhat.com> | 2015-06-08 13:01:44 +0530 | 
|---|---|---|
| committer | Venky Shankar <vshankar@redhat.com> | 2015-06-16 00:39:19 -0700 | 
| commit | 1ac3d28d8dde6360550c80a10d8add572937be16 (patch) | |
| tree | 0337d39c11e9218f668ee7ecedfbe5731abed1bd | |
| parent | 476d4070dbdb9d73b36bd04f3eb3d6eda84abe73 (diff) | |
bitrot/glusterd: gluster volume set command for bitrot should not supported
Currently gluster volume set <VOLNAME> bitrot succeeds. gluster volume
set command for bitrot is not supported.
Gluster should only accept gluster volume bitrot <VOLNAME> * commands.
Change-Id: I5ff4b79f202ad018c76188f19d6311aad0d7c166
BUG: 1229134
Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/11118
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Tested-by: Atin Mukherjee <amukherj@redhat.com>
| -rw-r--r-- | tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t | 38 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 53 | 
2 files changed, 91 insertions, 0 deletions
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 <VOLNAME> 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 <VOLNAME>' 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 <VOLNAME> *' 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 56887e35323..335f1a82083 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -443,6 +443,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 <VOLNAME> %s' " +                          "is invalid command. Use 'gluster volume bitrot " +                          "<VOLNAME> {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 <VOLNAME> %s' is invalid command. Use 'gluster " +                          "volume bitrot <VOLNAME> 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 <VOLNAME> %s' is " +                          "invalid command. Use 'gluster volume bitrot " +                          "<VOLNAME> 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 <VOLNAME> %s' is " +                          "invalid command. Use 'gluster volume bitrot " +                          "<VOLNAME> 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; @@ -967,6 +1015,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;  | 
