summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c16
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c41
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.h10
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c14
4 files changed, 63 insertions, 18 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 7d1835236fe..c408f12c10d 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -11028,22 +11028,6 @@ glusterd_enable_default_options (glusterd_volinfo_t *volinfo, char *option)
* }
* */
- /* readdir-ahead needs to be enabled for new volumes with
- * >= gluster version 3.7
- */
- if (!option || !strcmp ("performance.readdir-ahead", option)) {
- ret = dict_set_dynstr_with_alloc (volinfo->dict,
- "performance.readdir-ahead", "on");
- if (ret) {
- gf_msg (this->name, GF_LOG_ERROR, errno,
- GD_MSG_DICT_SET_FAILED,
- "Failed to set option "
- "'performance.readdir-ahead' on volume "
- "%s", volinfo->volname);
- goto out;
- }
- }
-
/* Option 'features.quota-deem-statfs' should not be turned off
* with 'gluster volume reset <VOLNAME>', since quota features
* can be reset only with 'gluster volume quota <VOLNAME>
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c
index 9537156b6c3..144bd5a4d57 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -2647,6 +2647,13 @@ perfxl_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme,
(vme->op_version > volinfo->client_op_version))
return 0;
+ /* if VKEY_READDIR_AHEAD is enabled and parallel readdir is
+ * not enabled then load readdir-ahead here else it will be
+ * loaded as a child of dht */
+ if (!strcmp (vme->key, VKEY_READDIR_AHEAD) &&
+ glusterd_volinfo_get_boolean (volinfo, VKEY_PARALLEL_READDIR))
+ return 0;
+
if (volgen_graph_add (graph, vme->voltype, volinfo->volname))
return 0;
else
@@ -3391,6 +3398,30 @@ out:
}
static int
+volgen_graph_build_readdir_ahead (volgen_graph_t *graph,
+ glusterd_volinfo_t *volinfo,
+ size_t child_count)
+{
+ int32_t clusters = 0;
+
+ if (graph->type == GF_REBALANCED ||
+ graph->type == GF_QUOTAD ||
+ graph->type == GF_SNAPD ||
+ !glusterd_volinfo_get_boolean (volinfo, VKEY_PARALLEL_READDIR) ||
+ !glusterd_volinfo_get_boolean (volinfo, VKEY_READDIR_AHEAD))
+ goto out;
+
+ clusters = volgen_link_bricks_from_list_tail (graph,
+ volinfo,
+ "performance/readdir-ahead",
+ "%s-readdir-ahead-%d",
+ child_count,
+ 1);
+out:
+ return clusters;
+}
+
+static int
volgen_graph_build_dht_cluster (volgen_graph_t *graph,
glusterd_volinfo_t *volinfo, size_t child_count,
gf_boolean_t is_quotad)
@@ -3726,6 +3757,11 @@ build_distribute:
else
strcat (volinfo->volname, "-cold");
}
+ clusters = volgen_graph_build_readdir_ahead (graph, volinfo,
+ dist_count);
+ if (clusters < 0)
+ goto out;
+
ret = volgen_graph_build_dht_cluster (graph, volinfo,
dist_count, is_quotad);
if (volinfo->tier_info.hot_brick_count)
@@ -4750,6 +4786,8 @@ build_rebalance_volfile (glusterd_volinfo_t *volinfo, char *filepath,
this = THIS;
+ graph.type = GF_REBALANCED;
+
if (volinfo->brick_count <= volinfo->dist_leaf_count) {
/*
* Volume is not a distribute volume or
@@ -5186,6 +5224,8 @@ build_quotad_graph (volgen_graph_t *graph, dict_t *mod_dict)
priv = this->private;
GF_ASSERT (priv);
+ graph->type = GF_QUOTAD;
+
set_dict = dict_new ();
if (!set_dict) {
ret = -ENOMEM;
@@ -6050,6 +6090,7 @@ glusterd_snapdsvc_create_volfile (glusterd_volinfo_t *volinfo)
int ret = -1;
char filename [PATH_MAX] = {0,};
+ graph.type = GF_SNAPD;
glusterd_svc_build_snapd_volfile (volinfo, filename, PATH_MAX);
ret = glusterd_snapdsvc_generate_volfile (&graph, volinfo);
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.h b/xlators/mgmt/glusterd/src/glusterd-volgen.h
index 2d62f720c8a..de1ba9428f5 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.h
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.h
@@ -32,6 +32,8 @@
#define VKEY_FEATURES_TRASH "features.trash"
#define VKEY_FEATURES_BITROT "features.bitrot"
#define VKEY_FEATURES_SCRUB "features.scrub"
+#define VKEY_PARALLEL_READDIR "performance.parallel-readdir"
+#define VKEY_READDIR_AHEAD "performance.readdir-ahead"
#define AUTH_ALLOW_MAP_KEY "auth.allow"
#define AUTH_REJECT_MAP_KEY "auth.reject"
@@ -55,9 +57,17 @@ typedef enum {
GF_CLIENT_OTHER
} glusterd_client_type_t;
+/* It indicates the type of volfile that the graph is built for */
+typedef enum {
+ GF_REBALANCED = 1,
+ GF_QUOTAD,
+ GF_SNAPD,
+} glusterd_graph_type_t;
+
struct volgen_graph {
char **errstr;
glusterfs_graph_t graph;
+ glusterd_graph_type_t type;
};
typedef struct volgen_graph volgen_graph_t;
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index a75770220b3..ae569c66a23 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -1867,12 +1867,11 @@ struct volopt_map_entry glusterd_volopt_map[] = {
{ .key = "performance.readdir-ahead",
.voltype = "performance/readdir-ahead",
.option = "!perf",
- .value = "off",
+ .value = "on",
.op_version = 3,
.description = "enable/disable readdir-ahead translator in the volume.",
.flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_XLATOR_OPT
},
-
{ .key = "performance.io-cache",
.voltype = "performance/io-cache",
.option = "!perf",
@@ -3092,6 +3091,17 @@ struct volopt_map_entry glusterd_volopt_map[] = {
.op_version = GD_OP_VERSION_3_8_4,
.flags = OPT_FLAG_CLIENT_OPT
},
+ { .key = "performance.parallel-readdir",
+ .voltype = "performance/readdir-ahead",
+ .option = "parallel-readdir",
+ .value = "off",
+ .type = DOC,
+ .op_version = GD_OP_VERSION_3_10_0,
+ .description = "If this option is enabled, the readdir operation is "
+ "performed parallely on all the bricks, thus improving"
+ " the performance of readdir. Note that the performance"
+ "improvement is higher in large clusters"
+ },
{ .key = "performance.rda-request-size",
.voltype = "performance/readdir-ahead",
.option = "rda-request-size",