summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests/bugs/readdir-ahead/bug-1439640.t2
-rwxr-xr-xtests/bugs/readdir-ahead/bug-1446516.t21
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c31
-rw-r--r--xlators/performance/readdir-ahead/src/readdir-ahead.c3
4 files changed, 55 insertions, 2 deletions
diff --git a/tests/bugs/readdir-ahead/bug-1439640.t b/tests/bugs/readdir-ahead/bug-1439640.t
index cfa5d1ff659..cc6c829fccc 100755
--- a/tests/bugs/readdir-ahead/bug-1439640.t
+++ b/tests/bugs/readdir-ahead/bug-1439640.t
@@ -27,4 +27,4 @@ TEST ! $CLI volume set $V0 rda-request-size 87adh
TEST $CLI volume set $V0 rda-cache-limit 10MB
TEST $CLI volume set $V0 rda-request-size 128KB
-#cleanup;
+cleanup;
diff --git a/tests/bugs/readdir-ahead/bug-1446516.t b/tests/bugs/readdir-ahead/bug-1446516.t
new file mode 100755
index 00000000000..2bf6520d861
--- /dev/null
+++ b/tests/bugs/readdir-ahead/bug-1446516.t
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+
+cleanup;
+
+TEST glusterd
+
+TEST $CLI volume create $V0 $H0:$B0/${V0}{1..4}
+TEST $CLI volume start $V0
+
+TEST $CLI volume set $V0 parallel-readdir on
+
+TEST $CLI volume set $V0 rda-cache-limit 4GB
+
+TEST $CLI volume set $V0 parallel-readdir off
+
+TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
+
+cleanup;
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index 9e84d248090..736b4ed89c9 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -1003,6 +1003,36 @@ out:
static int
+validate_rda_cache_limit (glusterd_volinfo_t *volinfo, dict_t *dict,
+ char *key, char *value, char **op_errstr)
+{
+ int ret = 0;
+ uint64_t rda_cache_size = 0;
+
+ ret = gf_string2bytesize_uint64 (value, &rda_cache_size);
+ if (ret < 0)
+ goto out;
+
+ if (rda_cache_size <= (1 * GF_UNIT_GB))
+ goto out;
+
+ /* With release 3.11 the max value of rda_cache_limit is changed from
+ * 1GB to INFINITY. If there are clients older than 3.11 and the value
+ * of rda-cache-limit is set to > 1GB, the older clients will stop
+ * working. Hence if a user is setting rda-cache-limit to > 1GB
+ * ensure that all the clients are 3.11 or greater.
+ */
+ ret = glusterd_check_client_op_version_support (volinfo->volname,
+ GD_OP_VERSION_3_11_0,
+ op_errstr);
+out:
+ gf_msg_debug ("glusterd", 0, "Returning %d", ret);
+
+ return ret;
+}
+
+
+static int
validate_worm_period (glusterd_volinfo_t *volinfo, dict_t *dict, char *key,
char *value, char **op_errstr)
{
@@ -3276,6 +3306,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
.type = DOC,
.flags = OPT_FLAG_CLIENT_OPT,
.op_version = GD_OP_VERSION_3_9_1,
+ .validate_fn = validate_rda_cache_limit
},
{ .key = "performance.nl-cache-positive-entry",
.voltype = "performance/nl-cache",
diff --git a/xlators/performance/readdir-ahead/src/readdir-ahead.c b/xlators/performance/readdir-ahead/src/readdir-ahead.c
index 2ffcf25d8a7..4e7f2b9a879 100644
--- a/xlators/performance/readdir-ahead/src/readdir-ahead.c
+++ b/xlators/performance/readdir-ahead/src/readdir-ahead.c
@@ -23,6 +23,7 @@
* preloads on the directory.
*/
+#include <math.h>
#include "glusterfs.h"
#include "xlator.h"
#include "call-stub.h"
@@ -739,7 +740,7 @@ struct volume_options options[] = {
{ .key = {"rda-cache-limit"},
.type = GF_OPTION_TYPE_SIZET,
.min = 0,
- .max = 1 * GF_UNIT_GB,
+ .max = INFINITY,
.default_value = "10MB",
.description = "maximum size of cache consumed by readdir-ahead "
"xlator. This value is global and total memory "