diff options
author | Raghavendra G <raghavendra@gluster.com> | 2010-08-17 23:58:37 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-08-18 00:37:08 -0700 |
commit | 0b890833c8cba9bac71877e528d810eba91dd1e6 (patch) | |
tree | e180e57fbc059108bf58e08b337b38f4bcbe3d38 /rpc | |
parent | 4e01a54eaa6da1bd6817d62dcc51a75e22699e2b (diff) |
rpc: add rpc_req structure to request_info structure, used by transport layer to get corresponding request to reply received.
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 875 (Implement a new protocol to provide proper backward/forward compatibility)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=875
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 21 | ||||
-rw-r--r-- | rpc/rpc-lib/src/rpc-transport.h | 4 |
2 files changed, 11 insertions, 14 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index bac8b0246..eac9f8750 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -26,6 +26,7 @@ #define RPC_CLNT_DEFAULT_REQUEST_COUNT 4096 #include "rpc-clnt.h" +#include "byte-order.h" #include "xdr-rpcclnt.h" #include "rpc-transport.h" #include "protocol-common.h" @@ -427,6 +428,7 @@ rpc_clnt_fill_request_info (struct rpc_clnt *clnt, rpc_request_info_t *info) info->prognum = saved_frame.rpcreq->prog->prognum; info->procnum = saved_frame.rpcreq->procnum; info->progver = saved_frame.rpcreq->prog->progver; + info->rpc_req = saved_frame.rpcreq; info->rsp = saved_frame.rsp; ret = 0; @@ -657,33 +659,24 @@ rpc_clnt_handle_reply (struct rpc_clnt *clnt, rpc_transport_pollin_t *pollin) { rpc_clnt_connection_t *conn = NULL; struct saved_frame *saved_frame = NULL; - rpc_request_info_t *request_info = NULL; int ret = -1; struct rpc_req *req = NULL; + uint32_t xid = 0; conn = &clnt->conn; - request_info = pollin->private; - - saved_frame = lookup_frame (conn, (int64_t)request_info->xid); + xid = ntoh32 (*((uint32_t *)pollin->vector[0].iov_base)); + saved_frame = lookup_frame (conn, xid); if (saved_frame == NULL) { gf_log ("rpc-clnt", GF_LOG_CRITICAL, "cannot lookup the " - "saved frame for reply with xid (%d), " - "prog-version (%d), prog-num (%d)," - "procnum (%d)", request_info->xid, - request_info->progver, request_info->prognum, - request_info->procnum); + "saved frame for reply with xid (%d)", xid); goto out; } req = saved_frame->rpcreq; if (req == NULL) { gf_log ("rpc-clnt", GF_LOG_CRITICAL, - "saved_frame for reply with xid (%d), " - "prog-version (%d), prog-num (%d), procnum (%d)" - "does not contain rpc-req", request_info->xid, - request_info->progver, request_info->prognum, - request_info->procnum); + "saved_frame for reply with xid (%d)", xid); goto out; } diff --git a/rpc/rpc-lib/src/rpc-transport.h b/rpc/rpc-lib/src/rpc-transport.h index a6a3441dc..c5b6f382e 100644 --- a/rpc/rpc-lib/src/rpc-transport.h +++ b/rpc/rpc-lib/src/rpc-transport.h @@ -146,11 +146,15 @@ struct rpc_transport_data { }; typedef struct rpc_transport_data rpc_transport_data_t; +/* FIXME: prognum, procnum and progver are already present in + * rpc_request, hence these should be removed from request_info + */ struct rpc_request_info { uint32_t xid; int prognum; int progver; int procnum; + void *rpc_req; /* struct rpc_req */ rpc_transport_rsp_t rsp; }; typedef struct rpc_request_info rpc_request_info_t; |