diff options
Diffstat (limited to 'xlators/cluster/afr')
-rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 2 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr.c | 11 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr.h | 5 |
3 files changed, 15 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index 639f48687df..c79583924a4 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -1960,7 +1960,7 @@ afr_set_transaction_flock (xlator_t *this, afr_local_t *local) inodelk = afr_get_inodelk (int_lock, int_lock->domain); priv = this->private; - if (priv->arbiter_count && + if ((priv->arbiter_count || priv->full_lock) && local->transaction.type == AFR_DATA_TRANSACTION) { /*Lock entire file to avoid network split brains.*/ inodelk->flock.l_len = 0; diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 10b6c2f9463..34b4cdd0b8a 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -244,6 +244,7 @@ reconfigure (xlator_t *this, dict_t *options) out); GF_OPTION_RECONF ("locking-scheme", priv->locking_scheme, options, str, out); + GF_OPTION_RECONF ("full-lock", priv->full_lock, options, bool, out); GF_OPTION_RECONF ("use-compound-fops", priv->use_compound_fops, options, bool, out); @@ -507,6 +508,7 @@ init (xlator_t *this) GF_OPTION_INIT ("pre-op-compat", priv->pre_op_compat, bool, out); GF_OPTION_INIT ("locking-scheme", priv->locking_scheme, str, out); + GF_OPTION_INIT ("full-lock", priv->full_lock, bool, out); GF_OPTION_INIT ("use-compound-fops", priv->use_compound_fops, bool, out); GF_OPTION_INIT ("granular-entry-heal", priv->esh_granular, bool, out); @@ -1163,6 +1165,15 @@ struct volume_options options[] = { "stop being compatible with afr-v1, which helps afr " "be more granular while self-healing", }, + { .key = {"full-lock"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "yes", + .op_version = {GD_OP_VERSION_3_13_2}, + .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE, + .tags = {"replicate"}, + .description = "If this option is disabled, then the IOs will take " + "range locks same as versions till 3.13.1." + }, { .key = {"granular-entry-heal"}, .type = GF_OPTION_TYPE_BOOL, .default_value = "no", diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index fb8b3b1d136..220cc0b5d41 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -177,9 +177,10 @@ typedef struct _afr_private { void *pump_private; gf_boolean_t use_afr_in_pump; char *locking_scheme; - gf_boolean_t esh_granular; + gf_boolean_t full_lock; + gf_boolean_t esh_granular; gf_boolean_t consistent_io; - gf_boolean_t use_compound_fops; + gf_boolean_t use_compound_fops; } afr_private_t; |