constants.go 6.2 KB

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