glusterd: Set op-version on startup based on install status

If the current installation of glusterfs doesn't have a stored
op-version and is,
a. a fresh install, then set op-version to maximum
b. an upgrade from release which didn't have op-version support, set it
to minimum.

The install status is detected using the peer-uuid.
If both peer-uuid and op-version are not present in the store, the
installation is fresh.
If peer-uuid is present, but op-version is absent in the store, the
installation has been upgraded from a version which didn't support
op-versions.

By setting the initial op-version as above, we can ensure that
a. features are not enabled accidentally during upgrades
b. a fresh install starts with all possible features enabled.

Change-Id: I52aed9ebeb5d3823c81e65f739a78a924ecf7e12
BUG: 954256
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/4867
Reviewed-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
Kaushal M 2013-04-22 12:17:59 +05:30 committed by Vijay Bellur
parent 1e62ff42df
commit fa227c0834

View File

@ -1768,11 +1768,29 @@ glusterd_restore_op_version (xlator_t *this)
goto out;
}
gf_log (this->name, GF_LOG_INFO, "op-version not found in store, "
"setting it to minimum op-version : %d", GD_OP_VERSION_MIN);
/* If op-version is missing, set it to GD_OP_VERSION_MIN */
conf->op_version = GD_OP_VERSION_MIN;
/* op-version can be missing from the store file in 2 cases,
* 1. This is a new install of glusterfs
* 2. This is an upgrade of glusterfs from a version without op-version
* to a version with op-version (eg. 3.3 -> 3.4)
*
* Detection of a new install or an upgrade from an older install can be
* done by checking for the presence of the its peer-id in the store
* file. If peer-id is present, the installation is an upgrade else, it
* is a new install.
*
* For case 1, set op-version to GD_OP_VERSION_MAX.
* For case 2, set op-version to GD_OP_VERSION_MIN.
*/
ret = glusterd_retrieve_uuid();
if (ret) {
gf_log (this->name, GF_LOG_INFO, "Detected new install. Setting"
" op-version to maximum : %d", GD_OP_VERSION_MAX);
conf->op_version = GD_OP_VERSION_MAX;
} else {
gf_log (this->name, GF_LOG_INFO, "Upgrade detected. Setting"
" op-version to minimum : %d", GD_OP_VERSION_MIN);
conf->op_version = GD_OP_VERSION_MIN;
}
ret = 0;
out:
return ret;