error.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package datahub
  2. import (
  3. "fmt"
  4. )
  5. /*
  6. examples errors
  7. */
  8. // Error codes
  9. const (
  10. InvalidParameter = "InvalidParameter"
  11. InvalidSubscription = "InvalidSubscription"
  12. InvalidCursor = "InvalidCursor"
  13. /**
  14. * for later arrange error code
  15. */
  16. ResourceNotFound = "ResourceNotFound"
  17. NoSuchTopic = "NoSuchTopic"
  18. NoSuchProject = "NoSuchProject"
  19. NoSuchSubscription = "NoSuchSubscription"
  20. NoSuchShard = "NoSuchShard"
  21. NoSuchConnector = "NoSuchConnector"
  22. NoSuchMeterInfo = "NoSuchMeteringInfo"
  23. /**
  24. * for later arrange error code
  25. */
  26. SeekOutOfRange = "SeekOutOfRange"
  27. ResourceAlreadyExist = "ResourceAlreadyExist"
  28. ProjectAlreadyExist = "ProjectAlreadyExist"
  29. TopicAlreadyExist = "TopicAlreadyExist"
  30. ConnectorAlreadyExist = "ConnectorAlreadyExist"
  31. UnAuthorized = "Unauthorized"
  32. NoPermission = "NoPermission"
  33. InvalidShardOperation = "InvalidShardOperation"
  34. OperatorDenied = "OperationDenied"
  35. LimitExceed = "LimitExceeded"
  36. //ODPSServiceError = "OdpsServiceError"
  37. //MysqlServiceError = "MysqlServiceError"
  38. //InternalServerErrorS = "InternalServerError"
  39. SubscriptionOffline = "SubscriptionOffline"
  40. OffsetReseted = "OffsetReseted"
  41. OffsetSessionClosed = "OffsetSessionClosed"
  42. OffsetSessionChanged = "OffsetSessionChanged"
  43. MalformedRecord = "MalformedRecord"
  44. NoSuchConsumer = "NoSuchConsumer"
  45. ConsumerGroupInProcess = "ConsumerGroupInProcess"
  46. )
  47. const (
  48. projectNameInvalid string = "project name should start with letter, only contains [a-zA-Z0-9_], 3 < length < 32"
  49. commentInvalid string = "comment can not be empty and length must less than 1024"
  50. topicNameInvalid string = "topic name should start with letter, only contains [a-zA-Z0-9_], 1 < length < 128"
  51. shardIdInvalid string = "shardId is invalid"
  52. shardListInvalid string = "shard list is empty"
  53. lifecycleInvalid string = "lifecycle is invalid"
  54. parameterInvalid string = "parameter is invalid"
  55. parameterNull string = "parameter is nil"
  56. parameterNumInvalid string = "parameter num invalid"
  57. parameterTypeInvalid string = "parameter type is invalid,please check your input parameter type"
  58. missingRecordSchema string = "missing record schema for tuple record type"
  59. recordsInvalid string = "records is invalid, nil, empty or other invalid reason"
  60. )
  61. // return the specific err type by errCode,
  62. // you can handle the error by type assert
  63. func errorHandler(statusCode int, requestId string, errorCode string, message string) error {
  64. switch errorCode {
  65. case InvalidParameter, InvalidSubscription, InvalidCursor:
  66. return NewInvalidParameterError(statusCode, requestId, errorCode, message)
  67. case ResourceNotFound, NoSuchTopic, NoSuchProject, NoSuchSubscription, NoSuchShard, NoSuchConnector,
  68. NoSuchMeterInfo, NoSuchConsumer:
  69. return NewResourceNotFoundError(statusCode, requestId, errorCode, message)
  70. case SeekOutOfRange:
  71. return NewSeekOutOfRangeError(statusCode, requestId, errorCode, message)
  72. case ResourceAlreadyExist, ProjectAlreadyExist, TopicAlreadyExist, ConnectorAlreadyExist:
  73. return NewResourceExistError(statusCode, requestId, errorCode, message)
  74. case UnAuthorized:
  75. return NewAuthorizationFailedError(statusCode, requestId, errorCode, message)
  76. case NoPermission:
  77. return NewNoPermissionError(statusCode, requestId, errorCode, message)
  78. case OperatorDenied:
  79. return NewInvalidOperationError(statusCode, requestId, errorCode, message)
  80. case LimitExceed:
  81. return NewLimitExceededError(statusCode, requestId, errorCode, message)
  82. case SubscriptionOffline:
  83. return NewSubscriptionOfflineError(statusCode, requestId, errorCode, message)
  84. case OffsetReseted:
  85. return NewSubscriptionOffsetResetError(statusCode, requestId, errorCode, message)
  86. case OffsetSessionClosed, OffsetSessionChanged:
  87. return NewSubscriptionSessionInvalidError(statusCode, requestId, errorCode, message)
  88. case MalformedRecord:
  89. return NewMalformedRecordError(statusCode, requestId, errorCode, message)
  90. case ConsumerGroupInProcess:
  91. return NewServiceInProcessError(statusCode, requestId, errorCode, message)
  92. case InvalidShardOperation:
  93. return NewShardSealedError(statusCode, requestId, errorCode, message)
  94. }
  95. return NewDatahubClientError(statusCode, requestId, errorCode, message)
  96. }
  97. // create a new DatahubClientError
  98. func NewDatahubClientError(statusCode int, requestId string, code string, message string) *DatahubClientError {
  99. return &DatahubClientError{StatusCode: statusCode, RequestId: requestId, Code: code, Message: message}
  100. }
  101. // DatahubError struct
  102. type DatahubClientError struct {
  103. StatusCode int `json:"StatusCode"` // Http status code
  104. RequestId string `json:"RequestId"` // Request-id to trace the request
  105. Code string `json:"ErrorCode"` // Datahub error code
  106. Message string `json:"ErrorMessage"` // Error msg of the error code
  107. }
  108. func (err *DatahubClientError) Error() string {
  109. return fmt.Sprintf("statusCode: %d, requestId: %s, errCode: %s, errMsg: %s",
  110. err.StatusCode, err.RequestId, err.Code, err.Message)
  111. }
  112. func NewInvalidParameterErrorWithMessage(message string) *InvalidParameterError {
  113. return &InvalidParameterError{
  114. DatahubClientError{
  115. StatusCode: -1,
  116. RequestId: "",
  117. Code: "",
  118. Message: message,
  119. },
  120. }
  121. }
  122. func NewInvalidParameterError(statusCode int, requestId string, code string, message string) *InvalidParameterError {
  123. return &InvalidParameterError{
  124. DatahubClientError{
  125. StatusCode: statusCode,
  126. RequestId: requestId,
  127. Code: code,
  128. Message: message,
  129. },
  130. }
  131. }
  132. // InvalidParameterError represent the parameter error
  133. type InvalidParameterError struct {
  134. DatahubClientError
  135. }
  136. func NewResourceNotFoundError(statusCode int, requestId string, code string, message string) *ResourceNotFoundError {
  137. return &ResourceNotFoundError{
  138. DatahubClientError{
  139. StatusCode: statusCode,
  140. RequestId: requestId,
  141. Code: code,
  142. Message: message,
  143. },
  144. }
  145. }
  146. type ResourceNotFoundError struct {
  147. DatahubClientError
  148. }
  149. func NewResourceExistError(statusCode int, requestId string, code string, message string) *ResourceExistError {
  150. return &ResourceExistError{
  151. DatahubClientError{
  152. StatusCode: statusCode,
  153. RequestId: requestId,
  154. Code: code,
  155. Message: message,
  156. },
  157. }
  158. }
  159. type ResourceExistError struct {
  160. DatahubClientError
  161. }
  162. func NewInvalidOperationError(statusCode int, requestId string, code string, message string) *InvalidOperationError {
  163. return &InvalidOperationError{
  164. DatahubClientError{
  165. StatusCode: statusCode,
  166. RequestId: requestId,
  167. Code: code,
  168. Message: message,
  169. },
  170. }
  171. }
  172. type InvalidOperationError struct {
  173. DatahubClientError
  174. }
  175. func NewLimitExceededError(statusCode int, requestId string, code string, message string) *LimitExceededError {
  176. return &LimitExceededError{
  177. DatahubClientError{
  178. StatusCode: statusCode,
  179. RequestId: requestId,
  180. Code: code,
  181. Message: message,
  182. },
  183. }
  184. }
  185. type LimitExceededError struct {
  186. DatahubClientError
  187. }
  188. func NewAuthorizationFailedError(statusCode int, requestId string, code string, message string) *AuthorizationFailedError {
  189. return &AuthorizationFailedError{
  190. DatahubClientError{
  191. StatusCode: statusCode,
  192. RequestId: requestId,
  193. Code: code,
  194. Message: message,
  195. },
  196. }
  197. }
  198. type AuthorizationFailedError struct {
  199. DatahubClientError
  200. }
  201. //func (afe *AuthorizationFailureError) Error() string {
  202. // return afe.DatahubClientError.Error()
  203. //}
  204. func NewNoPermissionError(statusCode int, requestId string, code string, message string) *NoPermissionError {
  205. return &NoPermissionError{
  206. DatahubClientError{
  207. StatusCode: statusCode,
  208. RequestId: requestId,
  209. Code: code,
  210. Message: message,
  211. },
  212. }
  213. }
  214. type NoPermissionError struct {
  215. DatahubClientError
  216. }
  217. func NewSeekOutOfRangeError(statusCode int, requestId string, code string, message string) *SeekOutOfRangeError {
  218. return &SeekOutOfRangeError{
  219. DatahubClientError{
  220. StatusCode: statusCode,
  221. RequestId: requestId,
  222. Code: code,
  223. Message: message,
  224. },
  225. }
  226. }
  227. type SeekOutOfRangeError struct {
  228. DatahubClientError
  229. }
  230. func NewSubscriptionOfflineError(statusCode int, requestId string, code string, message string) *SubscriptionOfflineError {
  231. return &SubscriptionOfflineError{
  232. DatahubClientError{
  233. StatusCode: statusCode,
  234. RequestId: requestId,
  235. Code: code,
  236. Message: message,
  237. },
  238. }
  239. }
  240. type SubscriptionOfflineError struct {
  241. DatahubClientError
  242. }
  243. func NewSubscriptionOffsetResetError(statusCode int, requestId string, code string, message string) *SubscriptionOffsetResetError {
  244. return &SubscriptionOffsetResetError{
  245. DatahubClientError{
  246. StatusCode: statusCode,
  247. RequestId: requestId,
  248. Code: code,
  249. Message: message,
  250. },
  251. }
  252. }
  253. type SubscriptionOffsetResetError struct {
  254. DatahubClientError
  255. }
  256. func NewSubscriptionSessionInvalidError(statusCode int, requestId string, code string, message string) *SubscriptionSessionInvalidError {
  257. return &SubscriptionSessionInvalidError{
  258. DatahubClientError{
  259. StatusCode: statusCode,
  260. RequestId: requestId,
  261. Code: code,
  262. Message: message,
  263. },
  264. }
  265. }
  266. type SubscriptionSessionInvalidError struct {
  267. DatahubClientError
  268. }
  269. func NewMalformedRecordError(statusCode int, requestId string, code string, message string) *MalformedRecordError {
  270. return &MalformedRecordError{
  271. DatahubClientError{
  272. StatusCode: statusCode,
  273. RequestId: requestId,
  274. Code: code,
  275. Message: message,
  276. },
  277. }
  278. }
  279. type MalformedRecordError struct {
  280. DatahubClientError
  281. }
  282. func NewServiceInProcessError(statusCode int, requestId string, code string, message string) *ServiceInProcessError {
  283. return &ServiceInProcessError{
  284. DatahubClientError{
  285. StatusCode: statusCode,
  286. RequestId: requestId,
  287. Code: code,
  288. Message: message,
  289. },
  290. }
  291. }
  292. type ServiceInProcessError struct {
  293. DatahubClientError
  294. }
  295. func NewShardSealedError(statusCode int, requestId string, code string, message string) *ShardSealedError {
  296. return &ShardSealedError{
  297. DatahubClientError{
  298. StatusCode: statusCode,
  299. RequestId: requestId,
  300. Code: code,
  301. Message: message,
  302. },
  303. }
  304. }
  305. type ShardSealedError struct {
  306. DatahubClientError
  307. }
  308. func NewServiceTemporaryUnavailableError(message string) *ServiceTemporaryUnavailableError {
  309. return &ServiceTemporaryUnavailableError{
  310. DatahubClientError{
  311. StatusCode: -1,
  312. RequestId: "",
  313. Code: "",
  314. Message: message,
  315. },
  316. }
  317. }
  318. func NewServiceTemporaryUnavailableErrorWithCode(statusCode int, requestId string, code string, message string) *ServiceTemporaryUnavailableError {
  319. return &ServiceTemporaryUnavailableError{
  320. DatahubClientError{
  321. StatusCode: statusCode,
  322. RequestId: requestId,
  323. Code: code,
  324. Message: message,
  325. },
  326. }
  327. }
  328. type ServiceTemporaryUnavailableError struct {
  329. DatahubClientError
  330. }