diff options
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-entry.c | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.c | 11 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 2 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 9 | 
4 files changed, 19 insertions, 5 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c index e7f74c7526b..97d8708d4bf 100644 --- a/xlators/cluster/afr/src/afr-self-heal-entry.c +++ b/xlators/cluster/afr/src/afr-self-heal-entry.c @@ -2139,7 +2139,7 @@ afr_sh_entry_open (call_frame_t *frame, xlator_t *this)          source  = local->self_heal.source;          sources = local->self_heal.sources; -        sh->block_size = 65536; //131072 +        sh->block_size = priv->sh_readdir_size;          sh->offset = 0;          call_count = sh->active_sinks; diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 77f00ef724e..ea686dfde19 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -186,6 +186,8 @@ reconfigure (xlator_t *this, dict_t *options)  	GF_OPTION_RECONF ("post-op-delay-secs", priv->post_op_delay_secs, options,  			  uint32, out); +        GF_OPTION_RECONF (AFR_SH_READDIR_SIZE_KEY, priv->sh_readdir_size, +                          options, size, out);          /* Reset this so we re-discover in case the topology changed.  */          priv->did_discovery = _gf_false; @@ -325,6 +327,8 @@ init (xlator_t *this)          GF_OPTION_INIT ("eager-lock", priv->eager_lock, bool, out);          GF_OPTION_INIT ("quorum-type", qtype, str, out);          GF_OPTION_INIT ("quorum-count", priv->quorum_count, uint32, out); +        GF_OPTION_INIT (AFR_SH_READDIR_SIZE_KEY, priv->sh_readdir_size, size, +                        out);          fix_quorum_options(this,priv,qtype);  	GF_OPTION_INIT ("post-op-delay-secs", priv->post_op_delay_secs, uint32, out); @@ -672,5 +676,12 @@ struct volume_options options[] = {  	                 "post-operation phase of the transaction to "                           "enhance overlap of adjacent write operations.",          }, +        { .key = {AFR_SH_READDIR_SIZE_KEY}, +          .type = GF_OPTION_TYPE_SIZET, +          .description = "readdirp size for performing entry self-heal", +          .min = 1024, +          .max = 131072, +          .default_value = "1KB", +        },          { .key  = {NULL} },  }; diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 9ae154a3d6d..3f2bbbebc24 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -27,6 +27,7 @@  #define AFR_XATTR_PREFIX "trusted.afr"  #define AFR_PATHINFO_HEADER "REPLICATE:" +#define AFR_SH_READDIR_SIZE_KEY "self-heal-readdir-size"  struct _pump_private; @@ -159,6 +160,7 @@ typedef struct _afr_private {          afr_self_heald_t       shd;          gf_boolean_t           choose_local;          gf_boolean_t           did_discovery; +        uint64_t               sh_readdir_size;  } afr_private_t;  typedef struct { diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 882b96cd013..685470d6473 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -132,6 +132,7 @@ static struct volopt_map_entry glusterd_volopt_map[] = {          {"cluster.quorum-type",                  "cluster/replicate",  "quorum-type", NULL, NO_DOC, 0},          {"cluster.quorum-count",                 "cluster/replicate",  "quorum-count", NULL, NO_DOC, 0},          {"cluster.choose-local",                 "cluster/replicate",  NULL, NULL, DOC, 0}, +        {"cluster.self-heal-readdir-size",       "cluster/replicate",  NULL, NULL, NO_DOC, 0},          {"cluster.stripe-block-size",            "cluster/stripe",     "block-size", NULL, DOC, 0},  	{"cluster.stripe-coalesce",		 "cluster/stripe",     "coalesce", NULL, DOC, 0}, @@ -2558,13 +2559,13 @@ shd_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme,          struct volopt_map_entry new_vme = {0};          char                    *shd_option = NULL; -        if (vme->option[0] != '!') -                goto out;          shd_option = gd_get_matching_option (gd_shd_options, vme->option); -        if (!shd_option) +        if ((vme->option[0] == '!') && !shd_option)                  goto out;          new_vme = *vme; -        new_vme.option = shd_option + 1;//option with out '!' +        if (shd_option) { +                new_vme.option = shd_option + 1;//option with out '!' +        }          ret = no_filter_option_handler (graph, &new_vme, param);  out:  | 
