summaryrefslogtreecommitdiffstats
path: root/heal/src
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2016-12-14 22:48:20 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2016-12-15 07:46:26 -0800
commit209c2d447be874047cb98d86492b03fa807d1832 (patch)
treeec2fef4359e1d4ece0ff01869c41cd748755bb23 /heal/src
parent6f4f3d012ccac3088a58c21844b63fdb54a96cd8 (diff)
glfsheal: Explicitly enable self-heal xlator options
Enable data, metadata and entry self-heal as xlator-options so that glfs-heal.c can heal split-brain files even if they are disabled on the volume via volume set commands. Change-Id: Ic191a1017131db1ded94d97c932079d7bfd79457 BUG: 1234054 Signed-off-by: Ravishankar N <ravishankar@redhat.com> Reviewed-on: http://review.gluster.org/11333 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com> Tested-by: Pranith Kumar Karampuri <pkarampu@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'heal/src')
-rw-r--r--heal/src/glfs-heal.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/heal/src/glfs-heal.c b/heal/src/glfs-heal.c
index 94cb6b0..07fc6ac 100644
--- a/heal/src/glfs-heal.c
+++ b/heal/src/glfs-heal.c
@@ -877,6 +877,31 @@ out:
}
static int
+glfsh_set_heal_options (glfs_t *fs, gf_xl_afr_op_t heal_op)
+{
+ int ret = 0;
+
+ if ((heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) &&
+ (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) &&
+ (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME))
+ return 0;
+ ret = glfs_set_xlator_option (fs, "*-replicate-*", "data-self-heal",
+ "on");
+ if (ret)
+ goto out;
+
+ ret = glfs_set_xlator_option (fs, "*-replicate-*", "metadata-self-heal",
+ "on");
+ if (ret)
+ goto out;
+
+ ret = glfs_set_xlator_option (fs, "*-replicate-*", "entry-self-heal",
+ "on");
+out:
+ return ret;
+}
+
+static int
glfsh_validate_volume (xlator_t *xl, gf_xl_afr_op_t heal_op)
{
xlator_t *heal_xl = NULL;
@@ -1348,6 +1373,13 @@ main (int argc, char **argv)
"%s", strerror (errno));
goto out;
}
+
+ ret = glfsh_set_heal_options (fs, heal_op);
+ if (ret) {
+ printf ("Setting xlator heal options failed, %s\n",
+ strerror(errno));
+ goto out;
+ }
snprintf (logfilepath, sizeof (logfilepath),
DEFAULT_HEAL_LOG_FILE_DIRECTORY"/glfsheal-%s.log", volname);
ret = glfs_set_logging(fs, logfilepath, GF_LOG_INFO);