diff options
author | Raghavendra Bhat <raghavendrabhat@gluster.com> | 2010-09-02 05:03:26 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-02 05:17:15 -0700 |
commit | 132d951d4392c4f0fd9aa012626b861b49ccaa8d (patch) | |
tree | d6cfa0a5b87e685b356fdf7d055ce7fa8f9589a5 | |
parent | 3e5c243396b6acf1a76d66d80c798466dc5caa55 (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.c | 14 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 7 |
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. // |