diff options
Diffstat (limited to 'xlators/features')
-rw-r--r-- | xlators/features/quota/src/quota-enforcer-client.c | 43 | ||||
-rw-r--r-- | xlators/features/quota/src/quota.c | 11 |
2 files changed, 48 insertions, 6 deletions
diff --git a/xlators/features/quota/src/quota-enforcer-client.c b/xlators/features/quota/src/quota-enforcer-client.c index bfea5e42014..7d8ab937d1e 100644 --- a/xlators/features/quota/src/quota-enforcer-client.c +++ b/xlators/features/quota/src/quota-enforcer-client.c @@ -295,6 +295,37 @@ quota_enforcer_notify (struct rpc_clnt *rpc, void *mydata, return ret; } +int +quota_enforcer_blocking_connect (rpc_clnt_t *rpc) +{ + dict_t *options = NULL; + int ret = -1; + + options = dict_new (); + if (options == NULL) + goto out; + + ret = dict_set_str (options, "non-blocking-io", "no"); + if (ret) + goto out; + + rpc->conn.trans->reconfigure (rpc->conn.trans, options); + + rpc_clnt_start (rpc); + + ret = dict_set_str (options, "non-blocking-io", "yes"); + if (ret) + goto out; + + rpc->conn.trans->reconfigure (rpc->conn.trans, options); + + ret = 0; +out: + dict_unref (options); + + return ret; +} + //Returns a started rpc_clnt. Creates a new rpc_clnt if quota_priv doesn't have //one already struct rpc_clnt * @@ -309,9 +340,13 @@ quota_enforcer_init (xlator_t *this, dict_t *options) gf_log (this->name, GF_LOG_TRACE, "quota enforcer clnt already " "inited"); //Turns out to be a NOP if the clnt is already connected. - rpc_clnt_start (priv->rpc_clnt); + ret = quota_enforcer_blocking_connect (priv->rpc_clnt); + if (ret) + goto out; + return priv->rpc_clnt; } + priv->quota_enforcer = "a_enforcer_clnt; ret = dict_set_str (options, "transport.address-family", "unix"); @@ -339,7 +374,11 @@ quota_enforcer_init (xlator_t *this, dict_t *options) goto out; } - rpc_clnt_start (rpc); + ret = quota_enforcer_blocking_connect (rpc); + if (ret) + goto out; + + ret = 0; out: if (ret) { if (rpc) diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index e1471258b49..2812a2b13a9 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -4177,14 +4177,15 @@ err: int reconfigure (xlator_t *this, dict_t *options) { - int32_t ret = -1; - quota_priv_t *priv = NULL; + int32_t ret = -1; + quota_priv_t *priv = NULL; + gf_boolean_t quota_on = _gf_false; priv = this->private; GF_OPTION_RECONF ("deem-statfs", priv->consider_statfs, options, bool, out); - GF_OPTION_RECONF ("server-quota", priv->is_quota_on, options, bool, + GF_OPTION_RECONF ("server-quota", quota_on, options, bool, out); GF_OPTION_RECONF ("default-soft-limit", priv->default_soft_lim, options, percent, out); @@ -4195,7 +4196,7 @@ reconfigure (xlator_t *this, dict_t *options) GF_OPTION_RECONF ("hard-timeout", priv->hard_timeout, options, time, out); - if (priv->is_quota_on) { + if (quota_on) { priv->rpc_clnt = quota_enforcer_init (this, this->options); if (priv->rpc_clnt == NULL) { @@ -4216,6 +4217,8 @@ reconfigure (xlator_t *this, dict_t *options) } } + priv->is_quota_on = quota_on; + ret = 0; out: return ret; |