diff options
| author | Ravishankar N <ravishankar@redhat.com> | 2016-12-14 22:48:20 +0530 | 
|---|---|---|
| committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2016-12-15 17:34:04 -0800 | 
| commit | a29e54ecba610b0339bf58466db4d843b6b759a5 (patch) | |
| tree | a145b8e5c2fadfe8518b09d8aa6816b94f4d0497 | |
| parent | fb937945ab344e7ba63fb04aaa9a0c71ce80f261 (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.
> 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>
(cherry picked from commit 209c2d447be874047cb98d86492b03fa807d1832)
Change-Id: Ic191a1017131db1ded94d97c932079d7bfd79457
BUG: 1405126
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/16143
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
| -rw-r--r-- | heal/src/glfs-heal.c | 32 | ||||
| -rw-r--r-- | tests/basic/afr/split-brain-healing.t | 3 | 
2 files changed, 35 insertions, 0 deletions
diff --git a/heal/src/glfs-heal.c b/heal/src/glfs-heal.c index 94cb6b04c02..07fc6acbf81 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); diff --git a/tests/basic/afr/split-brain-healing.t b/tests/basic/afr/split-brain-healing.t index 302a3e6144b..c66bb5d44df 100644 --- a/tests/basic/afr/split-brain-healing.t +++ b/tests/basic/afr/split-brain-healing.t @@ -31,6 +31,9 @@ TEST glusterd  TEST pidof glusterd  TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1,2,3,4}  TEST $CLI volume set $V0 cluster.self-heal-daemon off +TEST $CLI volume set $V0 cluster.data-self-heal off +TEST $CLI volume set $V0 cluster.metadata-self-heal off +TEST $CLI volume set $V0 cluster.entry-self-heal off  TEST $CLI volume start $V0  TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0  | 
