diff options
author | Pavan Sondur <pavan@gluster.com> | 2010-09-10 07:32:29 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-10 06:14:02 -0700 |
commit | 6858155d8b0681f9caea5295a2de63252ff9631c (patch) | |
tree | 73b98f8c318cfa4a22c3b71960a4004a1c81bd2a /xlators/mgmt/glusterd/src/glusterd3_1-mops.c | |
parent | 5bec5e4fd6b0cae5e7a5e4d0a72090f4d613b94e (diff) |
mgmt/glusterd: add a dict to glusterd commit response.
Signed-off-by: Pavan Vilas Sondur <pavan@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 1582 (replace-brick data missing added brick)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1582
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd3_1-mops.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd3_1-mops.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c index 9d9dc385a..c9c1493ff 100644 --- a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c +++ b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c @@ -521,6 +521,48 @@ out: return ret; } +static int32_t +glusterd_rb_use_rsp_dict (dict_t *rsp_dict) +{ + int32_t src_port = 0; + int ret = 0; + dict_t *ctx = NULL; + + GF_ASSERT (rsp_dict); + + if (rsp_dict) { + ret = dict_get_int32 (rsp_dict, "src-brick-port", &src_port); + if (ret) { + gf_log ("", GF_LOG_DEBUG, + "src-brick-port not present"); + ret = 0; + goto out; + } + + if (src_port) { + ctx = glusterd_op_get_ctx (GD_OP_REPLACE_BRICK); + if (!ctx) { + gf_log ("", GF_LOG_ERROR, + "Operation Context is not present"); + ret = 0; + goto out; + } + + ret = dict_set_int32 (ctx, "src-brick-port", + src_port); + if (ret) { + gf_log ("", GF_LOG_DEBUG, + "Could not set src-brick"); + goto out; + } + } + } + +out: + return ret; + +} + int32_t glusterd3_1_commit_op_cbk (struct rpc_req *req, struct iovec *iov, int count, void *myframe) @@ -531,6 +573,7 @@ glusterd3_1_commit_op_cbk (struct rpc_req *req, struct iovec *iov, glusterd_op_sm_event_type_t event_type = GD_OP_EVENT_NONE; glusterd_peerinfo_t *peerinfo = NULL; char str[50] = {0,}; + dict_t *dict = NULL; GF_ASSERT (req); @@ -550,6 +593,21 @@ glusterd3_1_commit_op_cbk (struct rpc_req *req, struct iovec *iov, } uuid_unparse (rsp.uuid, str); + if (rsp.dict.dict_len) { + /* Unserialize the dictionary */ + dict = dict_new (); + + ret = dict_unserialize (rsp.dict.dict_val, + rsp.dict.dict_len, + &dict); + if (ret < 0) { + gf_log ("glusterd", GF_LOG_ERROR, + "failed to " + "unserialize rsp-buffer to dictionary"); + goto out; + } + } + op_ret = rsp.op_ret; gf_log ("glusterd", GF_LOG_NORMAL, @@ -566,6 +624,11 @@ glusterd3_1_commit_op_cbk (struct rpc_req *req, struct iovec *iov, event_type = GD_OP_EVENT_RCVD_RJT; opinfo.op_ret = op_ret; } else { + if (rsp.op == GD_OP_REPLACE_BRICK) { + ret = glusterd_rb_use_rsp_dict (dict); + if (ret) + goto out; + } event_type = GD_OP_EVENT_RCVD_ACC; } @@ -580,6 +643,8 @@ glusterd3_1_commit_op_cbk (struct rpc_req *req, struct iovec *iov, out: + if (dict) + dict_unref (dict); return ret; } |