diff options
| -rw-r--r-- | libglusterfs/src/globals.h | 2 | ||||
| -rwxr-xr-x | tests/bugs/glusterfs/bug-853690.t | 1 | ||||
| -rwxr-xr-x | tests/bugs/glusterfs/bug-892730.t | 1 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.c | 94 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 2 | 
5 files changed, 66 insertions, 34 deletions
diff --git a/libglusterfs/src/globals.h b/libglusterfs/src/globals.h index f6fc8de16de..25bd8dd2737 100644 --- a/libglusterfs/src/globals.h +++ b/libglusterfs/src/globals.h @@ -68,6 +68,8 @@  #define GD_OP_VERSION_3_8_0    30800 /* Op-version for GlusterFS 3.8.0 */ +#define GD_OP_VERSION_3_9_0    30900 /* Op-version for GlusterFS 3.9.0 */ +  #define GD_OP_VERSION_4_0_0    40000 /* Op-version for GlusterFS 4.0.0 */  #define GD_OP_VER_PERSISTENT_AFR_XATTRS GD_OP_VERSION_3_6_0 diff --git a/tests/bugs/glusterfs/bug-853690.t b/tests/bugs/glusterfs/bug-853690.t index 7880b64488f..59facfcddb0 100755 --- a/tests/bugs/glusterfs/bug-853690.t +++ b/tests/bugs/glusterfs/bug-853690.t @@ -53,7 +53,6 @@ end-volume  volume test-replicate-0      type cluster/replicate -    option afr-pending-xattr test-locks-0,test-locks-1      option background-self-heal-count 0      subvolumes test-locks-0 test-locks-1  end-volume diff --git a/tests/bugs/glusterfs/bug-892730.t b/tests/bugs/glusterfs/bug-892730.t index 1fa0ff3bfb4..a76961134c5 100755 --- a/tests/bugs/glusterfs/bug-892730.t +++ b/tests/bugs/glusterfs/bug-892730.t @@ -53,7 +53,6 @@ end-volume  volume test-replicate-0      type cluster/replicate -    option afr-pending-xattr test-locks-0,test-locks-1      option background-self-heal-count 0      subvolumes test-locks-0 test-locks-1  end-volume diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 15e4ec41891..da62564e93a 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -274,6 +274,67 @@ static const char *favorite_child_warning_str = "You have specified subvolume '%          "WILL BE LOST."; +static int +afr_pending_xattrs_init (afr_private_t *priv, xlator_t *this) +{ +        int ret = -1; +        int i = 0; +        char *ptr = NULL; +        char *ptr1 = NULL; +        char *xattrs_list = NULL; +        xlator_list_t *trav = NULL; + +        trav = this->children; + +        GF_OPTION_INIT ("afr-pending-xattr", xattrs_list, str, out); +        priv->pending_key = GF_CALLOC (sizeof (*priv->pending_key), +                                       priv->child_count, gf_afr_mt_char); +        if (!priv->pending_key) { +                ret = -ENOMEM; +                goto out; +        } +        if (!xattrs_list) { +                gf_msg (this->name, GF_LOG_WARNING, 0, AFR_MSG_NO_CHANGELOG, +                        "Unable to fetch afr-pending-xattr option from volfile." +                        " Falling back to using client translator names. "); + +                while (i < priv->child_count) { +                        ret = gf_asprintf (&priv->pending_key[i], "%s.%s", +                                           AFR_XATTR_PREFIX, +                                           trav->xlator->name); +                        if (ret == -1) { +                                ret = -ENOMEM; +                                goto out; +                        } +                        trav = trav->next; +                        i++; +                } +                ret = 0; +                goto out; +        } + +        ptr = ptr1 = gf_strdup (xattrs_list); +        if (!ptr) { +                ret = -ENOMEM; +                goto out; +        } +        for (i = 0, ptr = strtok (ptr, ","); ptr; ptr = strtok (NULL, ",")) { +                ret = gf_asprintf (&priv->pending_key[i], "%s.%s", +                                   AFR_XATTR_PREFIX, ptr); +                if (ret == -1) { +                        ret = -ENOMEM; +                        goto out; +                } +                i++; +        } +        ret = 0; + +out: +        GF_FREE (ptr1); +        return ret; + +} +  int32_t  init (xlator_t *this)  { @@ -287,8 +348,6 @@ init (xlator_t *this)          int            read_subvol_index = -1;          xlator_t      *fav_child   = NULL;          char          *qtype       = NULL; -        char          *xattrs_list = NULL; -        char          *ptr         = NULL;          char          *fav_child_policy = NULL;          if (!this->children) { @@ -466,35 +525,9 @@ init (xlator_t *this)                  goto out;          } -        GF_OPTION_INIT ("afr-pending-xattr", xattrs_list, str, out); -        priv->pending_key = GF_CALLOC (sizeof (*priv->pending_key), -                                       child_count, -                                       gf_afr_mt_char); -        if (!priv->pending_key) { -                ret = -ENOMEM; -                goto out; -        } -        if (!xattrs_list) { -                ret = -EINVAL; -                gf_msg (this->name, GF_LOG_ERROR, -ret, AFR_MSG_NO_CHANGELOG, -                        "Unable to fetch afr pending changelogs. Is op-version" -                        " >= 30707?"); +        ret = afr_pending_xattrs_init (priv, this); +        if (ret)                  goto out; -        } -        ptr = gf_strdup (xattrs_list); -        if (!ptr) { -                ret = -ENOMEM; -                goto out; -        } -        for (i = 0, ptr = strtok (ptr, ","); ptr; ptr = strtok (NULL, ",")) { -                ret = gf_asprintf (&priv->pending_key[i], "%s.%s", -                                   AFR_XATTR_PREFIX, ptr); -                if (ret  == -1) { -                        ret = -ENOMEM; -                        goto out; -                } -                i++; -        }          trav = this->children;          i = 0; @@ -535,7 +568,6 @@ init (xlator_t *this)          ret = 0;  out: -        GF_FREE (ptr);          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 52bb75fd664..a56de2dd858 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -3490,7 +3490,7 @@ set_afr_pending_xattrs_option (volgen_graph_t *graph,          conf = this->private;          GF_VALIDATE_OR_GOTO (this->name, conf, out); -        if (conf->op_version < GD_OP_VERSION_3_7_7) +        if (conf->op_version < GD_OP_VERSION_3_9_0)                  return ret;          /* (brick_id x rep.count) + (rep.count-1 commas) + NULL*/  | 
