diff options
| -rw-r--r-- | doc/release-notes/3.4.0.md | 13 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handshake.c | 24 | 
2 files changed, 9 insertions, 28 deletions
diff --git a/doc/release-notes/3.4.0.md b/doc/release-notes/3.4.0.md index 15aff92fadb..b906e6a94c0 100644 --- a/doc/release-notes/3.4.0.md +++ b/doc/release-notes/3.4.0.md @@ -165,16 +165,3 @@ More details can be found [here]  - For Block Device translator based volumes open-behind translator at the  client side needs to be disabled. - -- More information on this can be found in this mailing list -  [post](http://www.gluster.org/pipermail/gluster-users/2013-July/036750.html)   -  A freshly installed peer cannot be probed into a freshly upgraded cluster. -  This is a limitation brought about by the introduction of op-versions. -  There are two ways to workaround this issue, -    * enable any new feature (for eg. open-behind) on a volume in the cluster, -      and then perform the probe.   -  Or, if you don't want to enable any new features   -    * delete the 'operating-version' line from /var/lib/glusterd/glusterd.info -      on the newly installed peer and restart glusterd on the peer.   -      If the file doesn't exist (because of lazy uuid generation), try to probe -      the peer from the cluster (which will fail) to get the file created.   diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index 9124c46ee21..faf05b4e272 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handshake.c +++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c @@ -408,12 +408,16 @@ gd_validate_cluster_op_version (xlator_t *this, int cluster_op_version,                  goto out;          } -        if (cluster_op_version < conf->op_version) { +        /* The peer can only reduce its op-version when it doesn't have any +         * volumes. Reducing op-version when it already contains volumes can +         * lead to inconsistencies in the cluster +         */ +        if ((cluster_op_version < conf->op_version) && +            !list_empty (&conf->volumes)) {                  gf_log (this->name, GF_LOG_ERROR, -                        "operating version %d is less than the currently " -                        "running version (%d) on the machine (as per peer " -                        "request from %s)", cluster_op_version, -                        conf->op_version, peerid); +                        "cannot reduce operating version to %d from current " +                        "version %d as volumes exist (as per peer request from " +                        "%s)", cluster_op_version, conf->op_version, peerid);                  goto out;          } @@ -734,16 +738,6 @@ gd_validate_peer_op_version (xlator_t *this, glusterd_peerinfo_t *peerinfo,                  goto out;          } -        /* If peer is already operating at a higher op_version reject it. -         * Cluster cannot be moved to higher op_version to accomodate a peer. -         */ -        if (peer_op_version > conf->op_version) { -                ret = gf_asprintf (errstr, "Peer %s is already at a higher " -                                   "op-version", peerinfo->hostname); -                ret = -1; -                goto out; -        } -          ret = 0;  out:          gf_log (this->name , GF_LOG_DEBUG, "Peer %s %s", peerinfo->hostname,  | 
