summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendrabhat@gluster.com>2010-09-02 05:03:26 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-02 05:17:15 -0700
commit132d951d4392c4f0fd9aa012626b861b49ccaa8d (patch)
treed6cfa0a5b87e685b356fdf7d055ce7fa8f9589a5
parent3e5c243396b6acf1a76d66d80c798466dc5caa55 (diff)
update the volume information first before checksum
Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1504 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1504
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c14
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-store.c4
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c7
3 files changed, 16 insertions, 9 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index b1793937450..330d8e6d2b2 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -1196,15 +1196,16 @@ glusterd_op_add_brick (gd1_mgmt_stage_op_req *req)
volinfo->version++;
- ret = glusterd_volume_compute_cksum (volinfo);
- if (ret)
- goto out;
ret = glusterd_store_update_volume (volinfo);
if (ret)
goto out;
+ ret = glusterd_volume_compute_cksum (volinfo);
+ if (ret)
+ goto out;
+
if (GLUSTERD_STATUS_STARTED == volinfo->status)
ret = glusterd_check_generate_start_nfs (volinfo);
@@ -2175,15 +2176,16 @@ glusterd_op_remove_brick (gd1_mgmt_stage_op_req *req)
volinfo->version++;
- ret = glusterd_volume_compute_cksum (volinfo);
- if (ret)
- goto out;
ret = glusterd_store_update_volume (volinfo);
if (ret)
goto out;
+ ret = glusterd_volume_compute_cksum (volinfo);
+ if (ret)
+ goto out;
+
if (GLUSTERD_STATUS_STARTED == volinfo->status)
ret = glusterd_check_generate_start_nfs (volinfo);
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c
index f3ef79cea85..1e464eae961 100644
--- a/xlators/mgmt/glusterd/src/glusterd-store.c
+++ b/xlators/mgmt/glusterd/src/glusterd-store.c
@@ -1058,11 +1058,13 @@ glusterd_store_update_volume (glusterd_volinfo_t *volinfo)
if (ret)
goto out;
- snprintf (buf, sizeof (buf), "%d", volinfo->status);
+ snprintf (buf, sizeof (buf), "%d", volinfo->version);
ret = glusterd_store_save_value (volinfo->shandle,
GLUSTERD_STORE_KEY_VOL_VERSION, buf);
if (ret)
goto out;
+
+
list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
ret = glusterd_store_create_brick (volinfo, brickinfo);
if (ret)
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 6bcbf8c0e46..8ae2b03924c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -1231,7 +1231,7 @@ glusterd_compare_friend_volume (dict_t *vols, int32_t count, int32_t *status)
if (ret)
goto out;
- if (version != volinfo->version) {
+ if (version > volinfo->version) {
//Mismatch detected
ret = 0;
gf_log ("", GF_LOG_ERROR, "Version of volume %s differ."
@@ -1239,7 +1239,10 @@ glusterd_compare_friend_volume (dict_t *vols, int32_t count, int32_t *status)
volinfo->volname, volinfo->version, version);
*status = GLUSTERD_VOL_COMP_UPDATE_REQ;
goto out;
- }
+ } else if (version < volinfo->version) {
+ *status = GLUSTERD_VOL_COMP_SCS;
+ goto out;
+ }
//Now, versions are same, compare cksums.
//