summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/globals.h2
-rwxr-xr-xtests/bugs/glusterfs/bug-853690.t1
-rwxr-xr-xtests/bugs/glusterfs/bug-892730.t1
-rw-r--r--xlators/cluster/afr/src/afr.c94
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c2
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*/