summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t38
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c53
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;