Glusterfs的rpc模块实现(第四部分)
前面两个小节分别对rpc服务端和客户端的建立流程做了详细的分析,也就是说rpc客户端和服务器端已经能够进行正常的通信了(rpc客户端已经通过connect链接上rpc服务器了),那么这一小节主要根据一个实际的例子来分析一个完整的rpc通信过程。 下面以客户端创建逻辑卷(volume)为例来分析rpc的通信过程,就以下面这个客户端的命令开始: gluster volume create test-volume server3:/exp3 server4:/exp4 先简单看看glusterfs的客户端是怎样开始提交rpc请求的,提交准备过程流程图如下: 从上面的流程图可以看出真正开始提交 rpc 请求调用还是从具体命令的回调函数开始发起的,上面的流程图主要展示的是准备工作,下面从具体命令的回调函数开始分析,这里分析的实例是创建逻辑卷的命令,执行的函数是 cli_cmd_volume_create_cbk ,主要实现代码如下: 1 proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; // 从rpc程序表中选择对应函数 2 3 frame = create_frame (THIS, THIS->ctx->pool); // 创建帧 4 5 ret = cli_cmd_volume_create_parse (words,