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*/ |