8 请求处理
针对客户端的一次请求,ZooKeeper处理如下
8.1 会话创建请求
会话创建请求中服务端的流程图:
分为请求接收、会话创建、预处理、事务处理、事务应用、会话响应六个环节
8.1.1 请求接收
1.IO层接收来自客户端的请求
2.判断是否是客户端”会话创建“请求
3.反序列化ConnectRequest请求
4.判断是否是ReadOnly客户端
5.检查客户端ZXID
6.协商sessionTimeout
7.判断是否需要重新创建会话
8.1.2 会话创建
8.为客户端生成sessionID(4.2中有算法解析)
9.注册会话
10.激活会话
11.生成会话密码及其算法
8.1.3 预处理
12.将请求交给ZooKeeper的PrepRequestProcessor处理器进行处理
13.创建请求事务头:
14.创建请求事务体
15.注册与激活会话
8.1.4 事务处理
16.将请求交给ProposalRequestProcessor处理器
请求事务处理的三个流程如下图:
8.1.5 事务应用
17.交付给FinalRequestProcessor处理器
18.事务应用
19.将事务请求放入队列:commitProposal
8.1.6 会话响应
20.统计处理
21.创建响应ConnectResponse
22.序列化ConnectResponse
23.IO层发送响应给客户端
8.2 SetData请求
服务器对于SetData请求的处理分为四步:请求预处理、事务处理、事务应用、请求响应
流程图:
大部分步骤与会话创建请求相同
8.3 事务请求转发
8.4 GetData请求
分为三个步骤:请求预处理、非事务处理、请求响应