[CDRIVER-3660] Remove all overlapping error domains Created: 08/May/20  Updated: 10/Feb/23

Status: Backlog
Project: C Driver
Component/s: None
Affects Version/s: 1.17.0-beta
Fix Version/s: 2.0.0

Type: Improvement Priority: Major - P3
Reporter: Kevin Albertson Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Epic Link: CDRIVER-4576

 Description   

The following is a list of current error domains libmongoc can return:

                 MONGOC_ERROR_CLIENT,      1
                 MONGOC_ERROR_STREAM,      2
               MONGOC_ERROR_PROTOCOL,      3
                 MONGOC_ERROR_CURSOR,      4
                  MONGOC_ERROR_QUERY,      5
                 MONGOC_ERROR_INSERT,      6
                   MONGOC_ERROR_SASL,      7
                   MONGOC_ERROR_BSON,      8
                MONGOC_ERROR_MATCHER,      9
              MONGOC_ERROR_NAMESPACE,     10
                MONGOC_ERROR_COMMAND,     11
             MONGOC_ERROR_COLLECTION,     12
                 MONGOC_ERROR_GRIDFS,     13
                  MONGOC_ERROR_SCRAM,     14
       MONGOC_ERROR_SERVER_SELECTION,     15
          MONGOC_ERROR_WRITE_CONCERN,     16
                 MONGOC_ERROR_SERVER,     17
            MONGOC_ERROR_TRANSACTION,     18
 MONGOC_ERROR_CLIENT_SIDE_ENCRYPTION,     19
                     BSON_ERROR_JSON,      1
                   BSON_ERROR_READER,      2
                  BSON_ERROR_INVALID,      3 

There are three overlapping domains:

BSON_ERROR_JSON = MONGOC_ERROR_CLIENT

BSON_ERROR_READER = MONGOC_ERROR_STREAM

BSON_ERROR_INVALID = MONGOC_ERROR_PROTOCOL

The following is a list of documented error codes. (This is not a list of all possible errors that could be returned, since server errors, or errors originating from libmongocrypt, have their own codes)

            MONGOC_ERROR_STREAM_INVALID_TYPE,      1
           MONGOC_ERROR_STREAM_INVALID_STATE,      2
         MONGOC_ERROR_STREAM_NAME_RESOLUTION,      3
                  MONGOC_ERROR_STREAM_SOCKET,      4
                 MONGOC_ERROR_STREAM_CONNECT,      5
         MONGOC_ERROR_STREAM_NOT_ESTABLISHED,      6
               MONGOC_ERROR_CLIENT_NOT_READY,      7
                 MONGOC_ERROR_CLIENT_TOO_BIG,      8
               MONGOC_ERROR_CLIENT_TOO_SMALL,      9
                MONGOC_ERROR_CLIENT_GETNONCE,     10
            MONGOC_ERROR_CLIENT_AUTHENTICATE,     11
      MONGOC_ERROR_CLIENT_NO_ACCEPTABLE_PEER,     12
              MONGOC_ERROR_CLIENT_IN_EXHAUST,     13
         MONGOC_ERROR_PROTOCOL_INVALID_REPLY,     14
      MONGOC_ERROR_PROTOCOL_BAD_WIRE_VERSION,     15
          MONGOC_ERROR_CURSOR_INVALID_CURSOR,     16
                  MONGOC_ERROR_QUERY_FAILURE,     17
                   MONGOC_ERROR_BSON_INVALID,     18
                MONGOC_ERROR_MATCHER_INVALID,     19
              MONGOC_ERROR_NAMESPACE_INVALID,     20
  MONGOC_ERROR_NAMESPACE_INVALID_FILTER_TYPE,     21
            MONGOC_ERROR_COMMAND_INVALID_ARG,     22
       MONGOC_ERROR_COLLECTION_INSERT_FAILED,     23
       MONGOC_ERROR_COLLECTION_UPDATE_FAILED,     24
       MONGOC_ERROR_COLLECTION_DELETE_FAILED,     25
      MONGOC_ERROR_COLLECTION_DOES_NOT_EXIST,     26
        MONGOC_ERROR_GRIDFS_INVALID_FILENAME,     27
                 MONGOC_ERROR_SCRAM_NOT_DONE,     28
           MONGOC_ERROR_SCRAM_PROTOCOL_ERROR,     29
        MONGOC_ERROR_QUERY_COMMAND_NOT_FOUND,     59
             MONGOC_ERROR_QUERY_NOT_TAILABLE,  13051
NGOC_ERROR_SERVER_SELECTION_BAD_WIRE_VERSION,  13052
       MONGOC_ERROR_SERVER_SELECTION_FAILURE,  13053
    MONGOC_ERROR_SERVER_SELECTION_INVALID_ID,  13054
           MONGOC_ERROR_GRIDFS_CHUNK_MISSING,  13055
          MONGOC_ERROR_GRIDFS_PROTOCOL_ERROR,  13056
                 MONGOC_ERROR_PROTOCOL_ERROR,     17
            MONGOC_ERROR_WRITE_CONCERN_ERROR,     64
                  MONGOC_ERROR_DUPLICATE_KEY,  11000
            MONGOC_ERROR_MAX_TIME_MS_EXPIRED,     50
  MONGOC_ERROR_CHANGE_STREAM_NO_RESUME_TOKEN,     51
         MONGOC_ERROR_CLIENT_SESSION_FAILURE,     52
      MONGOC_ERROR_TRANSACTION_INVALID_STATE,     53
                 MONGOC_ERROR_GRIDFS_CORRUPT,     54
   MONGOC_ERROR_GRIDFS_BUCKET_FILE_NOT_FOUND,     55
           MONGOC_ERROR_GRIDFS_BUCKET_STREAM,     56
MONGOC_ERROR_CLIENT_INVALID_ENCRYPTION_STATE,     57
  MONGOC_ERROR_CLIENT_INVALID_ENCRYPTION_ARG,     58
             BSON_JSON_ERROR_READ_CORRUPT_JS,      1
          BSON_JSON_ERROR_READ_INVALID_PARAM,      2
             BSON_JSON_ERROR_READ_CB_FAILURE,      3
                     BSON_ERROR_READER_BADFD,      1
                          BSON_VALIDATE_NONE,      0
                          BSON_VALIDATE_UTF8,      1
                   BSON_VALIDATE_DOLLAR_KEYS,      2
                      BSON_VALIDATE_DOT_KEYS,      4
               BSON_VALIDATE_UTF8_ALLOW_NULL,      8
                    BSON_VALIDATE_EMPTY_KEYS,     16 

Some overlapping domains have overlapping codes.

For example, the domains BSON_ERROR_READER = MONGOC_ERROR_STREAM share the code BSON_ERROR_READER_BADFD = MONGOC_ERROR_STREAM_INVALID_TYPE.

I am not sure if there if there are functions that could return overlapping errors (assuming error API V2 is used), but this certainly makes error handling more difficult for users.


Generated at Wed Feb 07 21:18:41 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.