summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/afr')
-rw-r--r--xlators/cluster/afr/src/afr-common.c4
-rw-r--r--xlators/cluster/afr/src/afr-self-heald.c3
-rw-r--r--xlators/cluster/afr/src/afr.c8
-rw-r--r--xlators/cluster/afr/src/afr.h1
4 files changed, 11 insertions, 5 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index d241825940f..e82eecbf03c 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -3555,10 +3555,8 @@ afr_notify (xlator_t *this, int32_t event,
ret = 0;
if (propagate)
ret = default_notify (this, event, data);
- if (call_psh && priv->shd.enabled) {
- gf_log (this->name, GF_LOG_DEBUG, "start crawl: %d", up_child);
+ if (call_psh && priv->shd.iamshd)
afr_do_poll_self_heal ((void*) (long) up_child);
- }
out:
return ret;
diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c
index c8fb4d38ee6..34376b1853d 100644
--- a/xlators/cluster/afr/src/afr-self-heald.c
+++ b/xlators/cluster/afr/src/afr-self-heald.c
@@ -486,7 +486,8 @@ afr_do_poll_self_heal (void *data)
priv = this->private;
shd = &priv->shd;
- _do_self_heal_on_subvol (this, child, INDEX);
+ if (shd->enabled)
+ _do_self_heal_on_subvol (this, child, INDEX);
if (shd->pos[child] == AFR_POS_REMOTE)
goto out;
timeout.tv_sec = AFR_POLL_TIMEOUT;
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c
index da0e56ffc84..ce82aede839 100644
--- a/xlators/cluster/afr/src/afr.c
+++ b/xlators/cluster/afr/src/afr.c
@@ -276,6 +276,8 @@ init (xlator_t *this)
GF_OPTION_INIT ("self-heal-daemon", priv->shd.enabled, bool, out);
+ GF_OPTION_INIT ("iam-self-heal-daemon", priv->shd.iamshd, bool, out);
+
GF_OPTION_INIT ("data-change-log", priv->data_change_log, bool, out);
GF_OPTION_INIT ("metadata-change-log", priv->metadata_change_log, bool,
@@ -365,7 +367,7 @@ init (xlator_t *this)
priv->first_lookup = 1;
priv->root_inode = NULL;
- if (!priv->shd.enabled) {
+ if (!priv->shd.iamshd) {
ret = 0;
goto out;
}
@@ -574,6 +576,10 @@ struct volume_options options[] = {
.type = GF_OPTION_TYPE_BOOL,
.default_value = "off",
},
+ { .key = {"iam-self-heal-daemon"},
+ .type = GF_OPTION_TYPE_BOOL,
+ .default_value = "off",
+ },
{ .key = {"quorum-type"},
.type = GF_OPTION_TYPE_STR,
.value = { "none", "auto", "fixed", "" },
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h
index a9162b8adc0..fc77b806e2f 100644
--- a/xlators/cluster/afr/src/afr.h
+++ b/xlators/cluster/afr/src/afr.h
@@ -96,6 +96,7 @@ typedef enum {
typedef struct afr_self_heald_ {
gf_boolean_t enabled;
+ gf_boolean_t iamshd;
afr_crawl_type_t *pending;
gf_boolean_t *inprogress;
afr_child_pos_t *pos;