diff --git a/core/errcode.c b/core/errcode.c index f817f4cd18aa69c63b3a8cb3bef734fb5e3445f3..c7bed55d1f597e3833592122ac94df3ab0311215 100644 --- a/core/errcode.c +++ b/core/errcode.c @@ -6,7 +6,7 @@ .errdesc = #d \ }, -struct errcode_record error_codes_records[error_codes_MAX] = { +struct errcode_record tnt_error_codes[tnt_error_codes_enum_MAX] = { ERROR_CODES(ERRCODE_RECORD_MEMBER) }; diff --git a/core/iproto.c b/core/iproto.c index 6c462347a4c3695712bfe19935100527b2ec9112..2f8a97675e15e41ec7055a53d971918881c02c49 100644 --- a/core/iproto.c +++ b/core/iproto.c @@ -76,7 +76,7 @@ iproto_interact(void *data) request->len = iproto(request)->len; request->data = iproto(request)->data; u32 err = callback(msg_code, request); - reply->ret_code = ERRCODE_VAL(error_codes, err); + reply->ret_code = tnt_errcode_val(err); /* * retcode is uint32_t and included int struct iproto_header_retcode diff --git a/include/errcode.h b/include/errcode.h index 193d20e2fdce517abc64232126a397cae6a7910b..7f3d4d2c77ffa9e84e7da6d2a4529f34ff0a145f 100644 --- a/include/errcode.h +++ b/include/errcode.h @@ -7,14 +7,10 @@ struct errcode_record { const char *errstr; - uint32_t errflags; const char *errdesc; + uint8_t errflags; }; -#define ERRCODE_STR(enum_name, err) (enum_name##_records[err].errstr) -#define ERRCODE_VAL(enum_name, err) (((err) << 8) | enum_name##_records[err].errflags) -#define ERRCODE_DESC(enum_name, err) (enum_name##_records[err].errdesc) - #define ERROR_CODES(_) \ /* 0 */_(ERR_CODE_OK, 0, "OK") \ /* 1 */_(ERR_CODE_NONMASTER, 2, "Non master connection, but it should be") \ @@ -79,7 +75,34 @@ struct errcode_record { /* 56 */_(ERR_CODE_INDEX_VIOLATION, 2, "Some index violation occur") \ /* 57 */_(ERR_CODE_NO_SUCH_NAMESPACE, 2, "There is no such namespace") -ENUM0(error_codes, ERROR_CODES); -extern struct errcode_record error_codes_records[]; +ENUM0(tnt_error_codes_enum, ERROR_CODES); +extern struct errcode_record tnt_error_codes[]; + +/** + * Return a string representation of error name, e.g. + * "ERR_CODE_OK". + */ + +static inline const char *tnt_errcode_str(uint32_t errcode) +{ + return tnt_error_codes[errcode].errstr; +} + + +/** Return a 4-byte numeric error code, with status flags. */ + +static inline uint32_t tnt_errcode_val(uint32_t errcode) +{ + return (errcode << 8) | tnt_error_codes[errcode].errflags; +} + + +/** Return a description of the error. */ + +static inline const char *tnt_errcode_desc(uint32_t errcode) +{ + return tnt_error_codes[errcode].errdesc; +} + -#endif +#endif /* TARANTOOL_ERRCODE_H */ diff --git a/mod/silverbox/box.h b/mod/silverbox/box.h index 4f5b6eef2cb7093cf592dc8e053af7418b6b1d6b..4eb09d600676ed399f0ae23473d1388e9cae6150 100644 --- a/mod/silverbox/box.h +++ b/mod/silverbox/box.h @@ -121,7 +121,7 @@ ENUM(messages, MESSAGES); #define box_raise(n, err) \ ({ \ if (n != ERR_CODE_NODE_IS_RO) \ - say_warn("%s/%s", ERRCODE_STR(error_codes, n), err); \ + say_warn("%s/%s", tnt_errcode_str(n), err); \ raise(n, err); \ }) diff --git a/mod/silverbox/memcached.c b/mod/silverbox/memcached.c index eff4af693b647447c85472773c9851ff7c6d01bb..108134b100f9a43630db0839a5219badb254bb4a 100644 --- a/mod/silverbox/memcached.c +++ b/mod/silverbox/memcached.c @@ -260,8 +260,8 @@ memcached_dispatch(struct box_txn *txn) add_iov("STORED\r\n", 8); \ } else { \ add_iov("SERVER_ERROR ", 13); \ - add_iov(ERRCODE_DESC(error_codes, ret_code), \ - strlen(ERRCODE_DESC(error_codes, ret_code))); \ + add_iov(tnt_errcode_desc(ret_code), \ + strlen(tnt_errcode_desc(ret_code))); \ add_iov("\r\n", 2); \ } \ } \ @@ -1078,8 +1078,8 @@ case 12: add_iov("DELETED\r\n", 9); else { add_iov("SERVER_ERROR ", 13); - add_iov(ERRCODE_DESC(error_codes, ret_code), - strlen(ERRCODE_DESC(error_codes,ret_code))); + add_iov(tnt_errcode_desc(ret_code), + strlen(tnt_errcode_desc(ret_code))); add_iov("\r\n", 2); } } @@ -1112,8 +1112,8 @@ case 12: add_iov("DELETED\r\n", 9); else { add_iov("SERVER_ERROR ", 13); - add_iov(ERRCODE_DESC(error_codes, ret_code), - strlen(ERRCODE_DESC(error_codes,ret_code))); + add_iov(tnt_errcode_desc(ret_code), + strlen(tnt_errcode_desc(ret_code))); add_iov("\r\n", 2); } } @@ -1142,8 +1142,8 @@ case 12: add_iov("DELETED\r\n", 9); else { add_iov("SERVER_ERROR ", 13); - add_iov(ERRCODE_DESC(error_codes, ret_code), - strlen(ERRCODE_DESC(error_codes,ret_code))); + add_iov(tnt_errcode_desc(ret_code), + strlen(tnt_errcode_desc(ret_code))); add_iov("\r\n", 2); } } diff --git a/mod/silverbox/memcached.rl b/mod/silverbox/memcached.rl index da7400fceca709fad1c5a446bd4b745162ab3fee..bacd6017d5f019f3dc300dd024169335fda6c402 100644 --- a/mod/silverbox/memcached.rl +++ b/mod/silverbox/memcached.rl @@ -251,8 +251,8 @@ memcached_dispatch(struct box_txn *txn) add_iov("STORED\r\n", 8); \ } else { \ add_iov("SERVER_ERROR ", 13); \ - add_iov(ERRCODE_DESC(error_codes, ret_code), \ - strlen(ERRCODE_DESC(error_codes, ret_code))); \ + add_iov(tnt_errcode_desc(ret_code), \ + strlen(tnt_errcode_desc(ret_code))); \ add_iov("\r\n", 2); \ } \ } \ @@ -382,8 +382,8 @@ memcached_dispatch(struct box_txn *txn) add_iov("DELETED\r\n", 9); else { add_iov("SERVER_ERROR ", 13); - add_iov(ERRCODE_DESC(error_codes, ret_code), - strlen(ERRCODE_DESC(error_codes,ret_code))); + add_iov(tnt_errcode_desc(ret_code), + strlen(tnt_errcode_desc(ret_code))); add_iov("\r\n", 2); } }