constants.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package zk
  2. import (
  3. "errors"
  4. )
  5. const (
  6. protocolVersion = 0
  7. DefaultPort = 2181
  8. )
  9. const (
  10. opNotify = 0
  11. opCreate = 1
  12. opDelete = 2
  13. opExists = 3
  14. opGetData = 4
  15. opSetData = 5
  16. opGetAcl = 6
  17. opSetAcl = 7
  18. opGetChildren = 8
  19. opSync = 9
  20. opPing = 11
  21. opGetChildren2 = 12
  22. opCheck = 13
  23. opMulti = 14
  24. opClose = -11
  25. opSetAuth = 100
  26. opSetWatches = 101
  27. // Not in protocol, used internally
  28. opWatcherEvent = -2
  29. )
  30. const (
  31. EventNodeCreated = EventType(1)
  32. EventNodeDeleted = EventType(2)
  33. EventNodeDataChanged = EventType(3)
  34. EventNodeChildrenChanged = EventType(4)
  35. EventSession = EventType(-1)
  36. EventNotWatching = EventType(-2)
  37. )
  38. var (
  39. eventNames = map[EventType]string{
  40. EventNodeCreated: "EventNodeCreated",
  41. EventNodeDeleted: "EventNodeDeleted",
  42. EventNodeDataChanged: "EventNodeDataChanged",
  43. EventNodeChildrenChanged: "EventNodeChildrenChanged",
  44. EventSession: "EventSession",
  45. EventNotWatching: "EventNotWatching",
  46. }
  47. )
  48. const (
  49. StateUnknown = State(-1)
  50. StateDisconnected = State(0)
  51. StateConnecting = State(1)
  52. StateSyncConnected = State(3)
  53. StateAuthFailed = State(4)
  54. StateConnectedReadOnly = State(5)
  55. StateSaslAuthenticated = State(6)
  56. StateExpired = State(-112)
  57. // StateAuthFailed = State(-113)
  58. StateConnected = State(100)
  59. StateHasSession = State(101)
  60. )
  61. const (
  62. FlagEphemeral = 1
  63. FlagSequence = 2
  64. )
  65. var (
  66. stateNames = map[State]string{
  67. StateUnknown: "StateUnknown",
  68. StateDisconnected: "StateDisconnected",
  69. StateSyncConnected: "StateSyncConnected",
  70. StateConnectedReadOnly: "StateConnectedReadOnly",
  71. StateSaslAuthenticated: "StateSaslAuthenticated",
  72. StateExpired: "StateExpired",
  73. StateAuthFailed: "StateAuthFailed",
  74. StateConnecting: "StateConnecting",
  75. StateConnected: "StateConnected",
  76. StateHasSession: "StateHasSession",
  77. }
  78. )
  79. type State int32
  80. func (s State) String() string {
  81. if name := stateNames[s]; name != "" {
  82. return name
  83. }
  84. return "Unknown"
  85. }
  86. type ErrCode int32
  87. var (
  88. ErrConnectionClosed = errors.New("zk: connection closed")
  89. ErrUnknown = errors.New("zk: unknown error")
  90. ErrAPIError = errors.New("zk: api error")
  91. ErrNoNode = errors.New("zk: node does not exist")
  92. ErrNoAuth = errors.New("zk: not authenticated")
  93. ErrBadVersion = errors.New("zk: version conflict")
  94. ErrNoChildrenForEphemerals = errors.New("zk: ephemeral nodes may not have children")
  95. ErrNodeExists = errors.New("zk: node already exists")
  96. ErrNotEmpty = errors.New("zk: node has children")
  97. ErrSessionExpired = errors.New("zk: session has been expired by the server")
  98. ErrInvalidACL = errors.New("zk: invalid ACL specified")
  99. ErrAuthFailed = errors.New("zk: client authentication failed")
  100. ErrClosing = errors.New("zk: zookeeper is closing")
  101. ErrNothing = errors.New("zk: no server responsees to process")
  102. ErrSessionMoved = errors.New("zk: session moved to another server, so operation is ignored")
  103. // ErrInvalidCallback = errors.New("zk: invalid callback specified")
  104. errCodeToError = map[ErrCode]error{
  105. 0: nil,
  106. errAPIError: ErrAPIError,
  107. errNoNode: ErrNoNode,
  108. errNoAuth: ErrNoAuth,
  109. errBadVersion: ErrBadVersion,
  110. errNoChildrenForEphemerals: ErrNoChildrenForEphemerals,
  111. errNodeExists: ErrNodeExists,
  112. errNotEmpty: ErrNotEmpty,
  113. errSessionExpired: ErrSessionExpired,
  114. // errInvalidCallback: ErrInvalidCallback,
  115. errInvalidAcl: ErrInvalidACL,
  116. errAuthFailed: ErrAuthFailed,
  117. errClosing: ErrClosing,
  118. errNothing: ErrNothing,
  119. errSessionMoved: ErrSessionMoved,
  120. }
  121. )
  122. func (e ErrCode) toError() error {
  123. if err, ok := errCodeToError[e]; ok {
  124. return err
  125. }
  126. return ErrUnknown
  127. }
  128. const (
  129. errOk = 0
  130. // System and server-side errors
  131. errSystemError = -1
  132. errRuntimeInconsistency = -2
  133. errDataInconsistency = -3
  134. errConnectionLoss = -4
  135. errMarshallingError = -5
  136. errUnimplemented = -6
  137. errOperationTimeout = -7
  138. errBadArguments = -8
  139. errInvalidState = -9
  140. // API errors
  141. errAPIError = ErrCode(-100)
  142. errNoNode = ErrCode(-101) // *
  143. errNoAuth = ErrCode(-102)
  144. errBadVersion = ErrCode(-103) // *
  145. errNoChildrenForEphemerals = ErrCode(-108)
  146. errNodeExists = ErrCode(-110) // *
  147. errNotEmpty = ErrCode(-111)
  148. errSessionExpired = ErrCode(-112)
  149. errInvalidCallback = ErrCode(-113)
  150. errInvalidAcl = ErrCode(-114)
  151. errAuthFailed = ErrCode(-115)
  152. errClosing = ErrCode(-116)
  153. errNothing = ErrCode(-117)
  154. errSessionMoved = ErrCode(-118)
  155. )
  156. // Constants for ACL permissions
  157. const (
  158. PermRead = 1 << iota
  159. PermWrite
  160. PermCreate
  161. PermDelete
  162. PermAdmin
  163. PermAll = 0x1f
  164. )
  165. var (
  166. emptyPassword = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  167. opNames = map[int32]string{
  168. opNotify: "notify",
  169. opCreate: "create",
  170. opDelete: "delete",
  171. opExists: "exists",
  172. opGetData: "getData",
  173. opSetData: "setData",
  174. opGetAcl: "getACL",
  175. opSetAcl: "setACL",
  176. opGetChildren: "getChildren",
  177. opSync: "sync",
  178. opPing: "ping",
  179. opGetChildren2: "getChildren2",
  180. opCheck: "check",
  181. opMulti: "multi",
  182. opClose: "close",
  183. opSetAuth: "setAuth",
  184. opSetWatches: "setWatches",
  185. opWatcherEvent: "watcherEvent",
  186. }
  187. )
  188. type EventType int32
  189. func (t EventType) String() string {
  190. if name := eventNames[t]; name != "" {
  191. return name
  192. }
  193. return "Unknown"
  194. }
  195. // Mode is used to build custom server modes (leader|follower|standalone).
  196. type Mode uint8
  197. func (m Mode) String() string {
  198. if name := modeNames[m]; name != "" {
  199. return name
  200. }
  201. return "unknown"
  202. }
  203. const (
  204. ModeUnknown Mode = iota
  205. ModeLeader Mode = iota
  206. ModeFollower Mode = iota
  207. ModeStandalone Mode = iota
  208. )
  209. var (
  210. modeNames = map[Mode]string{
  211. ModeLeader: "leader",
  212. ModeFollower: "follower",
  213. ModeStandalone: "standalone",
  214. }
  215. )