constants.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package zk
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. const (
  7. protocolVersion = 0
  8. DefaultPort = 2181
  9. )
  10. const (
  11. opNotify = 0
  12. opCreate = 1
  13. opDelete = 2
  14. opExists = 3
  15. opGetData = 4
  16. opSetData = 5
  17. opGetAcl = 6
  18. opSetAcl = 7
  19. opGetChildren = 8
  20. opSync = 9
  21. opPing = 11
  22. opGetChildren2 = 12
  23. opCheck = 13
  24. opMulti = 14
  25. opReconfig = 16
  26. opClose = -11
  27. opSetAuth = 100
  28. opSetWatches = 101
  29. opError = -1
  30. // Not in protocol, used internally
  31. opWatcherEvent = -2
  32. )
  33. const (
  34. EventNodeCreated EventType = 1
  35. EventNodeDeleted EventType = 2
  36. EventNodeDataChanged EventType = 3
  37. EventNodeChildrenChanged EventType = 4
  38. EventSession EventType = -1
  39. EventNotWatching EventType = -2
  40. )
  41. var (
  42. eventNames = map[EventType]string{
  43. EventNodeCreated: "EventNodeCreated",
  44. EventNodeDeleted: "EventNodeDeleted",
  45. EventNodeDataChanged: "EventNodeDataChanged",
  46. EventNodeChildrenChanged: "EventNodeChildrenChanged",
  47. EventSession: "EventSession",
  48. EventNotWatching: "EventNotWatching",
  49. }
  50. )
  51. const (
  52. StateUnknown State = -1
  53. StateDisconnected State = 0
  54. StateConnecting State = 1
  55. StateAuthFailed State = 4
  56. StateConnectedReadOnly State = 5
  57. StateSaslAuthenticated State = 6
  58. StateExpired State = -112
  59. StateConnected = State(100)
  60. StateHasSession = State(101)
  61. )
  62. const (
  63. FlagEphemeral = 1
  64. FlagSequence = 2
  65. )
  66. var (
  67. stateNames = map[State]string{
  68. StateUnknown: "StateUnknown",
  69. StateDisconnected: "StateDisconnected",
  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 state"
  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. ErrReconfigDisabled = errors.New("attempts to perform a reconfiguration operation when reconfiguration feature is disabled")
  104. ErrBadArguments = errors.New("invalid arguments")
  105. // ErrInvalidCallback = errors.New("zk: invalid callback specified")
  106. errCodeToError = map[ErrCode]error{
  107. 0: nil,
  108. errAPIError: ErrAPIError,
  109. errNoNode: ErrNoNode,
  110. errNoAuth: ErrNoAuth,
  111. errBadVersion: ErrBadVersion,
  112. errNoChildrenForEphemerals: ErrNoChildrenForEphemerals,
  113. errNodeExists: ErrNodeExists,
  114. errNotEmpty: ErrNotEmpty,
  115. errSessionExpired: ErrSessionExpired,
  116. // errInvalidCallback: ErrInvalidCallback,
  117. errInvalidAcl: ErrInvalidACL,
  118. errAuthFailed: ErrAuthFailed,
  119. errClosing: ErrClosing,
  120. errNothing: ErrNothing,
  121. errSessionMoved: ErrSessionMoved,
  122. errZReconfigDisabled: ErrReconfigDisabled,
  123. errBadArguments: ErrBadArguments,
  124. }
  125. )
  126. func (e ErrCode) toError() error {
  127. if err, ok := errCodeToError[e]; ok {
  128. return err
  129. }
  130. return fmt.Errorf("unknown error: %v", e)
  131. }
  132. const (
  133. errOk = 0
  134. // System and server-side errors
  135. errSystemError = -1
  136. errRuntimeInconsistency = -2
  137. errDataInconsistency = -3
  138. errConnectionLoss = -4
  139. errMarshallingError = -5
  140. errUnimplemented = -6
  141. errOperationTimeout = -7
  142. errBadArguments = -8
  143. errInvalidState = -9
  144. // API errors
  145. errAPIError ErrCode = -100
  146. errNoNode ErrCode = -101 // *
  147. errNoAuth ErrCode = -102
  148. errBadVersion ErrCode = -103 // *
  149. errNoChildrenForEphemerals ErrCode = -108
  150. errNodeExists ErrCode = -110 // *
  151. errNotEmpty ErrCode = -111
  152. errSessionExpired ErrCode = -112
  153. errInvalidCallback ErrCode = -113
  154. errInvalidAcl ErrCode = -114
  155. errAuthFailed ErrCode = -115
  156. errClosing ErrCode = -116
  157. errNothing ErrCode = -117
  158. errSessionMoved ErrCode = -118
  159. // Attempts to perform a reconfiguration operation when reconfiguration feature is disabled
  160. errZReconfigDisabled ErrCode = -123
  161. )
  162. // Constants for ACL permissions
  163. const (
  164. PermRead = 1 << iota
  165. PermWrite
  166. PermCreate
  167. PermDelete
  168. PermAdmin
  169. PermAll = 0x1f
  170. )
  171. var (
  172. emptyPassword = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  173. opNames = map[int32]string{
  174. opNotify: "notify",
  175. opCreate: "create",
  176. opDelete: "delete",
  177. opExists: "exists",
  178. opGetData: "getData",
  179. opSetData: "setData",
  180. opGetAcl: "getACL",
  181. opSetAcl: "setACL",
  182. opGetChildren: "getChildren",
  183. opSync: "sync",
  184. opPing: "ping",
  185. opGetChildren2: "getChildren2",
  186. opCheck: "check",
  187. opMulti: "multi",
  188. opReconfig: "reconfig",
  189. opClose: "close",
  190. opSetAuth: "setAuth",
  191. opSetWatches: "setWatches",
  192. opWatcherEvent: "watcherEvent",
  193. }
  194. )
  195. type EventType int32
  196. func (t EventType) String() string {
  197. if name := eventNames[t]; name != "" {
  198. return name
  199. }
  200. return "Unknown"
  201. }
  202. // Mode is used to build custom server modes (leader|follower|standalone).
  203. type Mode uint8
  204. func (m Mode) String() string {
  205. if name := modeNames[m]; name != "" {
  206. return name
  207. }
  208. return "unknown"
  209. }
  210. const (
  211. ModeUnknown Mode = iota
  212. ModeLeader Mode = iota
  213. ModeFollower Mode = iota
  214. ModeStandalone Mode = iota
  215. )
  216. var (
  217. modeNames = map[Mode]string{
  218. ModeLeader: "leader",
  219. ModeFollower: "follower",
  220. ModeStandalone: "standalone",
  221. }
  222. )