23 #ifndef LIBCOUCHBASE_ERROR_H 24 #define LIBCOUCHBASE_ERROR_H 1 26 #ifndef LIBCOUCHBASE_COUCHBASE_H 27 #error "Include libcouchbase/couchbase.h instead" 89 #define LCB__ERR_USEDETAILS \ 90 "Enable detailed error codes (via LCB_CNTL_DETAILED_ERRCODES, or via " \ 91 "`detailed_errcodes` in the connection string) and/or enable logging to " \ 92 "get more information" 103 #define LCB_XERR(X) \ 105 X(LCB_SUCCESS, 0x00, 0, "Success (Not an error)") \ 107 X(LCB_AUTH_CONTINUE, 0x01, LCB_ERRTYPE_INTERNAL|LCB_ERRTYPE_FATAL|LCB_ERRTYPE_SRVGEN, \ 108 "Error code used internally within libcouchbase for SASL auth. Should " \ 109 "not be visible from the API") \ 118 X(LCB_AUTH_ERROR, 0x02, LCB_ERRTYPE_FATAL|LCB_ERRTYPE_INPUT, \ 119 "Authentication failed. You may have provided an invalid " \ 120 "username/password combination") \ 125 X(LCB_DELTA_BADVAL, 0x03, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 126 "The value requested to be incremented is not stored as a number") \ 131 X(LCB_E2BIG, 0x04, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 132 "The object requested is too big to store in the server") \ 134 X(LCB_EBUSY, 0x05, LCB_ERRTYPE_TRANSIENT, "The server is busy. Try again later") \ 136 X(LCB_EINTERNAL, 0x06, LCB_ERRTYPE_INTERNAL, "Internal libcouchbase error") \ 141 X(LCB_EINVAL, 0x07, LCB_ERRTYPE_INPUT, "Invalid input/arguments") \ 145 X(LCB_ENOMEM, 0x08, LCB_ERRTYPE_TRANSIENT, \ 146 "The server is out of memory. Try again later") \ 148 X(LCB_ERANGE, 0x09, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 152 X(LCB_ERROR, 0x0A, 0, "Generic error") \ 160 X(LCB_ETMPFAIL, 0x0B, LCB_ERRTYPE_TRANSIENT|LCB_ERRTYPE_SRVLOAD|LCB_ERRTYPE_SRVGEN, \ 161 "Temporary failure received from server. Try again later") \ 167 X(LCB_KEY_EEXISTS, 0x0C, LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 168 "The key already exists in the server. If you have supplied a CAS then " \ 169 "the key exists with a CAS value different than specified") \ 172 X(LCB_KEY_ENOENT, 0x0D, LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 173 "The key does not exist on the server") \ 176 X(LCB_DLOPEN_FAILED, 0x0E, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL|LCB_ERRTYPE_PLUGIN, \ 177 "Could not locate plugin library") \ 180 X(LCB_DLSYM_FAILED, 0x0F, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL|LCB_ERRTYPE_PLUGIN, \ 181 "Required plugin initializer not found") \ 189 X(LCB_NETWORK_ERROR, 0x10, LCB_ERRTYPE_NETWORK, \ 190 "Generic network failure. " LCB__ERR_USEDETAILS) \ 195 X(LCB_NOT_MY_VBUCKET, 0x11, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT|LCB_ERRTYPE_SRVGEN, \ 196 "The server which received this command claims it is not hosting this key") \ 200 X(LCB_NOT_STORED, 0x12, LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN, \ 201 "Item not stored (did you try to append/prepend to a missing key?)") \ 210 X(LCB_NOT_SUPPORTED, 0x13, 0, "Operation not supported") \ 214 X(LCB_UNKNOWN_COMMAND, 0x14, LCB_ERRTYPE_SRVGEN, "Unknown command") \ 221 X(LCB_UNKNOWN_HOST, 0x15, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_INPUT, \ 222 "DNS/Hostname lookup failed") \ 225 X(LCB_PROTOCOL_ERROR, 0x16, LCB_ERRTYPE_NETWORK, \ 226 "Data received on socket was not in the expected format") \ 231 X(LCB_ETIMEDOUT, 0x17, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 232 "Client-Side timeout exceeded for operation. Inspect network conditions " \ 233 "or increase the timeout") \ 236 X(LCB_CONNECT_ERROR, 0x18, LCB_ERRTYPE_NETWORK, \ 237 "Error while establishing TCP connection. " LCB__ERR_USEDETAILS) \ 241 X(LCB_BUCKET_ENOENT, 0x19, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL, \ 242 "The bucket requested does not exist") \ 245 X(LCB_CLIENT_ENOMEM, 0x1A, LCB_ERRTYPE_FATAL, \ 246 "Memory allocation for libcouchbase failed. Severe problems ahead") \ 250 X(LCB_CLIENT_ENOCONF, 0x1B, LCB_ERRTYPE_TRANSIENT, \ 251 "Client not bootstrapped. Ensure bootstrap/connect was attempted and was successful") \ 253 X(LCB_EBADHANDLE, 0x1C, LCB_ERRTYPE_INPUT, \ 254 "Bad handle type for operation. " \ 255 "You cannot perform administrative operations on a data handle, or data "\ 256 "operations on a cluster handle") \ 258 X(LCB_SERVER_BUG, 0x1D, 0, "Encountered a server bug") \ 260 X(LCB_PLUGIN_VERSION_MISMATCH, 0x1E, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL|LCB_ERRTYPE_PLUGIN, \ 261 "This version of libcouchbase cannot load the specified plugin") \ 263 X(LCB_INVALID_HOST_FORMAT, 0x1F, LCB_ERRTYPE_INPUT, \ 264 "Hostname specified for URI is in an invalid format") \ 266 X(LCB_INVALID_CHAR, 0x20, LCB_ERRTYPE_INPUT, "Illegal characted") \ 271 X(LCB_DURABILITY_ETOOMANY, 0x21, LCB_ERRTYPE_INPUT, \ 272 "Durability constraints requires more nodes/replicas than the cluster "\ 273 "configuration allows. Durability constraints will never be satisfied") \ 278 X(LCB_DUPLICATE_COMMANDS, 0x22, LCB_ERRTYPE_INPUT, \ 279 "The same key was specified more than once in the command list") \ 284 X(LCB_NO_MATCHING_SERVER, 0x23, LCB_ERRTYPE_TRANSIENT, \ 285 "The node the request was mapped to does not exist in the current cluster " \ 286 "map. This may be the result of a failover.") \ 292 X(LCB_BAD_ENVIRONMENT, 0x24, LCB_ERRTYPE_FATAL|LCB_ERRTYPE_INPUT, \ 293 "The value for an environment variable recognized by libcouchbase was " \ 294 "specified in an incorrect format. Check your environment for entries " \ 295 "starting with 'LCB_' or 'LIBCOUCHBASE_'") \ 297 X(LCB_BUSY, 0x25, LCB_ERRTYPE_INTERNAL, "Busy. This is an internal error") \ 300 X(LCB_INVALID_USERNAME, 0x26, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL, \ 301 "The username must match the bucket name (or be NULL) for data access") \ 303 X(LCB_CONFIG_CACHE_INVALID, 0x27, LCB_ERRTYPE_INPUT, \ 304 "The contents of the configuration cache file were invalid. Configuration " \ 305 "will be fetched from the network") \ 310 X(LCB_SASLMECH_UNAVAILABLE, 0x28, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_FATAL, \ 311 "The requested SASL mechanism was not supported by the server. Either " \ 312 "upgrade the server or change the mechanism requirements") \ 316 X(LCB_TOO_MANY_REDIRECTS, 0x29, LCB_ERRTYPE_NETWORK, \ 317 "Maximum allowed number of redirects reached. See lcb_cntl and the "\ 318 "LCB_CNTL_MAX_REDIRECTS option to modify this limit") \ 325 X(LCB_MAP_CHANGED, 0x2A, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 326 "The cluster map has changed and this operation could not be completed " \ 327 "or retried internally. Try this operation again") \ 331 X(LCB_INCOMPLETE_PACKET, 0x2B, LCB_ERRTYPE_TRANSIENT|LCB_ERRTYPE_INPUT, \ 332 "Incomplete packet was passed to forward function") \ 337 X(LCB_ECONNREFUSED, 0x2C, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 338 "The remote host refused the connection. Is the service up?") \ 344 X(LCB_ESOCKSHUTDOWN, 0x2D, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 345 "The remote host closed the connection") \ 351 X(LCB_ECONNRESET, 0x2E, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 352 "The connection was forcibly reset by the remote host") \ 362 X(LCB_ECANTGETPORT, 0x2F, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_FATAL, \ 363 "Could not assign a local port for this socket. For client sockets this means " \ 364 "there are too many TCP sockets open") \ 373 X(LCB_EFDLIMITREACHED, 0x30, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_FATAL, \ 374 "The system or process has reached its maximum number of file descriptors") \ 380 X(LCB_ENETUNREACH, 0x31, LCB_ERRTYPE_NETWORK|LCB_ERRTYPE_TRANSIENT, \ 381 "The remote host was unreachable - is your network OK?") \ 385 X(LCB_ECTL_UNKNOWN, 0x32, LCB_ERRTYPE_INPUT, \ 386 "Control code passed was unrecognized") \ 394 X(LCB_ECTL_UNSUPPMODE, 0x33, LCB_ERRTYPE_INPUT, \ 395 "Invalid modifier for cntl operation (e.g. tried to read a write-only value") \ 402 X(LCB_ECTL_BADARG, 0x34, LCB_ERRTYPE_INPUT, \ 403 "Argument passed to cntl was badly formatted") \ 407 X(LCB_EMPTY_KEY, 0x35, LCB_ERRTYPE_INPUT, \ 408 "An empty key was passed to an operation") \ 414 X(LCB_SSL_ERROR, 0x36, LCB_ERRTYPE_FATAL, \ 415 "A generic error related to the SSL subsystem was encountered. Enable logging " \ 416 "to see more details") \ 421 X(LCB_SSL_CANTVERIFY, 0x37, LCB_ERRTYPE_FATAL, \ 422 "Client could not verify server's certificate") \ 424 X(LCB_SCHEDFAIL_INTERNAL, 0x38, 0, \ 425 "Internal error used for destroying unscheduled command data") \ 432 X(LCB_CLIENT_FEATURE_UNAVAILABLE, 0x39, LCB_ERRTYPE_INPUT, \ 433 "The requested feature is not supported by the client, either because of " \ 434 "settings in the configured instance, or because of options disabled at " \ 435 "the time the library was compiled") \ 439 X(LCB_OPTIONS_CONFLICT, 0x3A, LCB_ERRTYPE_INPUT, \ 440 "The operation structure contains conflicting options") \ 444 X(LCB_HTTP_ERROR, 0x3B, 0, \ 445 "HTTP Operation failed. Inspect status code for details") \ 449 X(LCB_DURABILITY_NO_MUTATION_TOKENS, 0x3C, LCB_ERRTYPE_INPUT, \ 450 "The given item does not have a mutation token associated with it. " \ 451 "this is either because fetching mutation tokens was not enabled, or " \ 452 "you are trying to check on something not stored by this instance") \ 455 X(LCB_UNKNOWN_MEMCACHED_ERROR, 0x3D, LCB_ERRTYPE_SRVGEN, \ 456 "The server replied with an unrecognized status code. A newer version " \ 457 "of this library may be able to decode it") \ 460 X(LCB_MUTATION_LOST, 0x3E, LCB_ERRTYPE_SRVGEN,\ 461 "The given mutation has been permanently lost due to the node failing " \ 462 "before replication") \ 464 X(LCB_SUBDOC_PATH_ENOENT, 0x3F, \ 465 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 466 "Sub-document path does not exist") \ 468 X(LCB_SUBDOC_PATH_MISMATCH, 0x40,\ 469 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 470 "Type of element in sub-document path conflicts with type in document") \ 472 X(LCB_SUBDOC_PATH_EINVAL, 0x41, \ 473 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 474 "Malformed sub-document path") \ 476 X(LCB_SUBDOC_PATH_E2BIG, 0x42, \ 477 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 478 "Sub-document contains too many components") \ 480 X(LCB_SUBDOC_DOC_E2DEEP, 0x43,\ 481 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 482 "Existing document contains too many levels of nesting") \ 484 X(LCB_SUBDOC_VALUE_CANTINSERT, 0x44, \ 485 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 486 "Subdocument operation would invalidate the JSON") \ 488 X(LCB_SUBDOC_DOC_NOTJSON, 0x45,\ 489 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 490 "Existing document is not valid JSON") \ 492 X(LCB_SUBDOC_NUM_ERANGE, 0x46, \ 493 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 494 "The existing numeric value is too large") \ 496 X(LCB_SUBDOC_BAD_DELTA, 0x47,\ 497 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 498 "Delta must be numeric, within the 64 bit signed range, and non-zero") \ 500 X(LCB_SUBDOC_PATH_EEXISTS, 0x48,\ 501 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 502 "The given path already exists in the document") \ 504 X(LCB_SUBDOC_MULTI_FAILURE, 0x49,\ 505 LCB_ERRTYPE_DATAOP|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 506 "Could not execute one or more multi lookups or mutations") \ 508 X(LCB_SUBDOC_VALUE_E2DEEP, 0x4A,\ 509 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 510 "Value is too deep to insert") \ 512 X(LCB_EINVAL_MCD, 0x4B, LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_INTERNAL, \ 513 "A badly formatted packet was sent to the server. Please report this in a bug") \ 515 X(LCB_EMPTY_PATH, 0x4C, LCB_ERRTYPE_INPUT, "Missing subdocument path") \ 517 X(LCB_UNKNOWN_SDCMD, 0x4D, LCB_ERRTYPE_INPUT, "Unknown subdocument command") \ 519 X(LCB_ENO_COMMANDS, 0x4E, LCB_ERRTYPE_INPUT, "No commands specified") \ 521 X(LCB_QUERY_ERROR, 0x4F, LCB_ERRTYPE_SRVGEN, \ 522 "Query execution failed. Inspect raw response object for information") \ 524 X(LCB_GENERIC_TMPERR, 0x50, LCB_ERRTYPE_TRANSIENT|LCB_ERRTYPE_SRVGEN, \ 525 "Generic temporary error received from server") \ 527 X(LCB_GENERIC_SUBDOCERR, 0x51, LCB_ERRTYPE_SUBDOC|LCB_ERRTYPE_SRVGEN, \ 528 "Generic subdocument error received from server") \ 530 X(LCB_GENERIC_CONSTRAINT_ERR, 0x52, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN, \ 531 "Generic constraint error received from server") \ 533 X(LCB_NAMESERVER_ERROR, 0x53, LCB_ERRTYPE_NETWORK, \ 534 "Invalid reply received from nameserver") \ 536 X(LCB_NOT_AUTHORIZED, 0x54, LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN, \ 537 "Not authorized for operation") \ 539 X(LCB_SUBDOC_INVALID_COMBO, 0x55, \ 540 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 541 "An invalid combination of commands was specified") \ 543 X(LCB_SUBDOC_MULTI_PATH_FAILURE, 0x56, \ 544 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 545 "Specified key was successfully found, but one or more path operations failed") \ 547 X(LCB_SUBDOC_SUCCESS_DELETED, 0x57, \ 548 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 549 "The operation completed successfully, but operated on a deleted document") \ 551 X(LCB_SUBDOC_XATTR_INVALID_FLAG_COMBO, 0x58, \ 552 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 553 "The combination of the subdoc flags for the xattrs is not valid") \ 555 X(LCB_SUBDOC_XATTR_INVALID_KEY_COMBO, 0x59, \ 556 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 557 "Only a single xattr key may be accessed at the same time") \ 559 X(LCB_SUBDOC_XATTR_UNKNOWN_MACRO, 0x5a, \ 560 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 561 "The server has no knowledge of the requested macro") \ 563 X(LCB_SUBDOC_XATTR_UNKNOWN_VATTR, 0x5b, \ 564 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 565 "The server has no knowledge of the requested virtual xattr") \ 567 X(LCB_SUBDOC_XATTR_CANT_MODIFY_VATTR, 0x5c, \ 568 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 569 "Virtual xattrs cannot be modified") \ 571 X(LCB_SUBDOC_MULTI_PATH_FAILURE_DELETED, 0x5d, \ 572 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 573 "Specified key was found as a deleted document, but one or more path operations failed") \ 575 X(LCB_SUBDOC_INVALID_XATTR_ORDER, 0x5e, \ 576 LCB_ERRTYPE_INPUT|LCB_ERRTYPE_SRVGEN|LCB_ERRTYPE_SUBDOC, \ 577 "According to the spec all xattr commands should come first, followed by the commands for the document body") 581 #define X(n, v, cls, s) n = v, 585 #ifdef LIBCOUCHBASE_INTERNAL 597 #define LCB_CLIENT_ETMPFAIL LCB_CLIENT_ENOCONF 600 #define LCB_EIFINPUT(e) (lcb_get_errtype(e) & LCB_ERRTYPE_INPUT) 603 #define LCB_EIFNET(e) (lcb_get_errtype(e) & LCB_ERRTYPE_NETWORK) 606 #define LCB_EIFFATAL(e) (lcb_get_errtype(e) & LCB_ERRTYPE_FATAL) 609 #define LCB_EIFTMP(e) (lcb_get_errtype(e) & LCB_ERRTYPE_TRANSIENT) 612 #define LCB_EIFDATA(e) (lcb_get_errtype(e) & LCB_ERRTYPE_DATAOP) 615 #define LCB_EIFPLUGIN(e) (lcb_get_errtype(e) & LCB_ERRTYPE_PLUGIN) 616 #define LCB_EIFSRVLOAD(e) (lcb_get_errtype(e) & LCB_ERRTYPE_SRVLOAD) 617 #define LCB_EIFSRVGEN(e) (lcb_get_errtype(e) & LCB_ERRTYPE_SRVGEN) 618 #define LCB_EIFSUBDOC(e) (lcb_get_errtype(e) & LCB_ERRTYPE_SUBDOC) const char * lcb_strerror(lcb_t instance, lcb_error_t error)
Get a textual descrtiption for the given error code
Error code indicates document (fulldoc) access ok, but error in performing subdocument operation...
Definition: error.h:85
lcb_errmap_callback lcb_set_errmap_callback(lcb_t, lcb_errmap_callback)
int lcb_get_errtype(lcb_error_t err)
Get error categories for a specific code
Error code indicating the server generated this message.
Definition: error.h:77
LCB_INTERNAL_API const char * lcb_strerror_short(lcb_error_t error)
Get a shorter textual description of an error message.
The errors below this value reserved for libcouchbase usage.
Definition: error.h:608
Error codes which should never be visible to the user.
Definition: error.h:68
lcb_errflags_t
Error Categories.
Definition: error.h:51
Error type indicating a fatal condition within the server or library.
Definition: error.h:59
Error type indicating a likely network failure.
Definition: error.h:56
Error code indicating the server is under load.
Definition: error.h:74
struct lcb_st * lcb_t
Library handle representing a connection to a cluster and its data buckets.
Definition: couchbase.h:41
lcb_error_t
Error codes returned by the library.
Definition: error.h:580
Error type indicating a transient condition within the server.
Definition: error.h:62
Error code indicating a plugin failure.
Definition: error.h:71
Error type indicating a likely issue in user input.
Definition: error.h:53
Error type indicating a negative server reply for the data.
Definition: error.h:65
LCB_INTERNAL_API const char * lcb_strerror_long(lcb_error_t error)
Get a longer textual description of an error message.
#define LCB_XERR(X)
XMacro for all error types.
Definition: error.h:103
lcb_error_t lcb_errmap_default(lcb_t instance, lcb_U16 code)
This may be used in conjunction with the errmap callback if it wishes to fallback for default behav...
lcb_error_t(* lcb_errmap_callback)(lcb_t instance, lcb_U16 bincode)
Callback for error mappings.
Definition: error.h:688