苍天呐.jpg
    全网搜了好一会,没找到满意的 ZooKeeper 的客户端会话状态图,我当场裂开。无奈之下,只好掏出我的 processon 来一发以示敬意。


    ZooKeeper 的客户端会话状态分为以下几种:

    • CONNECTING ,连接中
    • ASSOCIATING ,这个状态目前没有地方使用(通过 IDEA->find usage 发现没有地方使用这个枚举常量)
    • CONNECTED ,已连接并且建立会话
    • CONNECTEDREADONLY ,仅当服务器变为 read only 时且客户端支持只读连接,此时连接为只读连接
    • CLOSED ,关闭
    • AUTH_FAILED ,认证失败,副作用等同于 CLOSED 。因为认证失败后, EventThreadSendThread 都会相继退出循环,变相宣告 ZooKeeper 的结束。
    • NOT_CONNECTED ,在第一次创建 ZooKeeper 对象时,就是 NOT_CONNECED

    下面是会话状态变更图:
    点击查看【processon】

    • NOT_CONNECTED -> CONNECTING
      • SendThread 初始化时,会将会话状态设置为 CONNECTING
      • 当调用 startConnect() 开始构建TCP连接时,会将会话状态设置为 CONNECTING
    • CONNECTING -> CONNECTED
      • 当收到 ConnectRequest 时,如果 isRO=false ,则将会话状态设置为 CONNECTED
    • CONNECTING -> CONNECTEDREADONLY
      • 当收到 ConnectRequest 时,如果 isRO=true ,则将会话状态设置为 CONNECTEDREADONLY
    • CONNECTING -> CLOSED
      • 当收到 ConnectRequest 时,如果协商的会话过期时间小于等于0,则将会话状态设置为 CLOSED
    • CONNECTING -> AUTH_FAILED
      • 执行 SASL 认证失败
      • 启用 SASL 且配置错误
    • CONNECTED -> AUTH_FAILED
      • 执行 addAuth 认证失败
    • ( CONNECTINGCONNECTEDCONNECTREADONLY )-> CLOSE
      • 主动调用 close()