diff options
| author | Raghavendra G <raghavendra@gluster.com> | 2010-07-28 06:23:31 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-07-28 05:08:26 -0700 | 
| commit | 40d3ad15856c88d93d16264aa1f6bb55806aafde (patch) | |
| tree | 1290d311c9001e3954176f005b89a2e438321bd9 /rpc/rpc-lib/src/rpc-clnt.h | |
| parent | b8692a3c3cc8e0dab404664e0aeb6ebaea6ab6e5 (diff) | |
changes to rpc
- use mem-pool for requests and saved_frames.
  - preserve the rpc_req structure till rpc invokes program's reply.
    This will enable us to store transport specific data that has to
    last till reply has come (eg., memory regions of chunk lists in
    case of rdma).
  - change signature of rpc_clnt_submit to accept rsphdr_vector and
    rsppayload_vector. The buffers pointed by these vectors will be
    from iobufs and these iobufs are added to an iobref which should
    also be passed as an arguement to rpc_clnt_submit.
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/rpc-lib/src/rpc-clnt.h')
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.h | 36 | 
1 files changed, 29 insertions, 7 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h index efc256cd261..b9d39b3320a 100644 --- a/rpc/rpc-lib/src/rpc-clnt.h +++ b/rpc/rpc-lib/src/rpc-clnt.h @@ -58,10 +58,7 @@ struct saved_frame {          void                    *capital_this;  	void                    *frame;  	struct timeval           saved_at; -	int32_t                  procnum; -        struct rpc_clnt_program *prog; -        fop_cbk_fn_t             cbkfn; -	uint64_t                 callid; +        struct rpc_req          *rpcreq;          rpc_transport_rsp_t      rsp;  }; @@ -116,14 +113,16 @@ struct rpc_req {          uint32_t               xid;          struct iovec           req[2];          int                    reqcnt; +        struct iobref         *req_iobref;          struct iovec           rsp[2];          int                    rspcnt; -        struct iobuf          *rsp_prochdr; -        struct iobuf          *rsp_procpayload; +        struct iobref         *rsp_iobref;          int                    rpc_status;          rpc_auth_data_t        verf;          rpc_clnt_prog_t       *prog;          int                    procnum; +        fop_cbk_fn_t           cbkfn; +        void                  *conn_private;  };  struct rpc_clnt { @@ -132,6 +131,12 @@ struct rpc_clnt {          rpc_clnt_connection_t  conn;          void                  *mydata;          uint64_t               xid; + +        /* Memory pool for rpc_req_t */ +        struct mem_pool       *reqpool; + +        struct mem_pool       *saved_frames_pool; +          glusterfs_ctx_t       *ctx;  }; @@ -149,11 +154,28 @@ struct rpc_clnt * rpc_clnt_init (struct rpc_clnt_config *config,  int rpc_clnt_register_notify (struct rpc_clnt *rpc, rpc_clnt_notify_t fn,                                void *mydata); +/* Some preconditions related to vectors holding responses. + * @rsphdr: should contain pointer to buffer which can hold response header + *          and length of the program header. In case of procedures whose + *          respnose size is not bounded (eg., glusterfs lookup), the length + *          should be equal to size of buffer. + * @rsp_payload: should contain pointer and length of the bu + * + * 1. Both @rsp_hdr and @rsp_payload are optional. + * 2. The user of rpc_clnt_submit, if wants response hdr and payload in its own + *    buffers, then it has to populate @rsphdr and @rsp_payload. + * 3. when @rsp_payload is not NULL, @rsphdr should + *    also be filled with pointer to buffer to hold header and length + *    of the header. + */ +   int rpc_clnt_submit (struct rpc_clnt *rpc, rpc_clnt_prog_t *prog,                       int procnum, fop_cbk_fn_t cbkfn,                       struct iovec *proghdr, int proghdrcount,                       struct iovec *progpayload, int progpayloadcount, -                     struct iobref *iobref, void *frame); +                     struct iobref *iobref, void *frame, struct iovec *rsphdr, +                     int rsphdr_count, struct iovec *rsp_payload, +                     int rsp_payload_count, struct iobref *rsp_iobref);  void rpc_clnt_destroy (struct rpc_clnt *rpc);  | 
