diff options
author | Ravishankar N <ravishankar@redhat.com> | 2015-06-03 15:45:02 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-06-03 19:11:56 -0700 |
commit | 261f2cd3d03b76248c446d047086032ce18ad1c5 (patch) | |
tree | 411d170a5ba0e8bf47a6ee431797835e93f3ce57 /xlators/cluster/afr | |
parent | ebeab96411947ca73c946422aef8af9bcd88ff05 (diff) |
afr: honour selfheal enable/disable volume set options
afr-v1 had the following volume set options that are used to enable/ disable
self-heals from happening in AFR xlator when loaded in the client graph:
cluster.metadata-self-heal
cluster.data-self-heal
cluster.entry-self-heal
In afr-v2, these 3 heals can happen from the client if there is an inode
refresh. This patch allows such heals to proceed only if the corresponding
volume set options are set to true.
Change-Id: I8d97d6020611152e73a269f3fdb607652c66cc86
BUG: 1227674
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/11012
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
(cherry picked from commit da111ae21429d33179cd11409bc171fae9d55194)
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/11062
Diffstat (limited to 'xlators/cluster/afr')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 3 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-common.c | 11 |
2 files changed, 11 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index f478fea4daa..410d31d5641 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -1757,6 +1757,9 @@ afr_can_start_metadata_self_heal(call_frame_t *frame, xlator_t *this) replies = local->replies; priv = this->private; + if (!priv->metadata_self_heal) + return _gf_false; + for (i = 0; i < priv->child_count; i++) { if(!replies[i].valid || replies[i].op_ret == -1) continue; diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index f3d1f8b0b14..207e9b9e9ce 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -1308,6 +1308,11 @@ afr_selfheal_do (call_frame_t *frame, xlator_t *this, uuid_t gfid) gf_boolean_t data_selfheal = _gf_false; gf_boolean_t metadata_selfheal = _gf_false; gf_boolean_t entry_selfheal = _gf_false; + afr_private_t *priv = NULL; + gf_boolean_t dataheal_enabled = _gf_false; + + priv = this->private; + gf_string2boolean (priv->data_self_heal, &dataheal_enabled); ret = afr_selfheal_unlocked_inspect (frame, this, gfid, &inode, &data_selfheal, @@ -1321,13 +1326,13 @@ afr_selfheal_do (call_frame_t *frame, xlator_t *this, uuid_t gfid) goto out; } - if (data_selfheal) + if (data_selfheal && dataheal_enabled) data_ret = afr_selfheal_data (frame, this, inode); - if (metadata_selfheal) + if (metadata_selfheal && priv->metadata_self_heal) metadata_ret = afr_selfheal_metadata (frame, this, inode); - if (entry_selfheal) + if (entry_selfheal && priv->entry_self_heal) entry_ret = afr_selfheal_entry (frame, this, inode); or_ret = (data_ret | metadata_ret | entry_ret); |