Format core source code and headers

Formatted core source code and headers with Astyle.
This commit is contained in:
Markus Mäkelä
2017-01-17 13:32:26 +02:00
parent f109144841
commit 0b6b9c3d81
37 changed files with 1757 additions and 1742 deletions

View File

@ -41,11 +41,12 @@ public:
// pointer_type : The type of a pointer to an element, either "uint8_t*" or "const uint8_t*". // pointer_type : The type of a pointer to an element, either "uint8_t*" or "const uint8_t*".
// reference_type: The type of a reference to an element, either "uint8_t&" or "const uint8_t&". // reference_type: The type of a reference to an element, either "uint8_t&" or "const uint8_t&".
template<class buf_type, class pointer_type, class reference_type> template<class buf_type, class pointer_type, class reference_type>
class iterator_base : public std::iterator<std::forward_iterator_tag, // The type of the iterator class iterator_base : public std::iterator <
uint8_t, // The type of the elems std::forward_iterator_tag, // The type of the iterator
std::ptrdiff_t, // Difference between two its uint8_t, // The type of the elems
pointer_type, // The type of pointer to an elem std::ptrdiff_t, // Difference between two its
reference_type> // The reference type of an elem pointer_type, // The type of pointer to an elem
reference_type > // The reference type of an elem
{ {
public: public:
/** /**

View File

@ -25,9 +25,9 @@
* - Global constants applicable across the line can be defined here. * - Global constants applicable across the line can be defined here.
*/ */
#ifdef __cplusplus #ifdef __cplusplus
# define MXS_BEGIN_DECLS extern "C" { # define MXS_BEGIN_DECLS extern "C" {
# define MXS_END_DECLS } # define MXS_END_DECLS }
#else #else
# define MXS_BEGIN_DECLS # define MXS_BEGIN_DECLS
# define MXS_END_DECLS # define MXS_END_DECLS

View File

@ -51,29 +51,29 @@ MXS_BEGIN_DECLS
# define ss_dfflush fflush # define ss_dfflush fflush
# define ss_dfwrite fwrite # define ss_dfwrite fwrite
# define ss_dassert(exp) \ # define ss_dassert(exp) \
{ \ { \
if (!(exp)) { \ if (!(exp)) { \
ss_dfprintf(stderr, \ ss_dfprintf(stderr, \
"debug assert %s:%d\n", \ "debug assert %s:%d \n", \
(char*)__FILE__, \ (char*)__FILE__, \
__LINE__); \ __LINE__); \
ss_dfflush(stderr); \ ss_dfflush(stderr); \
assert(exp); \ assert(exp); \
} \ } \
} }
# define ss_info_dassert(exp, info) \ # define ss_info_dassert(exp, info) \
{ \ { \
if (!(exp)) { \ if (!(exp)) { \
ss_dfprintf(stderr, "debug assert %s:%d, %s\n", \ ss_dfprintf(stderr, "debug assert %s:%d, %s\n", \
(char *)__FILE__, \ (char *)__FILE__, \
__LINE__, \ __LINE__, \
info); \ info); \
ss_dfflush(stderr); \ ss_dfflush(stderr); \
assert((exp)); \ assert((exp)); \
} \ } \
} }
#else /* SS_DEBUG */ #else /* SS_DEBUG */
@ -128,61 +128,61 @@ typedef enum skygw_chk_t
# define STRBOOL(b) ((b) ? "true" : "false") # define STRBOOL(b) ((b) ? "true" : "false")
# define STRQTYPE(t) ((t) == QUERY_TYPE_WRITE ? "QUERY_TYPE_WRITE" : \ # define STRQTYPE(t) ((t) == QUERY_TYPE_WRITE ? "QUERY_TYPE_WRITE" : \
((t) == QUERY_TYPE_READ ? "QUERY_TYPE_READ" : \ ((t) == QUERY_TYPE_READ ? "QUERY_TYPE_READ" : \
((t) == QUERY_TYPE_SESSION_WRITE ? "QUERY_TYPE_SESSION_WRITE" : \ ((t) == QUERY_TYPE_SESSION_WRITE ? "QUERY_TYPE_SESSION_WRITE" : \
((t) == QUERY_TYPE_UNKNOWN ? "QUERY_TYPE_UNKNOWN" : \ ((t) == QUERY_TYPE_UNKNOWN ? "QUERY_TYPE_UNKNOWN" : \
((t) == QUERY_TYPE_LOCAL_READ ? "QUERY_TYPE_LOCAL_READ" : \ ((t) == QUERY_TYPE_LOCAL_READ ? "QUERY_TYPE_LOCAL_READ" : \
((t) == QUERY_TYPE_MASTER_READ ? "QUERY_TYPE_MASTER_READ" : \ ((t) == QUERY_TYPE_MASTER_READ ? "QUERY_TYPE_MASTER_READ" : \
((t) == QUERY_TYPE_USERVAR_WRITE ? "QUERY_TYPE_USERVAR_WRITE" : \ ((t) == QUERY_TYPE_USERVAR_WRITE ? "QUERY_TYPE_USERVAR_WRITE" : \
((t) == QUERY_TYPE_USERVAR_READ ? "QUERY_TYPE_USERVAR_READ" : \ ((t) == QUERY_TYPE_USERVAR_READ ? "QUERY_TYPE_USERVAR_READ" : \
((t) == QUERY_TYPE_SYSVAR_READ ? "QUERY_TYPE_SYSVAR_READ" : \ ((t) == QUERY_TYPE_SYSVAR_READ ? "QUERY_TYPE_SYSVAR_READ" : \
((t) == QUERY_TYPE_GSYSVAR_READ ? "QUERY_TYPE_GSYSVAR_READ" : \ ((t) == QUERY_TYPE_GSYSVAR_READ ? "QUERY_TYPE_GSYSVAR_READ" : \
((t) == QUERY_TYPE_GSYSVAR_WRITE ? "QUERY_TYPE_GSYSVAR_WRITE" : \ ((t) == QUERY_TYPE_GSYSVAR_WRITE ? "QUERY_TYPE_GSYSVAR_WRITE" : \
((t) == QUERY_TYPE_BEGIN_TRX ? "QUERY_TYPE_BEGIN_TRX" : \ ((t) == QUERY_TYPE_BEGIN_TRX ? "QUERY_TYPE_BEGIN_TRX" : \
((t) == QUERY_TYPE_ENABLE_AUTOCOMMIT ? "QUERY_TYPE_ENABLE_AUTOCOMMIT" : \ ((t) == QUERY_TYPE_ENABLE_AUTOCOMMIT ? "QUERY_TYPE_ENABLE_AUTOCOMMIT" : \
((t) == QUERY_TYPE_DISABLE_AUTOCOMMIT ? "QUERY_TYPE_DISABLE_AUTOCOMMIT" : \ ((t) == QUERY_TYPE_DISABLE_AUTOCOMMIT ? "QUERY_TYPE_DISABLE_AUTOCOMMIT" : \
((t) == QUERY_TYPE_ROLLBACK ? "QUERY_TYPE_ROLLBACK" : \ ((t) == QUERY_TYPE_ROLLBACK ? "QUERY_TYPE_ROLLBACK" : \
((t) == QUERY_TYPE_COMMIT ? "QUERY_TYPE_COMMIT" : \ ((t) == QUERY_TYPE_COMMIT ? "QUERY_TYPE_COMMIT" : \
((t) == QUERY_TYPE_PREPARE_NAMED_STMT ? "QUERY_TYPE_PREPARE_NAMED_STMT" : \ ((t) == QUERY_TYPE_PREPARE_NAMED_STMT ? "QUERY_TYPE_PREPARE_NAMED_STMT" : \
((t) == QUERY_TYPE_PREPARE_STMT ? "QUERY_TYPE_PREPARE_STMT" : \ ((t) == QUERY_TYPE_PREPARE_STMT ? "QUERY_TYPE_PREPARE_STMT" : \
((t) == QUERY_TYPE_EXEC_STMT ? "QUERY_TYPE_EXEC_STMT" : \ ((t) == QUERY_TYPE_EXEC_STMT ? "QUERY_TYPE_EXEC_STMT" : \
((t) == QUERY_TYPE_CREATE_TMP_TABLE ? "QUERY_TYPE_CREATE_TMP_TABLE" : \ ((t) == QUERY_TYPE_CREATE_TMP_TABLE ? "QUERY_TYPE_CREATE_TMP_TABLE" : \
((t) == QUERY_TYPE_READ_TMP_TABLE ? "QUERY_TYPE_READ_TMP_TABLE" : \ ((t) == QUERY_TYPE_READ_TMP_TABLE ? "QUERY_TYPE_READ_TMP_TABLE" : \
((t) == QUERY_TYPE_SHOW_DATABASES ? "QUERY_TYPE_SHOW_DATABASES" : \ ((t) == QUERY_TYPE_SHOW_DATABASES ? "QUERY_TYPE_SHOW_DATABASES" : \
((t) == QUERY_TYPE_SHOW_TABLES ? "QUERY_TYPE_SHOW_TABLES" : \ ((t) == QUERY_TYPE_SHOW_TABLES ? "QUERY_TYPE_SHOW_TABLES" : \
"Unknown query type"))))))))))))))))))))))) "Unknown query type")))))))))))))))))))))))
#define STRLOGPRIORITYNAME(n)\ #define STRLOGPRIORITYNAME(n) \
((n) == LOG_EMERG ? "LOG_EMERG" : \ ((n) == LOG_EMERG ? "LOG_EMERG" : \
((n) == LOG_ALERT ? "LOG_ALERT" : \ ((n) == LOG_ALERT ? "LOG_ALERT" : \
((n) == LOG_CRIT ? "LOG_CRIT" : \ ((n) == LOG_CRIT ? "LOG_CRIT" : \
((n) == LOG_ERR ? "LOG_ERR" : \ ((n) == LOG_ERR ? "LOG_ERR" : \
((n) == LOG_WARNING ? "LOG_WARNING" : \ ((n) == LOG_WARNING ? "LOG_WARNING" : \
((n) == LOG_NOTICE ? "LOG_NOTICE" : \ ((n) == LOG_NOTICE ? "LOG_NOTICE" : \
((n) == LOG_INFO ? "LOG_INFO" : \ ((n) == LOG_INFO ? "LOG_INFO" : \
((n) == LOG_DEBUG ? "LOG_DEBUG" : \ ((n) == LOG_DEBUG ? "LOG_DEBUG" : \
"Unknown log priority")))))))) "Unknown log priority"))))))))
#define STRPACKETTYPE(p) ((p) == MYSQL_COM_INIT_DB ? "COM_INIT_DB" : \ #define STRPACKETTYPE(p) ((p) == MYSQL_COM_INIT_DB ? "COM_INIT_DB" : \
((p) == MYSQL_COM_CREATE_DB ? "COM_CREATE_DB" : \ ((p) == MYSQL_COM_CREATE_DB ? "COM_CREATE_DB" : \
((p) == MYSQL_COM_DROP_DB ? "COM_DROP_DB" : \ ((p) == MYSQL_COM_DROP_DB ? "COM_DROP_DB" : \
((p) == MYSQL_COM_REFRESH ? "COM_REFRESH" : \ ((p) == MYSQL_COM_REFRESH ? "COM_REFRESH" : \
((p) == MYSQL_COM_DEBUG ? "COM_DEBUG" : \ ((p) == MYSQL_COM_DEBUG ? "COM_DEBUG" : \
((p) == MYSQL_COM_PING ? "COM_PING" : \ ((p) == MYSQL_COM_PING ? "COM_PING" : \
((p) == MYSQL_COM_CHANGE_USER ? "COM_CHANGE_USER" : \ ((p) == MYSQL_COM_CHANGE_USER ? "COM_CHANGE_USER" : \
((p) == MYSQL_COM_QUERY ? "COM_QUERY" : \ ((p) == MYSQL_COM_QUERY ? "COM_QUERY" : \
((p) == MYSQL_COM_SHUTDOWN ? "COM_SHUTDOWN" : \ ((p) == MYSQL_COM_SHUTDOWN ? "COM_SHUTDOWN" : \
((p) == MYSQL_COM_PROCESS_INFO ? "COM_PROCESS_INFO" : \ ((p) == MYSQL_COM_PROCESS_INFO ? "COM_PROCESS_INFO" : \
((p) == MYSQL_COM_CONNECT ? "COM_CONNECT" : \ ((p) == MYSQL_COM_CONNECT ? "COM_CONNECT" : \
((p) == MYSQL_COM_PROCESS_KILL ? "COM_PROCESS_KILL" : \ ((p) == MYSQL_COM_PROCESS_KILL ? "COM_PROCESS_KILL" : \
((p) == MYSQL_COM_TIME ? "COM_TIME" : \ ((p) == MYSQL_COM_TIME ? "COM_TIME" : \
((p) == MYSQL_COM_DELAYED_INSERT ? "COM_DELAYED_INSERT" : \ ((p) == MYSQL_COM_DELAYED_INSERT ? "COM_DELAYED_INSERT" : \
((p) == MYSQL_COM_DAEMON ? "COM_DAEMON" : \ ((p) == MYSQL_COM_DAEMON ? "COM_DAEMON" : \
((p) == MYSQL_COM_QUIT ? "COM_QUIT" : \ ((p) == MYSQL_COM_QUIT ? "COM_QUIT" : \
((p) == MYSQL_COM_STMT_PREPARE ? "MYSQL_COM_STMT_PREPARE" : \ ((p) == MYSQL_COM_STMT_PREPARE ? "MYSQL_COM_STMT_PREPARE" : \
((p) == MYSQL_COM_STMT_EXECUTE ? "MYSQL_COM_STMT_EXECUTE" : \ ((p) == MYSQL_COM_STMT_EXECUTE ? "MYSQL_COM_STMT_EXECUTE" : \
"UNKNOWN MYSQL PACKET TYPE")))))))))))))))))) "UNKNOWN MYSQL PACKET TYPE"))))))))))))))))))
#define STRDCBSTATE(s) ((s) == DCB_STATE_ALLOC ? "DCB_STATE_ALLOC" : \ #define STRDCBSTATE(s) ((s) == DCB_STATE_ALLOC ? "DCB_STATE_ALLOC" : \
((s) == DCB_STATE_POLLING ? "DCB_STATE_POLLING" : \ ((s) == DCB_STATE_POLLING ? "DCB_STATE_POLLING" : \
@ -198,47 +198,47 @@ typedef enum skygw_chk_t
((s) == SESSION_STATE_LISTENER ? "SESSION_STATE_LISTENER" : \ ((s) == SESSION_STATE_LISTENER ? "SESSION_STATE_LISTENER" : \
((s) == SESSION_STATE_ROUTER_READY ? "SESSION_STATE_ROUTER_READY" : \ ((s) == SESSION_STATE_ROUTER_READY ? "SESSION_STATE_ROUTER_READY" : \
((s) == SESSION_STATE_LISTENER_STOPPED ? "SESSION_STATE_LISTENER_STOPPED" : \ ((s) == SESSION_STATE_LISTENER_STOPPED ? "SESSION_STATE_LISTENER_STOPPED" : \
(s) == SESSION_STATE_STOPPING ? "SESSION_STATE_STOPPING":\ (s) == SESSION_STATE_STOPPING ? "SESSION_STATE_STOPPING": \
"SESSION_STATE_UNKNOWN")))))) "SESSION_STATE_UNKNOWN"))))))
#define STRPROTOCOLSTATE(s) ((s) == MXS_AUTH_STATE_INIT ? "MXS_AUTH_STATE_INIT" : \ #define STRPROTOCOLSTATE(s) ((s) == MXS_AUTH_STATE_INIT ? "MXS_AUTH_STATE_INIT" : \
((s) == MXS_AUTH_STATE_PENDING_CONNECT ? "MXS_AUTH_STATE_PENDING_CONNECT" : \ ((s) == MXS_AUTH_STATE_PENDING_CONNECT ? "MXS_AUTH_STATE_PENDING_CONNECT" : \
((s) == MXS_AUTH_STATE_CONNECTED ? "MXS_AUTH_STATE_CONNECTED" : \ ((s) == MXS_AUTH_STATE_CONNECTED ? "MXS_AUTH_STATE_CONNECTED" : \
((s) == MXS_AUTH_STATE_MESSAGE_READ ? "MXS_AUTH_STATE_MESSAGE_READ" : \ ((s) == MXS_AUTH_STATE_MESSAGE_READ ? "MXS_AUTH_STATE_MESSAGE_READ" : \
((s) == MXS_AUTH_STATE_RESPONSE_SENT ? "MXS_AUTH_STATE_RESPONSE_SENT" : \ ((s) == MXS_AUTH_STATE_RESPONSE_SENT ? "MXS_AUTH_STATE_RESPONSE_SENT" : \
((s) == MXS_AUTH_STATE_FAILED ? "MXS_AUTH_STATE_FAILED" : \ ((s) == MXS_AUTH_STATE_FAILED ? "MXS_AUTH_STATE_FAILED" : \
((s) == MXS_AUTH_STATE_COMPLETE ? "MXS_AUTH_STATE_COMPLETE" : \ ((s) == MXS_AUTH_STATE_COMPLETE ? "MXS_AUTH_STATE_COMPLETE" : \
"UNKNOWN AUTH STATE"))))))) "UNKNOWN AUTH STATE")))))))
#define STRITEMTYPE(t) ((t) == Item::FIELD_ITEM ? "FIELD_ITEM" : \ #define STRITEMTYPE(t) ((t) == Item::FIELD_ITEM ? "FIELD_ITEM" : \
((t) == Item::FUNC_ITEM ? "FUNC_ITEM" : \ ((t) == Item::FUNC_ITEM ? "FUNC_ITEM" : \
((t) == Item::SUM_FUNC_ITEM ? "SUM_FUNC_ITEM" : \ ((t) == Item::SUM_FUNC_ITEM ? "SUM_FUNC_ITEM" : \
((t) == Item::STRING_ITEM ? "STRING_ITEM" : \ ((t) == Item::STRING_ITEM ? "STRING_ITEM" : \
((t) == Item::INT_ITEM ? "INT_ITEM" : \ ((t) == Item::INT_ITEM ? "INT_ITEM" : \
((t) == Item::REAL_ITEM ? "REAL_ITEM" : \ ((t) == Item::REAL_ITEM ? "REAL_ITEM" : \
((t) == Item::NULL_ITEM ? "NULL_ITEM" : \ ((t) == Item::NULL_ITEM ? "NULL_ITEM" : \
((t) == Item::VARBIN_ITEM ? "VARBIN_ITEM" : \ ((t) == Item::VARBIN_ITEM ? "VARBIN_ITEM" : \
((t) == Item::COPY_STR_ITEM ? "COPY_STR_ITEM" : \ ((t) == Item::COPY_STR_ITEM ? "COPY_STR_ITEM" : \
((t) == Item::FIELD_AVG_ITEM ? "FIELD_AVG_ITEM" : \ ((t) == Item::FIELD_AVG_ITEM ? "FIELD_AVG_ITEM" : \
((t) == Item::DEFAULT_VALUE_ITEM ? "DEFAULT_VALUE_ITEM" : \ ((t) == Item::DEFAULT_VALUE_ITEM ? "DEFAULT_VALUE_ITEM" : \
((t) == Item::PROC_ITEM ? "PROC_ITEM" : \ ((t) == Item::PROC_ITEM ? "PROC_ITEM" : \
((t) == Item::COND_ITEM ? "COND_ITEM" : \ ((t) == Item::COND_ITEM ? "COND_ITEM" : \
((t) == Item::REF_ITEM ? "REF_ITEM" : \ ((t) == Item::REF_ITEM ? "REF_ITEM" : \
(t) == Item::FIELD_STD_ITEM ? "FIELD_STD_ITEM" : \ (t) == Item::FIELD_STD_ITEM ? "FIELD_STD_ITEM" : \
((t) == Item::FIELD_VARIANCE_ITEM ? "FIELD_VARIANCE_ITEM" : \ ((t) == Item::FIELD_VARIANCE_ITEM ? "FIELD_VARIANCE_ITEM" : \
((t) == Item::INSERT_VALUE_ITEM ? "INSERT_VALUE_ITEM": \ ((t) == Item::INSERT_VALUE_ITEM ? "INSERT_VALUE_ITEM": \
((t) == Item::SUBSELECT_ITEM ? "SUBSELECT_ITEM" : \ ((t) == Item::SUBSELECT_ITEM ? "SUBSELECT_ITEM" : \
((t) == Item::ROW_ITEM ? "ROW_ITEM" : \ ((t) == Item::ROW_ITEM ? "ROW_ITEM" : \
((t) == Item::CACHE_ITEM ? "CACHE_ITEM" : \ ((t) == Item::CACHE_ITEM ? "CACHE_ITEM" : \
((t) == Item::TYPE_HOLDER ? "TYPE_HOLDER" : \ ((t) == Item::TYPE_HOLDER ? "TYPE_HOLDER" : \
((t) == Item::PARAM_ITEM ? "PARAM_ITEM" : \ ((t) == Item::PARAM_ITEM ? "PARAM_ITEM" : \
((t) == Item::TRIGGER_FIELD_ITEM ? "TRIGGER_FIELD_ITEM" : \ ((t) == Item::TRIGGER_FIELD_ITEM ? "TRIGGER_FIELD_ITEM" : \
((t) == Item::DECIMAL_ITEM ? "DECIMAL_ITEM" : \ ((t) == Item::DECIMAL_ITEM ? "DECIMAL_ITEM" : \
((t) == Item::XPATH_NODESET ? "XPATH_NODESET" : \ ((t) == Item::XPATH_NODESET ? "XPATH_NODESET" : \
((t) == Item::XPATH_NODESET_CMP ? "XPATH_NODESET_CMP" : \ ((t) == Item::XPATH_NODESET_CMP ? "XPATH_NODESET_CMP" : \
((t) == Item::VIEW_FIXER_ITEM ? "VIEW_FIXER_ITEM" : \ ((t) == Item::VIEW_FIXER_ITEM ? "VIEW_FIXER_ITEM" : \
((t) == Item::EXPR_CACHE_ITEM ? "EXPR_CACHE_ITEM" : \ ((t) == Item::EXPR_CACHE_ITEM ? "EXPR_CACHE_ITEM" : \
"Unknown item"))))))))))))))))))))))))))) "Unknown item")))))))))))))))))))))))))))
#define STRDCBROLE(r) ((r) == DCB_ROLE_SERVICE_LISTENER ? "DCB_ROLE_SERVICE_LISTENER" : \ #define STRDCBROLE(r) ((r) == DCB_ROLE_SERVICE_LISTENER ? "DCB_ROLE_SERVICE_LISTENER" : \
((r) == DCB_ROLE_CLIENT_HANDLER ? "DCB_ROLE_CLIENT_HANDLER" : \ ((r) == DCB_ROLE_CLIENT_HANDLER ? "DCB_ROLE_CLIENT_HANDLER" : \
@ -246,319 +246,319 @@ typedef enum skygw_chk_t
((r) == DCB_ROLE_INTERNAL ? "DCB_ROLE_INTERNAL" : \ ((r) == DCB_ROLE_INTERNAL ? "DCB_ROLE_INTERNAL" : \
"UNKNOWN DCB ROLE")))) "UNKNOWN DCB ROLE"))))
#define STRBETYPE(t) ((t) == BE_MASTER ? "BE_MASTER" : \ #define STRBETYPE(t) ((t) == BE_MASTER ? "BE_MASTER" : \
((t) == BE_SLAVE ? "BE_SLAVE" : \ ((t) == BE_SLAVE ? "BE_SLAVE" : \
((t) == BE_UNDEFINED ? "BE_UNDEFINED" : \ ((t) == BE_UNDEFINED ? "BE_UNDEFINED" : \
"Unknown backend tpe"))) "Unknown backend tpe")))
#define STRCRITERIA(c) ((c) == UNDEFINED_CRITERIA ? "UNDEFINED_CRITERIA" : \ #define STRCRITERIA(c) ((c) == UNDEFINED_CRITERIA ? "UNDEFINED_CRITERIA" : \
((c) == LEAST_GLOBAL_CONNECTIONS ? "LEAST_GLOBAL_CONNECTIONS" : \ ((c) == LEAST_GLOBAL_CONNECTIONS ? "LEAST_GLOBAL_CONNECTIONS" : \
((c) == LEAST_ROUTER_CONNECTIONS ? "LEAST_ROUTER_CONNECTIONS" : \ ((c) == LEAST_ROUTER_CONNECTIONS ? "LEAST_ROUTER_CONNECTIONS" : \
((c) == LEAST_BEHIND_MASTER ? "LEAST_BEHIND_MASTER" : \ ((c) == LEAST_BEHIND_MASTER ? "LEAST_BEHIND_MASTER" : \
((c) == LEAST_CURRENT_OPERATIONS ? "LEAST_CURRENT_OPERATIONS" : "Unknown criteria"))))) ((c) == LEAST_CURRENT_OPERATIONS ? "LEAST_CURRENT_OPERATIONS" : "Unknown criteria")))))
#define STRSRVSTATUS(s) (SERVER_IS_MASTER(s) ? "RUNNING MASTER" : \ #define STRSRVSTATUS(s) (SERVER_IS_MASTER(s) ? "RUNNING MASTER" : \
(SERVER_IS_SLAVE(s) ? "RUNNING SLAVE" : \ (SERVER_IS_SLAVE(s) ? "RUNNING SLAVE" : \
(SERVER_IS_JOINED(s) ? "RUNNING JOINED" : \ (SERVER_IS_JOINED(s) ? "RUNNING JOINED" : \
(SERVER_IS_NDB(s) ? "RUNNING NDB" : \ (SERVER_IS_NDB(s) ? "RUNNING NDB" : \
((SERVER_IS_RUNNING(s) && SERVER_IN_MAINT(s)) ? "RUNNING MAINTENANCE" : \ ((SERVER_IS_RUNNING(s) && SERVER_IN_MAINT(s)) ? "RUNNING MAINTENANCE" : \
(SERVER_IS_RELAY_SERVER(s) ? "RUNNING RELAY" : \ (SERVER_IS_RELAY_SERVER(s) ? "RUNNING RELAY" : \
(SERVER_IS_RUNNING(s) ? "RUNNING (only)" : \ (SERVER_IS_RUNNING(s) ? "RUNNING (only)" : \
(SERVER_IS_DOWN(s) ? "DOWN" : "UNKNOWN STATUS")))))))) (SERVER_IS_DOWN(s) ? "DOWN" : "UNKNOWN STATUS"))))))))
#define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \ #define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \
(t == TARGET_MASTER ? "TARGET_MASTER" : \ (t == TARGET_MASTER ? "TARGET_MASTER" : \
(t == TARGET_SLAVE ? "TARGET_SLAVE" : \ (t == TARGET_SLAVE ? "TARGET_SLAVE" : \
(t == TARGET_NAMED_SERVER ? "TARGET_NAMED_SERVER" : \ (t == TARGET_NAMED_SERVER ? "TARGET_NAMED_SERVER" : \
(t == TARGET_UNDEFINED ? "TARGET_UNDEFINED" : \ (t == TARGET_UNDEFINED ? "TARGET_UNDEFINED" : \
"Unknown target value"))))) "Unknown target value")))))
#define BREFSRV(b) (b->bref_backend->backend_server) #define BREFSRV(b) (b->bref_backend->backend_server)
#define STRHINTTYPE(t) (t == HINT_ROUTE_TO_MASTER ? "HINT_ROUTE_TO_MASTER" : \ #define STRHINTTYPE(t) (t == HINT_ROUTE_TO_MASTER ? "HINT_ROUTE_TO_MASTER" : \
((t) == HINT_ROUTE_TO_SLAVE ? "HINT_ROUTE_TO_SLAVE" : \ ((t) == HINT_ROUTE_TO_SLAVE ? "HINT_ROUTE_TO_SLAVE" : \
((t) == HINT_ROUTE_TO_NAMED_SERVER ? "HINT_ROUTE_TO_NAMED_SERVER" : \ ((t) == HINT_ROUTE_TO_NAMED_SERVER ? "HINT_ROUTE_TO_NAMED_SERVER" : \
((t) == HINT_ROUTE_TO_UPTODATE_SERVER ? "HINT_ROUTE_TO_UPTODATE_SERVER" : \ ((t) == HINT_ROUTE_TO_UPTODATE_SERVER ? "HINT_ROUTE_TO_UPTODATE_SERVER" : \
((t) == HINT_ROUTE_TO_ALL ? "HINT_ROUTE_TO_ALL" : \ ((t) == HINT_ROUTE_TO_ALL ? "HINT_ROUTE_TO_ALL" : \
((t) == HINT_PARAMETER ? "HINT_PARAMETER" : "UNKNOWN HINT TYPE")))))) ((t) == HINT_PARAMETER ? "HINT_PARAMETER" : "UNKNOWN HINT TYPE"))))))
#define STRDCBREASON(r) ((r) == DCB_REASON_CLOSE ? "DCB_REASON_CLOSE" : \ #define STRDCBREASON(r) ((r) == DCB_REASON_CLOSE ? "DCB_REASON_CLOSE" : \
((r) == DCB_REASON_DRAINED ? "DCB_REASON_DRAINED" : \ ((r) == DCB_REASON_DRAINED ? "DCB_REASON_DRAINED" : \
((r) == DCB_REASON_HIGH_WATER ? "DCB_REASON_HIGH_WATER" : \ ((r) == DCB_REASON_HIGH_WATER ? "DCB_REASON_HIGH_WATER" : \
((r) == DCB_REASON_LOW_WATER ? "DCB_REASON_LOW_WATER" : \ ((r) == DCB_REASON_LOW_WATER ? "DCB_REASON_LOW_WATER" : \
((r) == DCB_REASON_ERROR ? "DCB_REASON_ERROR" : \ ((r) == DCB_REASON_ERROR ? "DCB_REASON_ERROR" : \
((r) == DCB_REASON_HUP ? "DCB_REASON_HUP" : \ ((r) == DCB_REASON_HUP ? "DCB_REASON_HUP" : \
((r) == DCB_REASON_NOT_RESPONDING ? "DCB_REASON_NOT_RESPONDING" : \ ((r) == DCB_REASON_NOT_RESPONDING ? "DCB_REASON_NOT_RESPONDING" : \
"Unknown DCB reason"))))))) "Unknown DCB reason")))))))
#define CHK_MLIST(l) { \ #define CHK_MLIST(l) { \
ss_info_dassert((l->mlist_chk_top == CHK_NUM_MLIST && \ ss_info_dassert((l->mlist_chk_top == CHK_NUM_MLIST && \
l->mlist_chk_tail == CHK_NUM_MLIST), \ l->mlist_chk_tail == CHK_NUM_MLIST), \
"Single-linked list structure under- or overflow"); \ "Single-linked list structure under- or overflow"); \
if (l->mlist_first == NULL) { \ if (l->mlist_first == NULL) { \
ss_info_dassert(l->mlist_nodecount == 0, \ ss_info_dassert(l->mlist_nodecount == 0, \
"List head is NULL but element counter is not zero."); \ "List head is NULL but element counter is not zero."); \
ss_info_dassert(l->mlist_last == NULL, \ ss_info_dassert(l->mlist_last == NULL, \
"List head is NULL but tail has node"); \ "List head is NULL but tail has node"); \
} else { \ } else { \
ss_info_dassert(l->mlist_nodecount > 0, \ ss_info_dassert(l->mlist_nodecount > 0, \
"List head has node but element counter is not " \ "List head has node but element counter is not " \
"positive."); \ "positive."); \
CHK_MLIST_NODE(l->mlist_first); \ CHK_MLIST_NODE(l->mlist_first); \
CHK_MLIST_NODE(l->mlist_last); \ CHK_MLIST_NODE(l->mlist_last); \
} \ } \
if (l->mlist_nodecount == 0) { \ if (l->mlist_nodecount == 0) { \
ss_info_dassert(l->mlist_first == NULL, \ ss_info_dassert(l->mlist_first == NULL, \
"Element counter is zero but head has node"); \ "Element counter is zero but head has node"); \
ss_info_dassert(l->mlist_last == NULL, \ ss_info_dassert(l->mlist_last == NULL, \
"Element counter is zero but tail has node"); \ "Element counter is zero but tail has node"); \
} \ } \
} }
#define CHK_MLIST_NODE(n) { \ #define CHK_MLIST_NODE(n) { \
ss_info_dassert((n->mlnode_chk_top == CHK_NUM_MLIST_NODE && \ ss_info_dassert((n->mlnode_chk_top == CHK_NUM_MLIST_NODE && \
n->mlnode_chk_tail == CHK_NUM_MLIST_NODE), \ n->mlnode_chk_tail == CHK_NUM_MLIST_NODE), \
"Single-linked list node under- or overflow"); \ "Single-linked list node under- or overflow"); \
} }
#define CHK_MLIST_CURSOR(c) { \ #define CHK_MLIST_CURSOR(c) { \
ss_info_dassert(c->mlcursor_chk_top == CHK_NUM_MLIST_CURSOR && \ ss_info_dassert(c->mlcursor_chk_top == CHK_NUM_MLIST_CURSOR && \
c->mlcursor_chk_tail == CHK_NUM_MLIST_CURSOR, \ c->mlcursor_chk_tail == CHK_NUM_MLIST_CURSOR, \
"List cursor under- or overflow"); \ "List cursor under- or overflow"); \
ss_info_dassert(c->mlcursor_list != NULL, \ ss_info_dassert(c->mlcursor_list != NULL, \
"List cursor doesn't have list"); \ "List cursor doesn't have list"); \
ss_info_dassert(c->mlcursor_pos != NULL || \ ss_info_dassert(c->mlcursor_pos != NULL || \
(c->mlcursor_pos == NULL && \ (c->mlcursor_pos == NULL && \
c->mlcursor_list->mlist_first == NULL), \ c->mlcursor_list->mlist_first == NULL), \
"List cursor doesn't have position"); \ "List cursor doesn't have position"); \
} }
#define CHK_SLIST(l) { \ #define CHK_SLIST(l) { \
ss_info_dassert((l->slist_chk_top == CHK_NUM_SLIST && \ ss_info_dassert((l->slist_chk_top == CHK_NUM_SLIST && \
l->slist_chk_tail == CHK_NUM_SLIST), \ l->slist_chk_tail == CHK_NUM_SLIST), \
"Single-linked list structure under- or overflow"); \ "Single-linked list structure under- or overflow"); \
if (l->slist_head == NULL) { \ if (l->slist_head == NULL) { \
ss_info_dassert(l->slist_nelems == 0, \ ss_info_dassert(l->slist_nelems == 0, \
"List head is NULL but element counter is not zero."); \ "List head is NULL but element counter is not zero."); \
ss_info_dassert(l->slist_tail == NULL, \ ss_info_dassert(l->slist_tail == NULL, \
"List head is NULL but tail has node"); \ "List head is NULL but tail has node"); \
} else { \ } else { \
ss_info_dassert(l->slist_nelems > 0, \ ss_info_dassert(l->slist_nelems > 0, \
"List head has node but element counter is not " \ "List head has node but element counter is not " \
"positive."); \ "positive."); \
CHK_SLIST_NODE(l->slist_head); \ CHK_SLIST_NODE(l->slist_head); \
CHK_SLIST_NODE(l->slist_tail); \ CHK_SLIST_NODE(l->slist_tail); \
} \ } \
if (l->slist_nelems == 0) { \ if (l->slist_nelems == 0) { \
ss_info_dassert(l->slist_head == NULL, \ ss_info_dassert(l->slist_head == NULL, \
"Element counter is zero but head has node"); \ "Element counter is zero but head has node"); \
ss_info_dassert(l->slist_tail == NULL, \ ss_info_dassert(l->slist_tail == NULL, \
"Element counter is zero but tail has node"); \ "Element counter is zero but tail has node"); \
} \ } \
} }
#define CHK_SLIST_NODE(n) { \ #define CHK_SLIST_NODE(n) { \
ss_info_dassert((n->slnode_chk_top == CHK_NUM_SLIST_NODE && \ ss_info_dassert((n->slnode_chk_top == CHK_NUM_SLIST_NODE && \
n->slnode_chk_tail == CHK_NUM_SLIST_NODE), \ n->slnode_chk_tail == CHK_NUM_SLIST_NODE), \
"Single-linked list node under- or overflow"); \ "Single-linked list node under- or overflow"); \
} }
#define CHK_SLIST_CURSOR(c) { \ #define CHK_SLIST_CURSOR(c) { \
ss_info_dassert(c->slcursor_chk_top == CHK_NUM_SLIST_CURSOR && \ ss_info_dassert(c->slcursor_chk_top == CHK_NUM_SLIST_CURSOR && \
c->slcursor_chk_tail == CHK_NUM_SLIST_CURSOR, \ c->slcursor_chk_tail == CHK_NUM_SLIST_CURSOR, \
"List cursor under- or overflow"); \ "List cursor under- or overflow"); \
ss_info_dassert(c->slcursor_list != NULL, \ ss_info_dassert(c->slcursor_list != NULL, \
"List cursor doesn't have list"); \ "List cursor doesn't have list"); \
ss_info_dassert(c->slcursor_pos != NULL || \ ss_info_dassert(c->slcursor_pos != NULL || \
(c->slcursor_pos == NULL && \ (c->slcursor_pos == NULL && \
c->slcursor_list->slist_head == NULL), \ c->slcursor_list->slist_head == NULL), \
"List cursor doesn't have position"); \ "List cursor doesn't have position"); \
}
#define CHK_QUERY_TEST(q) { \
ss_info_dassert(q->qt_chk_top == CHK_NUM_QUERY_TEST && \
q->qt_chk_tail == CHK_NUM_QUERY_TEST, \
"Query test under- or overflow."); \
}
#define CHK_LOGFILE(lf) { \
ss_info_dassert(lf->lf_chk_top == CHK_NUM_LOGFILE && \
lf->lf_chk_tail == CHK_NUM_LOGFILE, \
"Logfile struct under- or overflow"); \
ss_info_dassert(lf->lf_filepath != NULL && \
lf->lf_name_prefix != NULL && \
lf->lf_name_suffix != NULL && \
lf->lf_full_file_name != NULL, \
"NULL in name variable\n"); \
}
#define CHK_FILEWRITER(fwr) { \
ss_info_dassert(fwr->fwr_chk_top == CHK_NUM_FILEWRITER && \
fwr->fwr_chk_tail == CHK_NUM_FILEWRITER, \
"File writer struct under- or overflow"); \
} }
#define CHK_THREAD(thr) { \ #define CHK_QUERY_TEST(q) { \
ss_info_dassert(thr->sth_chk_top == CHK_NUM_THREAD && \ ss_info_dassert(q->qt_chk_top == CHK_NUM_QUERY_TEST && \
thr->sth_chk_tail == CHK_NUM_THREAD, \ q->qt_chk_tail == CHK_NUM_QUERY_TEST, \
"Thread struct under- or overflow"); \ "Query test under- or overflow."); \
}
#define CHK_SIMPLE_MUTEX(sm) { \
ss_info_dassert(sm->sm_chk_top == CHK_NUM_SIMPLE_MUTEX && \
sm->sm_chk_tail == CHK_NUM_SIMPLE_MUTEX, \
"Simple mutex struct under- or overflow"); \
} }
#define CHK_MESSAGE(mes) { \ #define CHK_LOGFILE(lf) { \
ss_info_dassert(mes->mes_chk_top == CHK_NUM_MESSAGE && \ ss_info_dassert(lf->lf_chk_top == CHK_NUM_LOGFILE && \
mes->mes_chk_tail == CHK_NUM_MESSAGE, \ lf->lf_chk_tail == CHK_NUM_LOGFILE, \
"Message struct under- or overflow"); \ "Logfile struct under- or overflow"); \
ss_info_dassert(lf->lf_filepath != NULL && \
lf->lf_name_prefix != NULL && \
lf->lf_name_suffix != NULL && \
lf->lf_full_file_name != NULL, \
"NULL in name variable\n"); \
}
#define CHK_FILEWRITER(fwr) { \
ss_info_dassert(fwr->fwr_chk_top == CHK_NUM_FILEWRITER && \
fwr->fwr_chk_tail == CHK_NUM_FILEWRITER, \
"File writer struct under- or overflow"); \
}
#define CHK_THREAD(thr) { \
ss_info_dassert(thr->sth_chk_top == CHK_NUM_THREAD && \
thr->sth_chk_tail == CHK_NUM_THREAD, \
"Thread struct under- or overflow"); \
}
#define CHK_SIMPLE_MUTEX(sm) { \
ss_info_dassert(sm->sm_chk_top == CHK_NUM_SIMPLE_MUTEX && \
sm->sm_chk_tail == CHK_NUM_SIMPLE_MUTEX, \
"Simple mutex struct under- or overflow"); \
}
#define CHK_MESSAGE(mes) { \
ss_info_dassert(mes->mes_chk_top == CHK_NUM_MESSAGE && \
mes->mes_chk_tail == CHK_NUM_MESSAGE, \
"Message struct under- or overflow"); \
} }
#define CHK_MLIST_ISLOCKED(l) { \ #define CHK_MLIST_ISLOCKED(l) { \
ss_info_dassert((l.mlist_uselock && l.mlist_islocked) || \ ss_info_dassert((l.mlist_uselock && l.mlist_islocked) || \
!(l.mlist_uselock || l.mlist_islocked), \ !(l.mlist_uselock || l.mlist_islocked), \
("mlist is not locked although it should.")); \ ("mlist is not locked although it should.")); \
CHK_MUTEXED_FOR_THR(l.mlist_uselock,l.mlist_rwlock); \ CHK_MUTEXED_FOR_THR(l.mlist_uselock,l.mlist_rwlock); \
} }
#define CHK_MUTEXED_FOR_THR(b,l) { \ #define CHK_MUTEXED_FOR_THR(b,l) { \
ss_info_dassert(!b || \ ss_info_dassert(!b || \
(b && (l->srw_rwlock_thr == pthread_self())), \ (b && (l->srw_rwlock_thr == pthread_self())), \
"rwlock is not acquired although it should be."); \ "rwlock is not acquired although it should be."); \
} }
#define CHK_FNAMES_CONF(fn) { \ #define CHK_FNAMES_CONF(fn) { \
ss_info_dassert(fn->fn_chk_top == CHK_NUM_FNAMES && \ ss_info_dassert(fn->fn_chk_top == CHK_NUM_FNAMES && \
fn->fn_chk_tail == CHK_NUM_FNAMES, \ fn->fn_chk_tail == CHK_NUM_FNAMES, \
"File names confs struct under- or overflow"); \ "File names confs struct under- or overflow"); \
} }
#define CHK_LOGMANAGER(lm) { \ #define CHK_LOGMANAGER(lm) { \
ss_info_dassert(lm->lm_chk_top == CHK_NUM_LOGMANAGER && \ ss_info_dassert(lm->lm_chk_top == CHK_NUM_LOGMANAGER && \
lm->lm_chk_tail == CHK_NUM_LOGMANAGER, \ lm->lm_chk_tail == CHK_NUM_LOGMANAGER, \
"Log manager struct under- or overflow"); \ "Log manager struct under- or overflow"); \
} }
#define CHK_FILE(f) { \ #define CHK_FILE(f) { \
ss_info_dassert(f->sf_chk_top == CHK_NUM_FILE && \ ss_info_dassert(f->sf_chk_top == CHK_NUM_FILE && \
f->sf_chk_tail == CHK_NUM_FILE, \ f->sf_chk_tail == CHK_NUM_FILE, \
"File struct under- or overflow"); \ "File struct under- or overflow"); \
} }
#define CHK_BLOCKBUF(bb) { \ #define CHK_BLOCKBUF(bb) { \
ss_info_dassert(bb->bb_chk_top == CHK_NUM_BLOCKBUF, \ ss_info_dassert(bb->bb_chk_top == CHK_NUM_BLOCKBUF, \
"Block buf under- or overflow"); \ "Block buf under- or overflow"); \
} }
#define CHK_HASHTABLE(t) { \ #define CHK_HASHTABLE(t) { \
ss_info_dassert(t->ht_chk_top == CHK_NUM_HASHTABLE && \ ss_info_dassert(t->ht_chk_top == CHK_NUM_HASHTABLE && \
t->ht_chk_tail == CHK_NUM_HASHTABLE, \ t->ht_chk_tail == CHK_NUM_HASHTABLE, \
"Hashtable under- or overflow"); \ "Hashtable under- or overflow"); \
} }
#define CHK_MANAGED_LIST(l) { \ #define CHK_MANAGED_LIST(l) { \
ss_info_dassert(l->list_entry_chk_top == CHK_NUM_MANAGED_LIST && \ ss_info_dassert(l->list_entry_chk_top == CHK_NUM_MANAGED_LIST && \
l->list_entry_chk_tail == CHK_NUM_MANAGED_LIST, \ l->list_entry_chk_tail == CHK_NUM_MANAGED_LIST, \
"Managed list under- or overflow"); \ "Managed list under- or overflow"); \
}
#define CHK_DCB(d) { \
ss_info_dassert(d->dcb_chk_top == CHK_NUM_DCB && \
d->dcb_chk_tail == CHK_NUM_DCB, \
"Dcb under- or overflow"); \
}
#define CHK_PROTOCOL(p) { \
ss_info_dassert(p->protocol_chk_top == CHK_NUM_PROTOCOL && \
p->protocol_chk_tail == CHK_NUM_PROTOCOL, \
"Protocol under- or overflow"); \
} }
#define CHK_SESSION(s) { \ #define CHK_DCB(d) { \
ss_info_dassert(s->ses_chk_top == CHK_NUM_SESSION && \ ss_info_dassert(d->dcb_chk_top == CHK_NUM_DCB && \
s->ses_chk_tail == CHK_NUM_SESSION, \ d->dcb_chk_tail == CHK_NUM_DCB, \
"Session under- or overflow"); \ "Dcb under- or overflow"); \
} }
#define CHK_SERVER(s) { \ #define CHK_PROTOCOL(p) { \
ss_info_dassert(s->server_chk_top == CHK_NUM_SERVER && \ ss_info_dassert(p->protocol_chk_top == CHK_NUM_PROTOCOL && \
s->server_chk_tail == CHK_NUM_SERVER, \ p->protocol_chk_tail == CHK_NUM_PROTOCOL, \
"Server under- or overflow"); \ "Protocol under- or overflow"); \
} }
#define CHK_GWBUF(b) { \ #define CHK_SESSION(s) { \
ss_info_dassert(((char *)(b)->start <= (char *)(b)->end), \ ss_info_dassert(s->ses_chk_top == CHK_NUM_SESSION && \
"gwbuf start has passed the endpoint"); \ s->ses_chk_tail == CHK_NUM_SESSION, \
"Session under- or overflow"); \
}
#define CHK_SERVER(s) { \
ss_info_dassert(s->server_chk_top == CHK_NUM_SERVER && \
s->server_chk_tail == CHK_NUM_SERVER, \
"Server under- or overflow"); \
}
#define CHK_GWBUF(b) { \
ss_info_dassert(((char *)(b)->start <= (char *)(b)->end), \
"gwbuf start has passed the endpoint"); \
} }
#define CHK_CLIENT_RSES(r) { \ #define CHK_CLIENT_RSES(r) { \
ss_info_dassert((r)->rses_chk_top == CHK_NUM_ROUTER_SES && \ ss_info_dassert((r)->rses_chk_top == CHK_NUM_ROUTER_SES && \
(r)->rses_chk_tail == CHK_NUM_ROUTER_SES, \ (r)->rses_chk_tail == CHK_NUM_ROUTER_SES, \
"Router client session has invalid check fields"); \ "Router client session has invalid check fields"); \
} }
#define CHK_RSES_PROP(p) { \ #define CHK_RSES_PROP(p) { \
ss_info_dassert((p)->rses_prop_chk_top == CHK_NUM_ROUTER_PROPERTY && \ ss_info_dassert((p)->rses_prop_chk_top == CHK_NUM_ROUTER_PROPERTY && \
(p)->rses_prop_chk_tail == CHK_NUM_ROUTER_PROPERTY, \ (p)->rses_prop_chk_tail == CHK_NUM_ROUTER_PROPERTY, \
"Router property has invalid check fields"); \ "Router property has invalid check fields"); \
} }
#define CHK_MYSQL_SESCMD(s) { \ #define CHK_MYSQL_SESCMD(s) { \
ss_info_dassert((s)->my_sescmd_chk_top == CHK_NUM_MY_SESCMD && \ ss_info_dassert((s)->my_sescmd_chk_top == CHK_NUM_MY_SESCMD && \
(s)->my_sescmd_chk_tail == CHK_NUM_MY_SESCMD, \ (s)->my_sescmd_chk_tail == CHK_NUM_MY_SESCMD, \
"Session command has invalid check fields"); \ "Session command has invalid check fields"); \
} }
#define CHK_SESCMD_CUR(c) { \ #define CHK_SESCMD_CUR(c) { \
ss_info_dassert((c)->scmd_cur_chk_top == CHK_NUM_SESCMD_CUR && \ ss_info_dassert((c)->scmd_cur_chk_top == CHK_NUM_SESCMD_CUR && \
(c)->scmd_cur_chk_tail == CHK_NUM_SESCMD_CUR, \ (c)->scmd_cur_chk_tail == CHK_NUM_SESCMD_CUR, \
"Session command cursor has invalid check fields"); \ "Session command cursor has invalid check fields"); \
} }
#define CHK_BACKEND(b) { \ #define CHK_BACKEND(b) { \
ss_info_dassert((b)->be_chk_top == CHK_NUM_BACKEND && \ ss_info_dassert((b)->be_chk_top == CHK_NUM_BACKEND && \
(b)->be_chk_tail == CHK_NUM_BACKEND, \ (b)->be_chk_tail == CHK_NUM_BACKEND, \
"BACKEND has invalid check fields"); \ "BACKEND has invalid check fields"); \
} }
#define CHK_BACKEND_REF(r) { \ #define CHK_BACKEND_REF(r) { \
ss_info_dassert((r)->bref_chk_top == CHK_NUM_BACKEND_REF && \ ss_info_dassert((r)->bref_chk_top == CHK_NUM_BACKEND_REF && \
(r)->bref_chk_tail == CHK_NUM_BACKEND_REF, \ (r)->bref_chk_tail == CHK_NUM_BACKEND_REF, \
"Backend reference has invalid check fields"); \ "Backend reference has invalid check fields"); \
} }
#define CHK_PREP_STMT(p) { \ #define CHK_PREP_STMT(p) { \
ss_info_dassert((p)->pstmt_chk_top == CHK_NUM_PREP_STMT && \ ss_info_dassert((p)->pstmt_chk_top == CHK_NUM_PREP_STMT && \
(p)->pstmt_chk_tail == CHK_NUM_PREP_STMT, \ (p)->pstmt_chk_tail == CHK_NUM_PREP_STMT, \
"Prepared statement struct has invalid check fields"); \ "Prepared statement struct has invalid check fields"); \
} }
#define CHK_PARSING_INFO(p) { \ #define CHK_PARSING_INFO(p) { \
ss_info_dassert((p)->pi_chk_top == CHK_NUM_PINFO && \ ss_info_dassert((p)->pi_chk_top == CHK_NUM_PINFO && \
(p)->pi_chk_tail == CHK_NUM_PINFO, \ (p)->pi_chk_tail == CHK_NUM_PINFO, \
"Parsing info struct has invalid check fields"); \ "Parsing info struct has invalid check fields"); \
} }
#define CHK_MYSQL_SESSION(s) { \ #define CHK_MYSQL_SESSION(s) { \
ss_info_dassert((s)->myses_chk_top == CHK_NUM_MYSQLSES && \ ss_info_dassert((s)->myses_chk_top == CHK_NUM_MYSQLSES && \
(s)->myses_chk_tail == CHK_NUM_MYSQLSES, \ (s)->myses_chk_tail == CHK_NUM_MYSQLSES, \
"MYSQL session struct has invalid check fields"); \ "MYSQL session struct has invalid check fields"); \
} }
#define CHK_ADMIN_SESSION(s) { \ #define CHK_ADMIN_SESSION(s) { \
ss_info_dassert((s)->adminses_chk_top == CHK_NUM_ADMINSES && \ ss_info_dassert((s)->adminses_chk_top == CHK_NUM_ADMINSES && \
(s)->adminses_chk_tail == CHK_NUM_ADMINSES, \ (s)->adminses_chk_tail == CHK_NUM_ADMINSES, \
"Admin session struct has invalid check fields"); \ "Admin session struct has invalid check fields"); \
} }
MXS_END_DECLS MXS_END_DECLS

View File

@ -71,7 +71,8 @@ typedef struct ssl_listener
char *ssl_key; /*< SSL private key */ char *ssl_key; /*< SSL private key */
char *ssl_ca_cert; /*< SSL CA certificate */ char *ssl_ca_cert; /*< SSL CA certificate */
bool ssl_init_done; /*< If SSL has already been initialized for this service */ bool ssl_init_done; /*< If SSL has already been initialized for this service */
struct ssl_listener *next; /*< Next SSL configuration, currently used to store obsolete configurations */ struct ssl_listener
*next; /*< Next SSL configuration, currently used to store obsolete configurations */
} SSL_LISTENER; } SSL_LISTENER;
int ssl_authenticate_client(struct dcb *dcb, bool is_capable); int ssl_authenticate_client(struct dcb *dcb, bool is_capable);

View File

@ -73,8 +73,8 @@ typedef struct servlistener
bool listener_serialize(const SERV_LISTENER *listener); bool listener_serialize(const SERV_LISTENER *listener);
SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol, SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol,
const char *address, unsigned short port, const char *authenticator, const char *address, unsigned short port, const char *authenticator,
const char* auth_options, SSL_LISTENER *ssl); const char* auth_options, SSL_LISTENER *ssl);
void listener_free(SERV_LISTENER* listener); void listener_free(SERV_LISTENER* listener);
int listener_set_ssl_version(SSL_LISTENER *ssl_listener, char* version); int listener_set_ssl_version(SSL_LISTENER *ssl_listener, char* version);
void listener_set_certificates(SSL_LISTENER *ssl_listener, char* cert, char* key, char* ca_cert); void listener_set_certificates(SSL_LISTENER *ssl_listener, char* cert, char* key, char* ca_cert);

View File

@ -107,7 +107,7 @@ typedef struct mxs_enum_value
{ {
const char *name; /**< Name of the enum value */ const char *name; /**< Name of the enum value */
int enum_value; /**< The integer value of the enum */ int enum_value; /**< The integer value of the enum */
}MXS_ENUM_VALUE; } MXS_ENUM_VALUE;
/** Module parameter declaration */ /** Module parameter declaration */
typedef struct mxs_module_param typedef struct mxs_module_param

View File

@ -190,9 +190,9 @@ static const MXS_ENUM_VALUE monitor_event_enum_values[] =
/** Default value for the `events` parameter */ /** Default value for the `events` parameter */
static const char MONITOR_EVENT_DEFAULT_VALUE[] = "master_down,master_up,slave_down," static const char MONITOR_EVENT_DEFAULT_VALUE[] = "master_down,master_up,slave_down,"
"slave_up,server_down,server_up,synced_down,synced_up,donor_down,donor_up," "slave_up,server_down,server_up,synced_down,synced_up,donor_down,donor_up,"
"ndb_down,ndb_up,lost_master,lost_slave,lost_synced,lost_donor,lost_ndb," "ndb_down,ndb_up,lost_master,lost_slave,lost_synced,lost_donor,lost_ndb,"
"new_master,new_slave,new_synced,new_donor,new_ndb"; "new_master,new_slave,new_synced,new_donor,new_ndb";
/** /**
* The linked list of servers that are being monitored by the monitor module. * The linked list of servers that are being monitored by the monitor module.
@ -235,8 +235,8 @@ struct monitor
size_t interval; /**< The monitor interval */ size_t interval; /**< The monitor interval */
bool created_online; /**< Whether this monitor was created at runtime */ bool created_online; /**< Whether this monitor was created at runtime */
volatile bool server_pending_changes; volatile bool server_pending_changes;
/**< Are there any pending changes to a server? /**< Are there any pending changes to a server?
* If yes, the next monitor loop starts early. */ * If yes, the next monitor loop starts early. */
struct monitor *next; /**< Next monitor in the linked list */ struct monitor *next; /**< Next monitor in the linked list */
}; };

View File

@ -89,7 +89,7 @@ size_t unpack_temporal_value(uint8_t type, uint8_t *ptr, uint8_t* metadata, stru
size_t unpack_enum(uint8_t *ptr, uint8_t *metadata, uint8_t *dest); size_t unpack_enum(uint8_t *ptr, uint8_t *metadata, uint8_t *dest);
size_t unpack_numeric_field(uint8_t *ptr, uint8_t type, uint8_t* metadata, uint8_t* val); size_t unpack_numeric_field(uint8_t *ptr, uint8_t type, uint8_t* metadata, uint8_t* val);
size_t unpack_bit(uint8_t *ptr, uint8_t *null_mask, uint32_t col_count, size_t unpack_bit(uint8_t *ptr, uint8_t *null_mask, uint32_t col_count,
uint32_t curr_col_index, uint8_t *metadata, uint64_t *dest); uint32_t curr_col_index, uint8_t *metadata, uint64_t *dest);
size_t unpack_decimal_field(uint8_t *ptr, uint8_t *metadata, double *val_float); size_t unpack_decimal_field(uint8_t *ptr, uint8_t *metadata, double *val_float);
void format_temporal_value(char *str, size_t size, uint8_t type, struct tm *tm); void format_temporal_value(char *str, size_t size, uint8_t type, struct tm *tm);

View File

@ -66,7 +66,7 @@ static inline int
mxs_queue_count(QUEUE_CONFIG *queue_config) mxs_queue_count(QUEUE_CONFIG *queue_config)
{ {
int count = queue_config->end - queue_config->start; int count = queue_config->end - queue_config->start;
return count < 0 ? (count + queue_config->queue_limit + 1): count; return count < 0 ? (count + queue_config->queue_limit + 1) : count;
} }
MXS_END_DECLS MXS_END_DECLS

View File

@ -77,11 +77,11 @@ typedef struct router_object
void (*diagnostics)(ROUTER *instance, DCB *dcb); void (*diagnostics)(ROUTER *instance, DCB *dcb);
void (*clientReply)(ROUTER* instance, void* router_session, GWBUF* queue, DCB *backend_dcb); void (*clientReply)(ROUTER* instance, void* router_session, GWBUF* queue, DCB *backend_dcb);
void (*handleError)(ROUTER* instance, void (*handleError)(ROUTER* instance,
void* router_session, void* router_session,
GWBUF* errmsgbuf, GWBUF* errmsgbuf,
DCB* backend_dcb, DCB* backend_dcb,
error_action_t action, error_action_t action,
bool* succp); bool* succp);
uint64_t (*getCapabilities)(void); uint64_t (*getCapabilities)(void);
void (*destroyInstance)(ROUTER *instance); void (*destroyInstance)(ROUTER *instance);
} ROUTER_OBJECT; } ROUTER_OBJECT;

View File

@ -531,8 +531,8 @@ int gwbuf_compare(const GWBUF* lhs, const GWBUF* rhs)
uint8_t lc; uint8_t lc;
uint8_t rc; uint8_t rc;
ss_debug(bool rv1 =) gwbuf_get_byte(&lhs, &loffset, &lc); ss_debug(bool rv1 = ) gwbuf_get_byte(&lhs, &loffset, &lc);
ss_debug(bool rv2 =) gwbuf_get_byte(&rhs, &roffset, &rc); ss_debug(bool rv2 = ) gwbuf_get_byte(&rhs, &roffset, &rc);
ss_dassert(rv1 && rv2); ss_dassert(rv1 && rv2);

View File

@ -173,9 +173,9 @@ static const char *monitor_params[] =
static const char *filter_params[] = static const char *filter_params[] =
{ {
"type", "type",
"module", "module",
NULL NULL
}; };
static const char *server_params[] = static const char *server_params[] =
@ -576,21 +576,21 @@ static bool contains_cnf_files(const char *path)
switch (rc) switch (rc)
{ {
case 0: case 0:
rval = true; rval = true;
break; break;
case GLOB_NOSPACE: case GLOB_NOSPACE:
MXS_OOM(); MXS_OOM();
break; break;
case GLOB_ABORTED: case GLOB_ABORTED:
MXS_ERROR("Failed to read directory '%s'", path); MXS_ERROR("Failed to read directory '%s'", path);
break; break;
default: default:
ss_dassert(rc == GLOB_NOMATCH); ss_dassert(rc == GLOB_NOMATCH);
break; break;
} }
globfree(&matches); globfree(&matches);
@ -955,56 +955,56 @@ uint64_t config_get_size(const CONFIG_PARAMETER *params, const char *key)
switch (*end) switch (*end)
{ {
case 'T': case 'T':
case 't': case 't':
if (*(end + 1) == 'i') if (*(end + 1) == 'i')
{ {
size *= 1024ULL * 1024ULL * 1024ULL * 1024ULL; size *= 1024ULL * 1024ULL * 1024ULL * 1024ULL;
} }
else else
{ {
size *= 1000ULL * 1000ULL * 1000ULL * 1000ULL; size *= 1000ULL * 1000ULL * 1000ULL * 1000ULL;
} }
break; break;
case 'G': case 'G':
case 'g': case 'g':
if (*(end + 1) == 'i') if (*(end + 1) == 'i')
{ {
size *= 1024ULL * 1024ULL * 1024ULL; size *= 1024ULL * 1024ULL * 1024ULL;
} }
else else
{ {
size *= 1000ULL * 1000ULL * 1000ULL; size *= 1000ULL * 1000ULL * 1000ULL;
} }
break; break;
case 'M': case 'M':
case 'm': case 'm':
if (*(end + 1) == 'i') if (*(end + 1) == 'i')
{ {
size *= 1024ULL * 1024ULL; size *= 1024ULL * 1024ULL;
} }
else else
{ {
size *= 1000ULL * 1000ULL; size *= 1000ULL * 1000ULL;
} }
break; break;
case 'K': case 'K':
case 'k': case 'k':
if (*(end + 1) == 'i') if (*(end + 1) == 'i')
{ {
size *= 1024ULL; size *= 1024ULL;
} }
else else
{ {
size *= 1000ULL; size *= 1000ULL;
} }
break; break;
default: default:
break; break;
} }
return size; return size;
@ -3151,10 +3151,10 @@ bool config_have_required_ssl_params(CONFIG_CONTEXT *obj)
CONFIG_PARAMETER *param = obj->parameters; CONFIG_PARAMETER *param = obj->parameters;
return config_get_param(param, "ssl") && return config_get_param(param, "ssl") &&
config_get_param(param, "ssl_key") && config_get_param(param, "ssl_key") &&
config_get_param(param, "ssl_cert") && config_get_param(param, "ssl_cert") &&
config_get_param(param, "ssl_ca_cert") && config_get_param(param, "ssl_ca_cert") &&
strcmp(config_get_value_string(param, "ssl"), "required") == 0; strcmp(config_get_value_string(param, "ssl"), "required") == 0;
} }
bool config_is_ssl_parameter(const char *key) bool config_is_ssl_parameter(const char *key)
@ -3266,125 +3266,125 @@ bool config_param_is_valid(const MXS_MODULE_PARAM *params, const char *key,
switch (params[i].type) switch (params[i].type)
{ {
case MXS_MODULE_PARAM_COUNT: case MXS_MODULE_PARAM_COUNT:
if ((strtol(value, &endptr, 10)) >= 0 && endptr != value && *endptr == '\0') if ((strtol(value, &endptr, 10)) >= 0 && endptr != value && *endptr == '\0')
{ {
valid = true; valid = true;
} }
break; break;
case MXS_MODULE_PARAM_INT: case MXS_MODULE_PARAM_INT:
strtol(value, &endptr, 10); strtol(value, &endptr, 10);
if (endptr != value && *endptr == '\0') if (endptr != value && *endptr == '\0')
{ {
valid = true; valid = true;
} }
break; break;
case MXS_MODULE_PARAM_SIZE: case MXS_MODULE_PARAM_SIZE:
strtoll(value, &endptr, 10); strtoll(value, &endptr, 10);
if (endptr != value) if (endptr != value)
{
switch (*endptr)
{ {
switch (*endptr) case 'T':
case 't':
case 'G':
case 'g':
case 'M':
case 'm':
case 'K':
case 'k':
if (*endptr == '\0' ||
(*endptr == 'i' && *(endptr + 1) == '\0'))
{ {
case 'T': valid = true;
case 't': }
case 'G': break;
case 'g':
case 'M':
case 'm':
case 'K':
case 'k':
if (*endptr == '\0' ||
(*endptr == 'i' && *(endptr + 1) == '\0'))
{
valid = true;
}
break;
case '\0': case '\0':
valid = true;
break;
default:
break;
}
}
break;
case MXS_MODULE_PARAM_BOOL:
if (config_truth_value(value) != -1)
{
valid = true;
}
break;
case MXS_MODULE_PARAM_STRING:
if (*value)
{
valid = true;
}
break;
case MXS_MODULE_PARAM_ENUM:
if (params[i].accepted_values)
{
char *endptr;
const char *delim = ", \t";
char buf[strlen(value) + 1];
strcpy(buf, value);
char *tok = strtok_r(buf, delim, &endptr);
while (tok)
{
valid = false;
for (int j = 0; params[i].accepted_values[j].name; j++)
{
if (strcmp(params[i].accepted_values[j].name, tok) == 0)
{
valid = true; valid = true;
break; break;
}
default:
break;
} }
}
break;
case MXS_MODULE_PARAM_BOOL: tok = strtok_r(NULL, delim, &endptr);
if (config_truth_value(value) != -1)
{
valid = true;
}
break;
case MXS_MODULE_PARAM_STRING: if ((params[i].options & MXS_MODULE_OPT_ENUM_UNIQUE) && (tok || !valid))
if (*value)
{
valid = true;
}
break;
case MXS_MODULE_PARAM_ENUM:
if (params[i].accepted_values)
{
char *endptr;
const char *delim = ", \t";
char buf[strlen(value) + 1];
strcpy(buf, value);
char *tok = strtok_r(buf, delim, &endptr);
while (tok)
{ {
/** Either the only defined enum value is not valid
* or multiple values were defined */
valid = false; valid = false;
break;
for (int j = 0; params[i].accepted_values[j].name; j++)
{
if (strcmp(params[i].accepted_values[j].name, tok) == 0)
{
valid = true;
break;
}
}
tok = strtok_r(NULL, delim, &endptr);
if ((params[i].options & MXS_MODULE_OPT_ENUM_UNIQUE) && (tok || !valid))
{
/** Either the only defined enum value is not valid
* or multiple values were defined */
valid = false;
break;
}
} }
} }
break; }
break;
case MXS_MODULE_PARAM_SERVICE: case MXS_MODULE_PARAM_SERVICE:
if ((context && config_contains_type(context, value, "service")) || if ((context && config_contains_type(context, value, "service")) ||
service_find(value)) service_find(value))
{ {
valid = true; valid = true;
} }
break; break;
case MXS_MODULE_PARAM_SERVER: case MXS_MODULE_PARAM_SERVER:
if ((context && config_contains_type(context, value, "server")) || if ((context && config_contains_type(context, value, "server")) ||
server_find_by_unique_name(value)) server_find_by_unique_name(value))
{ {
valid = true; valid = true;
} }
break; break;
case MXS_MODULE_PARAM_PATH: case MXS_MODULE_PARAM_PATH:
valid = check_path_parameter(&params[i], value); valid = check_path_parameter(&params[i], value);
break; break;
default: default:
MXS_ERROR("Unexpected module parameter type: %d", params[i].type); MXS_ERROR("Unexpected module parameter type: %d", params[i].type);
ss_dassert(false); ss_dassert(false);
break; break;
} }
} }
} }

View File

@ -680,7 +680,7 @@ dcb_connect(SERVER *server, SESSION *session, const char *protocol)
} }
if ((funcs = (MXS_PROTOCOL *)load_module(protocol, if ((funcs = (MXS_PROTOCOL *)load_module(protocol,
MODULE_PROTOCOL)) == NULL) MODULE_PROTOCOL)) == NULL)
{ {
dcb->state = DCB_STATE_DISCONNECTED; dcb->state = DCB_STATE_DISCONNECTED;
dcb_final_free(dcb); dcb_final_free(dcb);
@ -693,8 +693,8 @@ dcb_connect(SERVER *server, SESSION *session, const char *protocol)
dcb->protoname = MXS_STRDUP_A(protocol); dcb->protoname = MXS_STRDUP_A(protocol);
const char *authenticator = server->authenticator ? const char *authenticator = server->authenticator ?
server->authenticator : dcb->func.auth_default ? server->authenticator : dcb->func.auth_default ?
dcb->func.auth_default() : "NullAuthDeny"; dcb->func.auth_default() : "NullAuthDeny";
GWAUTHENTICATOR *authfuncs = (GWAUTHENTICATOR*)load_module(authenticator, GWAUTHENTICATOR *authfuncs = (GWAUTHENTICATOR*)load_module(authenticator,
MODULE_AUTHENTICATOR); MODULE_AUTHENTICATOR);
@ -1141,7 +1141,7 @@ dcb_basic_read_SSL(DCB *dcb, int *nsingleread)
MXS_DEBUG("%lu [%s] SSL connection appears to have hung up", MXS_DEBUG("%lu [%s] SSL connection appears to have hung up",
pthread_self(), pthread_self(),
__func__ __func__
); );
poll_fake_hangup_event(dcb); poll_fake_hangup_event(dcb);
*nsingleread = 0; *nsingleread = 0;
break; break;
@ -1151,7 +1151,7 @@ dcb_basic_read_SSL(DCB *dcb, int *nsingleread)
MXS_DEBUG("%lu [%s] SSL connection want read", MXS_DEBUG("%lu [%s] SSL connection want read",
pthread_self(), pthread_self(),
__func__ __func__
); );
dcb->ssl_read_want_write = false; dcb->ssl_read_want_write = false;
dcb->ssl_read_want_read = true; dcb->ssl_read_want_read = true;
*nsingleread = 0; *nsingleread = 0;
@ -1162,7 +1162,7 @@ dcb_basic_read_SSL(DCB *dcb, int *nsingleread)
MXS_DEBUG("%lu [%s] SSL connection want write", MXS_DEBUG("%lu [%s] SSL connection want write",
pthread_self(), pthread_self(),
__func__ __func__
); );
dcb->ssl_read_want_write = true; dcb->ssl_read_want_write = true;
dcb->ssl_read_want_read = false; dcb->ssl_read_want_read = false;
*nsingleread = 0; *nsingleread = 0;
@ -1583,25 +1583,25 @@ static void log_illegal_dcb(DCB *dcb)
switch (dcb->dcb_role) switch (dcb->dcb_role)
{ {
case DCB_ROLE_BACKEND_HANDLER: case DCB_ROLE_BACKEND_HANDLER:
connected_to = dcb->server->unique_name; connected_to = dcb->server->unique_name;
break; break;
case DCB_ROLE_CLIENT_HANDLER: case DCB_ROLE_CLIENT_HANDLER:
connected_to = dcb->remote; connected_to = dcb->remote;
break; break;
case DCB_ROLE_INTERNAL: case DCB_ROLE_INTERNAL:
connected_to = "Internal DCB"; connected_to = "Internal DCB";
break; break;
case DCB_ROLE_SERVICE_LISTENER: case DCB_ROLE_SERVICE_LISTENER:
connected_to = dcb->service->name; connected_to = dcb->service->name;
break; break;
default: default:
connected_to = "Illegal DCB role"; connected_to = "Illegal DCB role";
break; break;
} }
MXS_ERROR("[dcb_close] Error : Removing DCB %p but it is in state %s " MXS_ERROR("[dcb_close] Error : Removing DCB %p but it is in state %s "
@ -1840,12 +1840,12 @@ void printAllDCBs()
void void
dprintOneDCB(DCB *pdcb, DCB *dcb) dprintOneDCB(DCB *pdcb, DCB *dcb)
{ {
/* TODO: Uncomment once listmanager code is in use /* TODO: Uncomment once listmanager code is in use
if (false == dcb->entry_is_in_use) if (false == dcb->entry_is_in_use)
{ {
return; return;
} }
*/ */
dcb_printf(pdcb, "DCB: %p\n", (void *)dcb); dcb_printf(pdcb, "DCB: %p\n", (void *)dcb);
dcb_printf(pdcb, "\tDCB state: %s\n", dcb_printf(pdcb, "\tDCB state: %s\n",
gw_dcb_state2string(dcb->state)); gw_dcb_state2string(dcb->state));
@ -2147,22 +2147,22 @@ gw_dcb_state2string(dcb_state_t state)
{ {
switch (state) switch (state)
{ {
case DCB_STATE_ALLOC: case DCB_STATE_ALLOC:
return "DCB Allocated"; return "DCB Allocated";
case DCB_STATE_POLLING: case DCB_STATE_POLLING:
return "DCB in the polling loop"; return "DCB in the polling loop";
case DCB_STATE_NOPOLLING: case DCB_STATE_NOPOLLING:
return "DCB not in polling loop"; return "DCB not in polling loop";
case DCB_STATE_LISTENING: case DCB_STATE_LISTENING:
return "DCB for listening socket"; return "DCB for listening socket";
case DCB_STATE_DISCONNECTED: case DCB_STATE_DISCONNECTED:
return "DCB socket closed"; return "DCB socket closed";
case DCB_STATE_ZOMBIE: case DCB_STATE_ZOMBIE:
return "DCB Zombie"; return "DCB Zombie";
case DCB_STATE_UNDEFINED: case DCB_STATE_UNDEFINED:
return "DCB undefined state"; return "DCB undefined state";
default: default:
return "DCB (unknown - erroneous)"; return "DCB (unknown - erroneous)";
} }
} }
@ -2661,40 +2661,40 @@ bool count_by_usage_cb(DCB *dcb, void *data)
switch (d->type) switch (d->type)
{ {
case DCB_USAGE_CLIENT: case DCB_USAGE_CLIENT:
if (DCB_ROLE_CLIENT_HANDLER == dcb->dcb_role) if (DCB_ROLE_CLIENT_HANDLER == dcb->dcb_role)
{ {
d->count++;
}
break;
case DCB_USAGE_LISTENER:
if (dcb->state == DCB_STATE_LISTENING)
{
d->count++;
}
break;
case DCB_USAGE_BACKEND:
if (dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER)
{
d->count++;
}
break;
case DCB_USAGE_INTERNAL:
if (dcb->dcb_role == DCB_ROLE_CLIENT_HANDLER ||
dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER)
{
d->count++;
}
break;
case DCB_USAGE_ZOMBIE:
if (DCB_ISZOMBIE(dcb))
{
d->count++;
}
break;
case DCB_USAGE_ALL:
d->count++; d->count++;
break; }
break;
case DCB_USAGE_LISTENER:
if (dcb->state == DCB_STATE_LISTENING)
{
d->count++;
}
break;
case DCB_USAGE_BACKEND:
if (dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER)
{
d->count++;
}
break;
case DCB_USAGE_INTERNAL:
if (dcb->dcb_role == DCB_ROLE_CLIENT_HANDLER ||
dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER)
{
d->count++;
}
break;
case DCB_USAGE_ZOMBIE:
if (DCB_ISZOMBIE(dcb))
{
d->count++;
}
break;
case DCB_USAGE_ALL:
d->count++;
break;
} }
return true; return true;
@ -2767,52 +2767,52 @@ int dcb_accept_SSL(DCB* dcb)
switch (SSL_get_error(dcb->ssl, ssl_rval)) switch (SSL_get_error(dcb->ssl, ssl_rval))
{ {
case SSL_ERROR_NONE: case SSL_ERROR_NONE:
MXS_DEBUG("SSL_accept done for %s@%s", user, remote); MXS_DEBUG("SSL_accept done for %s@%s", user, remote);
dcb->ssl_state = SSL_ESTABLISHED; dcb->ssl_state = SSL_ESTABLISHED;
dcb->ssl_read_want_write = false; dcb->ssl_read_want_write = false;
return 1; return 1;
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
MXS_DEBUG("SSL_accept ongoing want read for %s@%s", user, remote); MXS_DEBUG("SSL_accept ongoing want read for %s@%s", user, remote);
return 0; return 0;
case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_WRITE:
MXS_DEBUG("SSL_accept ongoing want write for %s@%s", user, remote); MXS_DEBUG("SSL_accept ongoing want write for %s@%s", user, remote);
dcb->ssl_read_want_write = true; dcb->ssl_read_want_write = true;
return 0; return 0;
case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_ZERO_RETURN:
MXS_DEBUG("SSL error, shut down cleanly during SSL accept %s@%s", user, remote); MXS_DEBUG("SSL error, shut down cleanly during SSL accept %s@%s", user, remote);
dcb_log_errors_SSL(dcb, __func__, 0); dcb_log_errors_SSL(dcb, __func__, 0);
poll_fake_hangup_event(dcb);
return 0;
case SSL_ERROR_SYSCALL:
MXS_DEBUG("SSL connection SSL_ERROR_SYSCALL error during accept %s@%s", user, remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{
dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb); poll_fake_hangup_event(dcb);
return -1;
}
else
{
return 0; return 0;
}
case SSL_ERROR_SYSCALL: default:
MXS_DEBUG("SSL connection SSL_ERROR_SYSCALL error during accept %s@%s", user, remote); MXS_DEBUG("SSL connection shut down with error during SSL accept %s@%s", user, remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0) if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{ {
dcb->ssl_state = SSL_HANDSHAKE_FAILED; dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb); poll_fake_hangup_event(dcb);
return -1; return -1;
} }
else else
{ {
return 0; return 0;
} }
default:
MXS_DEBUG("SSL connection shut down with error during SSL accept %s@%s", user, remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{
dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb);
return -1;
}
else
{
return 0;
}
} }
} }
@ -2841,60 +2841,60 @@ int dcb_connect_SSL(DCB* dcb)
ssl_rval = SSL_connect(dcb->ssl); ssl_rval = SSL_connect(dcb->ssl);
switch (SSL_get_error(dcb->ssl, ssl_rval)) switch (SSL_get_error(dcb->ssl, ssl_rval))
{ {
case SSL_ERROR_NONE: case SSL_ERROR_NONE:
MXS_DEBUG("SSL_connect done for %s", dcb->remote); MXS_DEBUG("SSL_connect done for %s", dcb->remote);
dcb->ssl_state = SSL_ESTABLISHED; dcb->ssl_state = SSL_ESTABLISHED;
dcb->ssl_read_want_write = false; dcb->ssl_read_want_write = false;
return_code = 1; return_code = 1;
break; break;
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
MXS_DEBUG("SSL_connect ongoing want read for %s", dcb->remote); MXS_DEBUG("SSL_connect ongoing want read for %s", dcb->remote);
return_code = 0;
break;
case SSL_ERROR_WANT_WRITE:
MXS_DEBUG("SSL_connect ongoing want write for %s", dcb->remote);
dcb->ssl_read_want_write = true;
return_code = 0;
break;
case SSL_ERROR_ZERO_RETURN:
MXS_DEBUG("SSL error, shut down cleanly during SSL connect %s", dcb->remote);
if (dcb_log_errors_SSL(dcb, __func__, 0) < 0)
{
poll_fake_hangup_event(dcb);
}
return_code = 0;
break;
case SSL_ERROR_SYSCALL:
MXS_DEBUG("SSL connection shut down with SSL_ERROR_SYSCALL during SSL connect %s", dcb->remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{
dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb);
return_code = -1;
}
else
{
return_code = 0; return_code = 0;
break; }
break;
case SSL_ERROR_WANT_WRITE: default:
MXS_DEBUG("SSL_connect ongoing want write for %s", dcb->remote); MXS_DEBUG("SSL connection shut down with error during SSL connect %s", dcb->remote);
dcb->ssl_read_want_write = true; if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
return_code = 0; {
break; dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb);
case SSL_ERROR_ZERO_RETURN: return -1;
MXS_DEBUG("SSL error, shut down cleanly during SSL connect %s", dcb->remote); }
if (dcb_log_errors_SSL(dcb, __func__, 0) < 0) else
{ {
poll_fake_hangup_event(dcb); return 0;
} }
return_code = 0; break;
break;
case SSL_ERROR_SYSCALL:
MXS_DEBUG("SSL connection shut down with SSL_ERROR_SYSCALL during SSL connect %s", dcb->remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{
dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb);
return_code = -1;
}
else
{
return_code = 0;
}
break;
default:
MXS_DEBUG("SSL connection shut down with error during SSL connect %s", dcb->remote);
if (dcb_log_errors_SSL(dcb, __func__, ssl_rval) < 0)
{
dcb->ssl_state = SSL_HANDSHAKE_FAILED;
poll_fake_hangup_event(dcb);
return -1;
}
else
{
return 0;
}
break;
} }
return return_code; return return_code;
} }
@ -3014,7 +3014,7 @@ dcb_accept(DCB *listener)
/** Allocate DCB specific authentication data */ /** Allocate DCB specific authentication data */
if (client_dcb->authfunc.create && if (client_dcb->authfunc.create &&
(client_dcb->authenticator_data = client_dcb->authfunc.create( (client_dcb->authenticator_data = client_dcb->authfunc.create(
client_dcb->listener->auth_instance)) == NULL) client_dcb->listener->auth_instance)) == NULL)
{ {
MXS_ERROR("Failed to create authenticator for client DCB."); MXS_ERROR("Failed to create authenticator for client DCB.");
dcb_close(client_dcb); dcb_close(client_dcb);

View File

@ -216,17 +216,17 @@ bool externcmd_substitute_arg(EXTERNCMD* cmd, const char* match, const char* rep
mxs_pcre2_result_t rc = mxs_pcre2_substitute(re, cmd->argv[i], replace, &dest, &size); mxs_pcre2_result_t rc = mxs_pcre2_substitute(re, cmd->argv[i], replace, &dest, &size);
switch (rc) switch (rc)
{ {
case MXS_PCRE2_ERROR: case MXS_PCRE2_ERROR:
MXS_FREE(dest); MXS_FREE(dest);
rval = false; rval = false;
break; break;
case MXS_PCRE2_MATCH: case MXS_PCRE2_MATCH:
MXS_FREE(cmd->argv[i]); MXS_FREE(cmd->argv[i]);
cmd->argv[i] = dest; cmd->argv[i] = dest;
break; break;
case MXS_PCRE2_NOMATCH: case MXS_PCRE2_NOMATCH:
MXS_FREE(dest); MXS_FREE(dest);
break; break;
} }
} }
} }

View File

@ -1327,186 +1327,186 @@ int main(int argc, char **argv)
switch (opt) switch (opt)
{ {
case 'd': case 'd':
/*< Debug mode, maxscale runs in this same process */ /*< Debug mode, maxscale runs in this same process */
daemon_mode = false; daemon_mode = false;
break; break;
case 'f': case 'f':
/*< /*<
* Simply copy the conf file argument. Expand or validate * Simply copy the conf file argument. Expand or validate
* it when MaxScale home directory is resolved. * it when MaxScale home directory is resolved.
*/ */
if (optarg[0] != '-') if (optarg[0] != '-')
{ {
cnf_file_arg = strndup(optarg, PATH_MAX); cnf_file_arg = strndup(optarg, PATH_MAX);
} }
if (cnf_file_arg == NULL) if (cnf_file_arg == NULL)
{ {
const char* logerr = const char* logerr =
"Configuration file argument " "Configuration file argument "
"identifier \'-f\' was specified but " "identifier \'-f\' was specified but "
"the argument didn't specify\n a valid " "the argument didn't specify\n a valid "
"configuration file or the argument " "configuration file or the argument "
"was missing."; "was missing.";
print_log_n_stderr(true, true, logerr, logerr, 0); print_log_n_stderr(true, true, logerr, logerr, 0);
usage(); usage();
succp = false; succp = false;
} }
break; break;
case 'v': case 'v':
rc = EXIT_SUCCESS; rc = EXIT_SUCCESS;
printf("MaxScale %s\n", MAXSCALE_VERSION); printf("MaxScale %s\n", MAXSCALE_VERSION);
goto return_main; goto return_main;
case 'V': case 'V':
rc = EXIT_SUCCESS; rc = EXIT_SUCCESS;
printf("MaxScale %s - %s\n", MAXSCALE_VERSION, maxscale_commit); printf("MaxScale %s - %s\n", MAXSCALE_VERSION, maxscale_commit);
goto return_main; goto return_main;
case 'l': case 'l':
if (strncasecmp(optarg, "file", PATH_MAX) == 0) if (strncasecmp(optarg, "file", PATH_MAX) == 0)
{ {
*log_to_shm = false; *log_to_shm = false;
log_to_shm_configured = true; log_to_shm_configured = true;
} }
else if (strncasecmp(optarg, "shm", PATH_MAX) == 0) else if (strncasecmp(optarg, "shm", PATH_MAX) == 0)
{ {
*log_to_shm = true; *log_to_shm = true;
log_to_shm_configured = true; log_to_shm_configured = true;
} }
else if (strncasecmp(optarg, "stdout", PATH_MAX) == 0) else if (strncasecmp(optarg, "stdout", PATH_MAX) == 0)
{ {
to_stdout = true; to_stdout = true;
*log_to_shm = false; *log_to_shm = false;
log_to_shm_configured = true; log_to_shm_configured = true;
} }
else else
{ {
const char* logerr = const char* logerr =
"Configuration file argument " "Configuration file argument "
"identifier \'-l\' was specified but " "identifier \'-l\' was specified but "
"the argument didn't specify\n a valid " "the argument didn't specify\n a valid "
"configuration file or the argument " "configuration file or the argument "
"was missing."; "was missing.";
print_log_n_stderr(true, true, logerr, logerr, 0); print_log_n_stderr(true, true, logerr, logerr, 0);
usage(); usage();
succp = false; succp = false;
} }
break; break;
case 'L': case 'L':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
set_logdir(tmp_path); set_logdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'N': case 'N':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
set_langdir(tmp_path); set_langdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'P': case 'P':
if (handle_path_arg(&tmp_path, optarg, NULL, true, true)) if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
{ {
set_piddir(tmp_path); set_piddir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'D': case 'D':
snprintf(datadir, PATH_MAX, "%s", optarg); snprintf(datadir, PATH_MAX, "%s", optarg);
datadir[PATH_MAX] = '\0'; datadir[PATH_MAX] = '\0';
set_datadir(MXS_STRDUP_A(optarg)); set_datadir(MXS_STRDUP_A(optarg));
datadir_defined = true; datadir_defined = true;
break; break;
case 'C': case 'C':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
set_configdir(tmp_path); set_configdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'B': case 'B':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
set_libdir(tmp_path); set_libdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'A': case 'A':
if (handle_path_arg(&tmp_path, optarg, NULL, true, true)) if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
{ {
set_cachedir(tmp_path); set_cachedir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'E': case 'E':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
set_execdir(tmp_path); set_execdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'F': case 'F':
if (handle_path_arg(&tmp_path, optarg, NULL, true, true)) if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
{ {
set_config_persistdir(tmp_path); set_config_persistdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'M': case 'M':
if (handle_path_arg(&tmp_path, optarg, NULL, true, true)) if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
{ {
set_module_configdir(tmp_path); set_module_configdir(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'R': case 'R':
if (handle_path_arg(&tmp_path, optarg, NULL, true, false)) if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
{ {
succp = set_dirs(tmp_path); succp = set_dirs(tmp_path);
free(tmp_path); free(tmp_path);
} }
else else
{ {
succp = false; succp = false;
} }
break; break;
case 'S': case 'S':
{ {
char* tok = strstr(optarg, "="); char* tok = strstr(optarg, "=");
if (tok) if (tok)
@ -1525,7 +1525,7 @@ int main(int argc, char **argv)
} }
} }
break; break;
case 's': case 's':
{ {
char* tok = strstr(optarg, "="); char* tok = strstr(optarg, "=");
if (tok) if (tok)
@ -1544,28 +1544,28 @@ int main(int argc, char **argv)
} }
} }
break; break;
case 'U': case 'U':
if (set_user(optarg) != 0) if (set_user(optarg) != 0)
{ {
succp = false;
}
break;
case 'G':
set_log_augmentation(optarg);
break;
case '?':
usage();
rc = EXIT_SUCCESS;
goto return_main;
case 'c':
config_check = true;
break;
default:
usage();
succp = false; succp = false;
break; }
break;
case 'G':
set_log_augmentation(optarg);
break;
case '?':
usage();
rc = EXIT_SUCCESS;
goto return_main;
case 'c':
config_check = true;
break;
default:
usage();
succp = false;
break;
} }
if (!succp) if (!succp)
@ -2665,16 +2665,16 @@ static void log_exit_status()
{ {
switch (last_signal) switch (last_signal)
{ {
case SIGTERM: case SIGTERM:
MXS_NOTICE("MaxScale received signal SIGTERM. Exiting."); MXS_NOTICE("MaxScale received signal SIGTERM. Exiting.");
break; break;
case SIGINT: case SIGINT:
MXS_NOTICE("MaxScale received signal SIGINT. Exiting."); MXS_NOTICE("MaxScale received signal SIGINT. Exiting.");
break; break;
default: default:
break; break;
} }
} }

View File

@ -235,7 +235,7 @@ listener_init_SSL(SSL_LISTENER *ssl_listener)
if (!ssl_listener->ssl_init_done) if (!ssl_listener->ssl_init_done)
{ {
switch(ssl_listener->ssl_method_type) switch (ssl_listener->ssl_method_type)
{ {
case SERVICE_TLS10: case SERVICE_TLS10:
ssl_listener->method = (SSL_METHOD*)TLSv1_method(); ssl_listener->method = (SSL_METHOD*)TLSv1_method();
@ -248,7 +248,7 @@ listener_init_SSL(SSL_LISTENER *ssl_listener)
ssl_listener->method = (SSL_METHOD*)TLSv1_2_method(); ssl_listener->method = (SSL_METHOD*)TLSv1_2_method();
break; break;
#endif #endif
/** Rest of these use the maximum available SSL/TLS methods */ /** Rest of these use the maximum available SSL/TLS methods */
case SERVICE_SSL_MAX: case SERVICE_SSL_MAX:
ssl_listener->method = (SSL_METHOD*)SSLv23_method(); ssl_listener->method = (SSL_METHOD*)SSLv23_method();
break; break;
@ -356,9 +356,10 @@ listener_init_SSL(SSL_LISTENER *ssl_listener)
static RSA * static RSA *
tmp_rsa_callback(SSL *s, int is_export, int keylength) tmp_rsa_callback(SSL *s, int is_export, int keylength)
{ {
RSA *rsa_tmp=NULL; RSA *rsa_tmp = NULL;
switch (keylength) { switch (keylength)
{
case 512: case 512:
if (rsa_512) if (rsa_512)
{ {
@ -367,28 +368,28 @@ tmp_rsa_callback(SSL *s, int is_export, int keylength)
else else
{ {
/* generate on the fly, should not happen in this example */ /* generate on the fly, should not happen in this example */
rsa_tmp = RSA_generate_key(keylength,RSA_F4,NULL,NULL); rsa_tmp = RSA_generate_key(keylength, RSA_F4, NULL, NULL);
rsa_512 = rsa_tmp; /* Remember for later reuse */ rsa_512 = rsa_tmp; /* Remember for later reuse */
} }
break; break;
case 1024: case 1024:
if (rsa_1024) if (rsa_1024)
{ {
rsa_tmp=rsa_1024; rsa_tmp = rsa_1024;
} }
break; break;
default: default:
/* Generating a key on the fly is very costly, so use what is there */ /* Generating a key on the fly is very costly, so use what is there */
if (rsa_1024) if (rsa_1024)
{ {
rsa_tmp=rsa_1024; rsa_tmp = rsa_1024;
} }
else else
{ {
rsa_tmp=rsa_512; /* Use at least a shorter key */ rsa_tmp = rsa_512; /* Use at least a shorter key */
} }
} }
return(rsa_tmp); return (rsa_tmp);
} }
/** /**
@ -451,25 +452,25 @@ static bool create_listener_config(const SERV_LISTENER *listener, const char *fi
switch (listener->ssl->ssl_method_type) switch (listener->ssl->ssl_method_type)
{ {
case SERVICE_TLS10: case SERVICE_TLS10:
version = "TLSV10"; version = "TLSV10";
break; break;
#ifdef OPENSSL_1_0 #ifdef OPENSSL_1_0
case SERVICE_TLS11: case SERVICE_TLS11:
version = "TLSV11"; version = "TLSV11";
break; break;
case SERVICE_TLS12: case SERVICE_TLS12:
version = "TLSV12"; version = "TLSV12";
break; break;
#endif #endif
case SERVICE_SSL_TLS_MAX: case SERVICE_SSL_TLS_MAX:
version = "MAX"; version = "MAX";
break; break;
default: default:
break; break;
} }
if (version) if (version)

View File

@ -231,7 +231,7 @@ dprintListStats(DCB *pdcb, LIST_CONFIG *list_config, const char *listname)
dcb_printf(pdcb, "Maximum ever used at once: %d\n", list_config->maximum); dcb_printf(pdcb, "Maximum ever used at once: %d\n", list_config->maximum);
dcb_printf(pdcb, "Currently free for reuse: %d\n", list_config->freecount); dcb_printf(pdcb, "Currently free for reuse: %d\n", list_config->freecount);
dcb_printf(pdcb, "Total in use + free: %d\n", dcb_printf(pdcb, "Total in use + free: %d\n",
list_config->freecount + list_config->count); list_config->freecount + list_config->count);
dcb_printf(pdcb, "Number of memory allocations: %d\n", list_config->num_malloc); dcb_printf(pdcb, "Number of memory allocations: %d\n", list_config->num_malloc);
} }

View File

@ -60,9 +60,9 @@ static LOADED_MODULE *registered = NULL;
static LOADED_MODULE *find_module(const char *module); static LOADED_MODULE *find_module(const char *module);
static LOADED_MODULE* register_module(const char *module, static LOADED_MODULE* register_module(const char *module,
const char *type, const char *type,
void *dlhandle, void *dlhandle,
MXS_MODULE *mod_info); MXS_MODULE *mod_info);
static void unregister_module(const char *module); static void unregister_module(const char *module);
int module_create_feedback_report(GWBUF **buffer, LOADED_MODULE *modules, FEEDBACK_CONF *cfg); int module_create_feedback_report(GWBUF **buffer, LOADED_MODULE *modules, FEEDBACK_CONF *cfg);
int do_http_post(GWBUF *buffer, void *cfg); int do_http_post(GWBUF *buffer, void *cfg);
@ -270,9 +270,9 @@ find_module(const char *module)
* @return The new registered module or NULL on memory allocation failure * @return The new registered module or NULL on memory allocation failure
*/ */
static LOADED_MODULE* register_module(const char *module, static LOADED_MODULE* register_module(const char *module,
const char *type, const char *type,
void *dlhandle, void *dlhandle,
MXS_MODULE *mod_info) MXS_MODULE *mod_info)
{ {
module = MXS_STRDUP(module); module = MXS_STRDUP(module);
type = MXS_STRDUP(type); type = MXS_STRDUP(type);

View File

@ -919,18 +919,18 @@ static int logmanager_write_log(int priority,
switch (priority) switch (priority)
{ {
case LOG_EMERG: case LOG_EMERG:
case LOG_ALERT: case LOG_ALERT:
case LOG_CRIT: case LOG_CRIT:
case LOG_ERR: case LOG_ERR:
case LOG_WARNING: case LOG_WARNING:
case LOG_NOTICE: case LOG_NOTICE:
syslog(priority, "%s", message); syslog(priority, "%s", message);
break; break;
default: default:
// LOG_INFO and LOG_DEBUG messages are never written to syslog. // LOG_INFO and LOG_DEBUG messages are never written to syslog.
break; break;
} }
} }
/** remove double line feed */ /** remove double line feed */
@ -1995,22 +1995,22 @@ static void logfile_done(logfile_t* lf)
{ {
switch (lf->lf_state) switch (lf->lf_state)
{ {
case RUN: case RUN:
CHK_LOGFILE(lf); CHK_LOGFILE(lf);
/** fallthrough */ /** fallthrough */
case INIT: case INIT:
/** Test if list is initialized before freeing it */ /** Test if list is initialized before freeing it */
if (lf->lf_blockbuf_list.mlist_versno != 0) if (lf->lf_blockbuf_list.mlist_versno != 0)
{ {
mlist_done(&lf->lf_blockbuf_list); mlist_done(&lf->lf_blockbuf_list);
} }
logfile_free_memory(lf); logfile_free_memory(lf);
lf->lf_state = DONE; lf->lf_state = DONE;
/** fallthrough */ /** fallthrough */
case DONE: case DONE:
case UNINIT: case UNINIT:
default: default:
break; break;
} }
} }
@ -2122,30 +2122,30 @@ static void filewriter_done(filewriter_t* fw, bool write_footer)
{ {
switch (fw->fwr_state) switch (fw->fwr_state)
{ {
case RUN: case RUN:
CHK_FILEWRITER(fw); CHK_FILEWRITER(fw);
if (log_config.use_stdout) if (log_config.use_stdout)
{
skygw_file_free(fw->fwr_file);
}
else
{
if (write_footer)
{ {
skygw_file_free(fw->fwr_file); logfile_write_footer(fw->fwr_file, "MariaDB MaxScale is shut down.");
} }
else
{
if (write_footer)
{
logfile_write_footer(fw->fwr_file, "MariaDB MaxScale is shut down.");
}
skygw_file_close(fw->fwr_file); skygw_file_close(fw->fwr_file);
} }
case INIT: case INIT:
fw->fwr_logmes = NULL; fw->fwr_logmes = NULL;
fw->fwr_clientmes = NULL; fw->fwr_clientmes = NULL;
fw->fwr_state = DONE; fw->fwr_state = DONE;
break; break;
case DONE: case DONE:
case UNINIT: case UNINIT:
default: default:
break; break;
} }
} }
@ -2397,15 +2397,15 @@ static void fnames_conf_done(fnames_conf_t* fn)
{ {
switch (fn->fn_state) switch (fn->fn_state)
{ {
case RUN: case RUN:
CHK_FNAMES_CONF(fn); CHK_FNAMES_CONF(fn);
case INIT: case INIT:
fnames_conf_free_memory(fn); fnames_conf_free_memory(fn);
fn->fn_state = DONE; fn->fn_state = DONE;
case DONE: case DONE:
case UNINIT: case UNINIT:
default: default:
break; break;
} }
} }
@ -2624,25 +2624,25 @@ static const char* priority_name(int priority)
{ {
switch (priority) switch (priority)
{ {
case LOG_EMERG: case LOG_EMERG:
return "emercency"; return "emercency";
case LOG_ALERT: case LOG_ALERT:
return "alert"; return "alert";
case LOG_CRIT: case LOG_CRIT:
return "critical"; return "critical";
case LOG_ERR: case LOG_ERR:
return "error"; return "error";
case LOG_WARNING: case LOG_WARNING:
return "warning"; return "warning";
case LOG_NOTICE: case LOG_NOTICE:
return "notice"; return "notice";
case LOG_INFO: case LOG_INFO:
return "informational"; return "informational";
case LOG_DEBUG: case LOG_DEBUG:
return "debug"; return "debug";
default: default:
assert(!true); assert(!true);
return "unknown"; return "unknown";
} }
} }
@ -2706,51 +2706,51 @@ static log_prefix_t priority_to_prefix(int priority)
switch (priority) switch (priority)
{ {
case LOG_EMERG: case LOG_EMERG:
prefix.text = PREFIX_EMERG; prefix.text = PREFIX_EMERG;
prefix.len = sizeof(PREFIX_EMERG); prefix.len = sizeof(PREFIX_EMERG);
break; break;
case LOG_ALERT: case LOG_ALERT:
prefix.text = PREFIX_ALERT; prefix.text = PREFIX_ALERT;
prefix.len = sizeof(PREFIX_ALERT); prefix.len = sizeof(PREFIX_ALERT);
break; break;
case LOG_CRIT: case LOG_CRIT:
prefix.text = PREFIX_CRIT; prefix.text = PREFIX_CRIT;
prefix.len = sizeof(PREFIX_CRIT); prefix.len = sizeof(PREFIX_CRIT);
break; break;
case LOG_ERR: case LOG_ERR:
prefix.text = PREFIX_ERROR; prefix.text = PREFIX_ERROR;
prefix.len = sizeof(PREFIX_ERROR); prefix.len = sizeof(PREFIX_ERROR);
break; break;
case LOG_WARNING: case LOG_WARNING:
prefix.text = PREFIX_WARNING; prefix.text = PREFIX_WARNING;
prefix.len = sizeof(PREFIX_WARNING); prefix.len = sizeof(PREFIX_WARNING);
break; break;
case LOG_NOTICE: case LOG_NOTICE:
prefix.text = PREFIX_NOTICE; prefix.text = PREFIX_NOTICE;
prefix.len = sizeof(PREFIX_NOTICE); prefix.len = sizeof(PREFIX_NOTICE);
break; break;
case LOG_INFO: case LOG_INFO:
prefix.text = PREFIX_INFO; prefix.text = PREFIX_INFO;
prefix.len = sizeof(PREFIX_INFO); prefix.len = sizeof(PREFIX_INFO);
break; break;
case LOG_DEBUG: case LOG_DEBUG:
prefix.text = PREFIX_DEBUG; prefix.text = PREFIX_DEBUG;
prefix.len = sizeof(PREFIX_DEBUG); prefix.len = sizeof(PREFIX_DEBUG);
break; break;
default: default:
assert(!true); assert(!true);
prefix.text = PREFIX_ERROR; prefix.text = PREFIX_ERROR;
prefix.len = sizeof(PREFIX_ERROR); prefix.len = sizeof(PREFIX_ERROR);
break; break;
} }
--prefix.len; // Remove trailing NULL. --prefix.len; // Remove trailing NULL.
@ -2764,19 +2764,19 @@ static enum log_flush priority_to_flush(int priority)
switch (priority) switch (priority)
{ {
case LOG_EMERG: case LOG_EMERG:
case LOG_ALERT: case LOG_ALERT:
case LOG_CRIT: case LOG_CRIT:
case LOG_ERR: case LOG_ERR:
return LOG_FLUSH_YES; return LOG_FLUSH_YES;
default: default:
assert(!true); assert(!true);
case LOG_WARNING: case LOG_WARNING:
case LOG_NOTICE: case LOG_NOTICE:
case LOG_INFO: case LOG_INFO:
case LOG_DEBUG: case LOG_DEBUG:
return LOG_FLUSH_NO; return LOG_FLUSH_NO;
} }
} }

View File

@ -55,11 +55,12 @@ typedef enum { MES_RC_FAIL, MES_RC_SUCCESS, MES_RC_TIMEOUT } skygw_mes_rc_t;
static const char* timestamp_formatstr = "%04d-%02d-%02d %02d:%02d:%02d "; static const char* timestamp_formatstr = "%04d-%02d-%02d %02d:%02d:%02d ";
/** One for terminating '\0' */ /** One for terminating '\0' */
static const size_t timestamp_len = (4+1 +2+1 +2+1 +2+1 +2+1 +2+3 +1) * sizeof(char); static const size_t timestamp_len = (4 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 3 + 1) * sizeof(char);
static const char* timestamp_formatstr_hp = "%04d-%02d-%02d %02d:%02d:%02d.%03d "; static const char* timestamp_formatstr_hp = "%04d-%02d-%02d %02d:%02d:%02d.%03d ";
/** One for terminating '\0' */ /** One for terminating '\0' */
static const size_t timestamp_len_hp = (4+1 +2+1 +2+1 +2+1 +2+1 +2+1+3+3 +1) * sizeof(char); static const size_t timestamp_len_hp = (4 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 3 + 3 + 1) * sizeof(
char);
struct skygw_thread_st struct skygw_thread_st
{ {

View File

@ -220,144 +220,144 @@ static bool process_argument(const MODULECMD *cmd, modulecmd_arg_type_t *type, c
{ {
switch (MODULECMD_GET_TYPE(type)) switch (MODULECMD_GET_TYPE(type))
{ {
case MODULECMD_ARG_NONE: case MODULECMD_ARG_NONE:
arg->type.type = MODULECMD_ARG_NONE; arg->type.type = MODULECMD_ARG_NONE;
rval = true; rval = true;
break; break;
case MODULECMD_ARG_STRING: case MODULECMD_ARG_STRING:
if ((arg->value.string = MXS_STRDUP((char*)value))) if ((arg->value.string = MXS_STRDUP((char*)value)))
{
arg->type.type = MODULECMD_ARG_STRING;
rval = true;
}
else
{
*err = "memory allocation failed";
}
break;
case MODULECMD_ARG_BOOLEAN:
{
int truthval = config_truth_value((char*)value);
if (truthval != -1)
{ {
arg->type.type = MODULECMD_ARG_STRING; arg->value.boolean = truthval;
arg->type.type = MODULECMD_ARG_BOOLEAN;
rval = true; rval = true;
} }
else else
{ {
*err = "memory allocation failed"; *err = "not a boolean value";
} }
break; }
break;
case MODULECMD_ARG_BOOLEAN: case MODULECMD_ARG_SERVICE:
if ((arg->value.service = service_find((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.service->routerModule) == 0)
{ {
int truthval = config_truth_value((char*)value); arg->type.type = MODULECMD_ARG_SERVICE;
if (truthval != -1) rval = true;
{
arg->value.boolean = truthval;
arg->type.type = MODULECMD_ARG_BOOLEAN;
rval = true;
}
else
{
*err = "not a boolean value";
}
}
break;
case MODULECMD_ARG_SERVICE:
if ((arg->value.service = service_find((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.service->routerModule) == 0)
{
arg->type.type = MODULECMD_ARG_SERVICE;
rval = true;
}
else
{
*err = "router and domain names don't match";
}
} }
else else
{ {
*err = "service not found"; *err = "router and domain names don't match";
} }
break; }
else
{
*err = "service not found";
}
break;
case MODULECMD_ARG_SERVER: case MODULECMD_ARG_SERVER:
if ((arg->value.server = server_find_by_unique_name((char*)value))) if ((arg->value.server = server_find_by_unique_name((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.server->protocol) == 0)
{ {
if (MODULECMD_ALLOW_NAME_MISMATCH(type) || arg->type.type = MODULECMD_ARG_SERVER;
strcmp(cmd->domain, arg->value.server->protocol) == 0) rval = true;
{
arg->type.type = MODULECMD_ARG_SERVER;
rval = true;
}
else
{
*err = "server and domain names don't match";
}
} }
else else
{ {
*err = "server not found"; *err = "server and domain names don't match";
} }
break; }
else
{
*err = "server not found";
}
break;
case MODULECMD_ARG_SESSION: case MODULECMD_ARG_SESSION:
if ((arg->value.session = session_get_by_id(atoi(value)))) if ((arg->value.session = session_get_by_id(atoi(value))))
{
arg->type.type = MODULECMD_ARG_SESSION;
}
rval = true;
break;
case MODULECMD_ARG_DCB:
arg->type.type = MODULECMD_ARG_DCB;
arg->value.dcb = (DCB*)value;
rval = true;
break;
case MODULECMD_ARG_MONITOR:
if ((arg->value.monitor = monitor_find((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.monitor->module_name) == 0)
{ {
arg->type.type = MODULECMD_ARG_SESSION; arg->type.type = MODULECMD_ARG_MONITOR;
} rval = true;
rval = true;
break;
case MODULECMD_ARG_DCB:
arg->type.type = MODULECMD_ARG_DCB;
arg->value.dcb = (DCB*)value;
rval = true;
break;
case MODULECMD_ARG_MONITOR:
if ((arg->value.monitor = monitor_find((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.monitor->module_name) == 0)
{
arg->type.type = MODULECMD_ARG_MONITOR;
rval = true;
}
else
{
*err = "monitor and domain names don't match";
}
} }
else else
{ {
*err = "monitor not found"; *err = "monitor and domain names don't match";
} }
break; }
else
{
*err = "monitor not found";
}
break;
case MODULECMD_ARG_FILTER: case MODULECMD_ARG_FILTER:
if ((arg->value.filter = filter_def_find((char*)value))) if ((arg->value.filter = filter_def_find((char*)value)))
{
if (MODULECMD_ALLOW_NAME_MISMATCH(type) ||
strcmp(cmd->domain, arg->value.filter->module) == 0)
{ {
if (MODULECMD_ALLOW_NAME_MISMATCH(type) || arg->type.type = MODULECMD_ARG_FILTER;
strcmp(cmd->domain, arg->value.filter->module) == 0) rval = true;
{
arg->type.type = MODULECMD_ARG_FILTER;
rval = true;
}
else
{
*err = "filter and domain names don't match";
}
} }
else else
{ {
*err = "filter not found"; *err = "filter and domain names don't match";
} }
break; }
else
{
*err = "filter not found";
}
break;
case MODULECMD_ARG_OUTPUT: case MODULECMD_ARG_OUTPUT:
arg->type.type = MODULECMD_ARG_OUTPUT; arg->type.type = MODULECMD_ARG_OUTPUT;
arg->value.dcb = (DCB*)value; arg->value.dcb = (DCB*)value;
rval = true; rval = true;
break; break;
default: default:
ss_dassert(false); ss_dassert(false);
MXS_ERROR("Undefined argument type: %0lx", type->type); MXS_ERROR("Undefined argument type: %0lx", type->type);
*err = "internal error"; *err = "internal error";
break; break;
} }
} }
else else
@ -392,16 +392,16 @@ static void free_argument(struct arg_node *arg)
{ {
switch (arg->type.type) switch (arg->type.type)
{ {
case MODULECMD_ARG_STRING: case MODULECMD_ARG_STRING:
MXS_FREE(arg->value.string); MXS_FREE(arg->value.string);
break; break;
case MODULECMD_ARG_SESSION: case MODULECMD_ARG_SESSION:
session_put_ref(arg->value.session); session_put_ref(arg->value.session);
break; break;
default: default:
break; break;
} }
} }
@ -568,7 +568,7 @@ const char* modulecmd_get_error()
} }
bool modulecmd_foreach(const char *domain_re, const char *ident_re, bool modulecmd_foreach(const char *domain_re, const char *ident_re,
bool(*fn)(const MODULECMD *cmd, void *data), void *data) bool(*fn)(const MODULECMD *cmd, void *data), void *data)
{ {
bool rval = true; bool rval = true;
bool stop = false; bool stop = false;
@ -578,16 +578,16 @@ bool modulecmd_foreach(const char *domain_re, const char *ident_re,
{ {
int err; int err;
mxs_pcre2_result_t d_res = domain_re ? mxs_pcre2_result_t d_res = domain_re ?
mxs_pcre2_simple_match(domain_re, domain->domain, 0, &err) : mxs_pcre2_simple_match(domain_re, domain->domain, 0, &err) :
MXS_PCRE2_MATCH; MXS_PCRE2_MATCH;
if (d_res == MXS_PCRE2_MATCH) if (d_res == MXS_PCRE2_MATCH)
{ {
for (MODULECMD *cmd = domain->commands; cmd && rval; cmd = cmd->next) for (MODULECMD *cmd = domain->commands; cmd && rval; cmd = cmd->next)
{ {
mxs_pcre2_result_t i_res = ident_re ? mxs_pcre2_result_t i_res = ident_re ?
mxs_pcre2_simple_match(ident_re, cmd->identifier, 0, &err) : mxs_pcre2_simple_match(ident_re, cmd->identifier, 0, &err) :
MXS_PCRE2_MATCH; MXS_PCRE2_MATCH;
if (i_res == MXS_PCRE2_MATCH) if (i_res == MXS_PCRE2_MATCH)
{ {
@ -628,50 +628,50 @@ char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type)
switch (MODULECMD_GET_TYPE(type)) switch (MODULECMD_GET_TYPE(type))
{ {
case MODULECMD_ARG_NONE: case MODULECMD_ARG_NONE:
strtype = "NONE"; strtype = "NONE";
break; break;
case MODULECMD_ARG_STRING: case MODULECMD_ARG_STRING:
strtype = "STRING"; strtype = "STRING";
break; break;
case MODULECMD_ARG_BOOLEAN: case MODULECMD_ARG_BOOLEAN:
strtype = "BOOLEAN"; strtype = "BOOLEAN";
break; break;
case MODULECMD_ARG_SERVICE: case MODULECMD_ARG_SERVICE:
strtype = "SERVICE"; strtype = "SERVICE";
break; break;
case MODULECMD_ARG_SERVER: case MODULECMD_ARG_SERVER:
strtype = "SERVER"; strtype = "SERVER";
break; break;
case MODULECMD_ARG_SESSION: case MODULECMD_ARG_SESSION:
strtype = "SESSION"; strtype = "SESSION";
break; break;
case MODULECMD_ARG_DCB: case MODULECMD_ARG_DCB:
strtype = "DCB"; strtype = "DCB";
break; break;
case MODULECMD_ARG_MONITOR: case MODULECMD_ARG_MONITOR:
strtype = "MONITOR"; strtype = "MONITOR";
break; break;
case MODULECMD_ARG_FILTER: case MODULECMD_ARG_FILTER:
strtype = "FILTER"; strtype = "FILTER";
break; break;
case MODULECMD_ARG_OUTPUT: case MODULECMD_ARG_OUTPUT:
strtype = "OUTPUT"; strtype = "OUTPUT";
break; break;
default: default:
ss_dassert(false); ss_dassert(false);
MXS_ERROR("Unknown type"); MXS_ERROR("Unknown type");
break; break;
} }
size_t slen = strlen(strtype); size_t slen = strlen(strtype);
@ -690,5 +690,5 @@ char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type)
bool modulecmd_arg_is_present(const MODULECMD_ARG *arg, int idx) bool modulecmd_arg_is_present(const MODULECMD_ARG *arg, int idx)
{ {
return arg->argc > idx && return arg->argc > idx &&
MODULECMD_GET_TYPE(&arg->argv[idx].type) != MODULECMD_ARG_NONE; MODULECMD_GET_TYPE(&arg->argv[idx].type) != MODULECMD_ARG_NONE;
} }

View File

@ -855,56 +855,56 @@ char* strnchr_esc_mysql(char* ptr, char c, int len)
{ {
switch (*p) switch (*p)
{ {
case '\\': case '\\':
escaped = true; escaped = true;
break; break;
case '\'': case '\'':
case '"': case '"':
if (!quoted) if (!quoted)
{ {
quoted = true; quoted = true;
qc = *p; qc = *p;
} }
else if (*p == qc) else if (*p == qc)
{ {
quoted = false; quoted = false;
} }
break; break;
case '/': case '/':
if (p + 1 < end && *(p + 1) == '*') if (p + 1 < end && *(p + 1) == '*')
{ {
comment = true; comment = true;
p += 1; p += 1;
} }
break; break;
case '*': case '*':
if (comment && p + 1 < end && *(p + 1) == '/') if (comment && p + 1 < end && *(p + 1) == '/')
{ {
comment = false; comment = false;
p += 1; p += 1;
} }
break; break;
case '`': case '`':
backtick = !backtick; backtick = !backtick;
break; break;
case '#': case '#':
return NULL;
case '-':
if (p + 2 < end && *(p + 1) == '-' &&
isspace(*(p + 2)))
{
return NULL; return NULL;
}
break;
case '-': default:
if (p + 2 < end && *(p + 1) == '-' && break;
isspace(*(p + 2)))
{
return NULL;
}
break;
default:
break;
} }
if (*p == c && !escaped && !quoted && !comment && !backtick) if (*p == c && !escaped && !quoted && !comment && !backtick)
@ -940,23 +940,23 @@ bool is_mysql_statement_end(const char* start, int len)
{ {
switch (*ptr) switch (*ptr)
{ {
case '-': case '-':
if (ptr < start + len - 2 && *(ptr + 1) == '-' && isspace(*(ptr + 2))) if (ptr < start + len - 2 && *(ptr + 1) == '-' && isspace(*(ptr + 2)))
{ {
rval = true;
}
break;
case '#':
rval = true; rval = true;
break; }
break;
case '/': case '#':
if (ptr < start + len - 1 && *(ptr + 1) == '*') rval = true;
{ break;
rval = true;
} case '/':
break; if (ptr < start + len - 1 && *(ptr + 1) == '*')
{
rval = true;
}
break;
} }
} }
else else

View File

@ -424,21 +424,21 @@ monitorShow(DCB *dcb, MONITOR *monitor)
switch (monitor->state) switch (monitor->state)
{ {
case MONITOR_STATE_RUNNING: case MONITOR_STATE_RUNNING:
state = "Running"; state = "Running";
break; break;
case MONITOR_STATE_STOPPING: case MONITOR_STATE_STOPPING:
state = "Stopping"; state = "Stopping";
break; break;
case MONITOR_STATE_STOPPED: case MONITOR_STATE_STOPPED:
state = "Stopped"; state = "Stopped";
break; break;
case MONITOR_STATE_ALLOC: case MONITOR_STATE_ALLOC:
state = "Allocated"; state = "Allocated";
break; break;
default: default:
state = "Unknown"; state = "Unknown";
break; break;
} }
dcb_printf(dcb, "Monitor: %p\n", monitor); dcb_printf(dcb, "Monitor: %p\n", monitor);
@ -557,22 +557,22 @@ monitorSetNetworkTimeout(MONITOR *mon, int type, int value)
{ {
switch (type) switch (type)
{ {
case MONITOR_CONNECT_TIMEOUT: case MONITOR_CONNECT_TIMEOUT:
mon->connect_timeout = value; mon->connect_timeout = value;
break; break;
case MONITOR_READ_TIMEOUT: case MONITOR_READ_TIMEOUT:
mon->read_timeout = value; mon->read_timeout = value;
break; break;
case MONITOR_WRITE_TIMEOUT: case MONITOR_WRITE_TIMEOUT:
mon->write_timeout = value; mon->write_timeout = value;
break; break;
default: default:
MXS_ERROR("Monitor setNetworkTimeout received an unsupported action type %i", type); MXS_ERROR("Monitor setNetworkTimeout received an unsupported action type %i", type);
rval = false; rval = false;
break; break;
} }
} }
else else
@ -678,30 +678,30 @@ bool check_monitor_permissions(MONITOR* monitor, const char* query)
mondb->server->port, mysql_error(mondb->con)); mondb->server->port, mysql_error(mondb->con));
switch (mysql_errno(mondb->con)) switch (mysql_errno(mondb->con))
{ {
case ER_ACCESS_DENIED_ERROR: case ER_ACCESS_DENIED_ERROR:
case ER_DBACCESS_DENIED_ERROR: case ER_DBACCESS_DENIED_ERROR:
case ER_ACCESS_DENIED_NO_PASSWORD_ERROR: case ER_ACCESS_DENIED_NO_PASSWORD_ERROR:
break; break;
default: default:
rval = true; rval = true;
break; break;
} }
} }
else if (mysql_query(mondb->con, query) != 0) else if (mysql_query(mondb->con, query) != 0)
{ {
switch (mysql_errno(mondb->con)) switch (mysql_errno(mondb->con))
{ {
case ER_TABLEACCESS_DENIED_ERROR: case ER_TABLEACCESS_DENIED_ERROR:
case ER_COLUMNACCESS_DENIED_ERROR: case ER_COLUMNACCESS_DENIED_ERROR:
case ER_SPECIFIC_ACCESS_DENIED_ERROR: case ER_SPECIFIC_ACCESS_DENIED_ERROR:
case ER_PROCACCESS_DENIED_ERROR: case ER_PROCACCESS_DENIED_ERROR:
case ER_KILL_DENIED_ERROR: case ER_KILL_DENIED_ERROR:
rval = false; rval = false;
break; break;
default: default:
rval = true; rval = true;
break; break;
} }
MXS_ERROR("[%s] Failed to execute query '%s' with user '%s'. MySQL error message: %s", MXS_ERROR("[%s] Failed to execute query '%s' with user '%s'. MySQL error message: %s",
@ -869,30 +869,30 @@ mon_get_event_type(MONITOR_SERVERS* node)
switch (event_type) switch (event_type)
{ {
case UP_EVENT: case UP_EVENT:
return (present & SERVER_MASTER) ? MASTER_UP_EVENT : return (present & SERVER_MASTER) ? MASTER_UP_EVENT :
(present & SERVER_SLAVE) ? SLAVE_UP_EVENT : (present & SERVER_SLAVE) ? SLAVE_UP_EVENT :
(present & SERVER_JOINED) ? SYNCED_UP_EVENT : (present & SERVER_JOINED) ? SYNCED_UP_EVENT :
(present & SERVER_NDB) ? NDB_UP_EVENT : (present & SERVER_NDB) ? NDB_UP_EVENT :
SERVER_UP_EVENT; SERVER_UP_EVENT;
case DOWN_EVENT: case DOWN_EVENT:
return (prev & SERVER_MASTER) ? MASTER_DOWN_EVENT : return (prev & SERVER_MASTER) ? MASTER_DOWN_EVENT :
(prev & SERVER_SLAVE) ? SLAVE_DOWN_EVENT : (prev & SERVER_SLAVE) ? SLAVE_DOWN_EVENT :
(prev & SERVER_JOINED) ? SYNCED_DOWN_EVENT : (prev & SERVER_JOINED) ? SYNCED_DOWN_EVENT :
(prev & SERVER_NDB) ? NDB_DOWN_EVENT : (prev & SERVER_NDB) ? NDB_DOWN_EVENT :
SERVER_DOWN_EVENT; SERVER_DOWN_EVENT;
case LOSS_EVENT: case LOSS_EVENT:
return (prev & SERVER_MASTER) ? LOST_MASTER_EVENT : return (prev & SERVER_MASTER) ? LOST_MASTER_EVENT :
(prev & SERVER_SLAVE) ? LOST_SLAVE_EVENT : (prev & SERVER_SLAVE) ? LOST_SLAVE_EVENT :
(prev & SERVER_JOINED) ? LOST_SYNCED_EVENT : (prev & SERVER_JOINED) ? LOST_SYNCED_EVENT :
LOST_NDB_EVENT; LOST_NDB_EVENT;
case NEW_EVENT: case NEW_EVENT:
return (present & SERVER_MASTER) ? NEW_MASTER_EVENT : return (present & SERVER_MASTER) ? NEW_MASTER_EVENT :
(present & SERVER_SLAVE) ? NEW_SLAVE_EVENT : (present & SERVER_SLAVE) ? NEW_SLAVE_EVENT :
(present & SERVER_JOINED) ? NEW_SYNCED_EVENT : (present & SERVER_JOINED) ? NEW_SYNCED_EVENT :
NEW_NDB_EVENT; NEW_NDB_EVENT;
default: default:
return UNDEFINED_EVENT; return UNDEFINED_EVENT;
} }
} }

View File

@ -36,68 +36,68 @@ const char* column_type_to_string(uint8_t type)
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_DECIMAL: case TABLE_COL_TYPE_DECIMAL:
return "DECIMAL"; return "DECIMAL";
case TABLE_COL_TYPE_TINY: case TABLE_COL_TYPE_TINY:
return "TINY"; return "TINY";
case TABLE_COL_TYPE_SHORT: case TABLE_COL_TYPE_SHORT:
return "SHORT"; return "SHORT";
case TABLE_COL_TYPE_LONG: case TABLE_COL_TYPE_LONG:
return "LONG"; return "LONG";
case TABLE_COL_TYPE_FLOAT: case TABLE_COL_TYPE_FLOAT:
return "FLOAT"; return "FLOAT";
case TABLE_COL_TYPE_DOUBLE: case TABLE_COL_TYPE_DOUBLE:
return "DOUBLE"; return "DOUBLE";
case TABLE_COL_TYPE_NULL: case TABLE_COL_TYPE_NULL:
return "NULL"; return "NULL";
case TABLE_COL_TYPE_TIMESTAMP: case TABLE_COL_TYPE_TIMESTAMP:
return "TIMESTAMP"; return "TIMESTAMP";
case TABLE_COL_TYPE_LONGLONG: case TABLE_COL_TYPE_LONGLONG:
return "LONGLONG"; return "LONGLONG";
case TABLE_COL_TYPE_INT24: case TABLE_COL_TYPE_INT24:
return "INT24"; return "INT24";
case TABLE_COL_TYPE_DATE: case TABLE_COL_TYPE_DATE:
return "DATE"; return "DATE";
case TABLE_COL_TYPE_TIME: case TABLE_COL_TYPE_TIME:
return "TIME"; return "TIME";
case TABLE_COL_TYPE_DATETIME: case TABLE_COL_TYPE_DATETIME:
return "DATETIME"; return "DATETIME";
case TABLE_COL_TYPE_YEAR: case TABLE_COL_TYPE_YEAR:
return "YEAR"; return "YEAR";
case TABLE_COL_TYPE_NEWDATE: case TABLE_COL_TYPE_NEWDATE:
return "NEWDATE"; return "NEWDATE";
case TABLE_COL_TYPE_VARCHAR: case TABLE_COL_TYPE_VARCHAR:
return "VARCHAR"; return "VARCHAR";
case TABLE_COL_TYPE_BIT: case TABLE_COL_TYPE_BIT:
return "BIT"; return "BIT";
case TABLE_COL_TYPE_TIMESTAMP2: case TABLE_COL_TYPE_TIMESTAMP2:
return "TIMESTAMP2"; return "TIMESTAMP2";
case TABLE_COL_TYPE_DATETIME2: case TABLE_COL_TYPE_DATETIME2:
return "DATETIME2"; return "DATETIME2";
case TABLE_COL_TYPE_TIME2: case TABLE_COL_TYPE_TIME2:
return "TIME2"; return "TIME2";
case TABLE_COL_TYPE_NEWDECIMAL: case TABLE_COL_TYPE_NEWDECIMAL:
return "NEWDECIMAL"; return "NEWDECIMAL";
case TABLE_COL_TYPE_ENUM: case TABLE_COL_TYPE_ENUM:
return "ENUM"; return "ENUM";
case TABLE_COL_TYPE_SET: case TABLE_COL_TYPE_SET:
return "SET"; return "SET";
case TABLE_COL_TYPE_TINY_BLOB: case TABLE_COL_TYPE_TINY_BLOB:
return "TINY_BLOB"; return "TINY_BLOB";
case TABLE_COL_TYPE_MEDIUM_BLOB: case TABLE_COL_TYPE_MEDIUM_BLOB:
return "MEDIUM_BLOB"; return "MEDIUM_BLOB";
case TABLE_COL_TYPE_LONG_BLOB: case TABLE_COL_TYPE_LONG_BLOB:
return "LONG_BLOB"; return "LONG_BLOB";
case TABLE_COL_TYPE_BLOB: case TABLE_COL_TYPE_BLOB:
return "BLOB"; return "BLOB";
case TABLE_COL_TYPE_VAR_STRING: case TABLE_COL_TYPE_VAR_STRING:
return "VAR_STRING"; return "VAR_STRING";
case TABLE_COL_TYPE_STRING: case TABLE_COL_TYPE_STRING:
return "STRING"; return "STRING";
case TABLE_COL_TYPE_GEOMETRY: case TABLE_COL_TYPE_GEOMETRY:
return "GEOMETRY"; return "GEOMETRY";
default: default:
break; break;
} }
return "UNKNOWN"; return "UNKNOWN";
} }
@ -106,11 +106,11 @@ bool column_is_blob(uint8_t type)
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_TINY_BLOB: case TABLE_COL_TYPE_TINY_BLOB:
case TABLE_COL_TYPE_MEDIUM_BLOB: case TABLE_COL_TYPE_MEDIUM_BLOB:
case TABLE_COL_TYPE_LONG_BLOB: case TABLE_COL_TYPE_LONG_BLOB:
case TABLE_COL_TYPE_BLOB: case TABLE_COL_TYPE_BLOB:
return true; return true;
} }
return false; return false;
} }
@ -126,15 +126,15 @@ bool column_is_variable_string(uint8_t type)
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_DECIMAL: case TABLE_COL_TYPE_DECIMAL:
case TABLE_COL_TYPE_VARCHAR: case TABLE_COL_TYPE_VARCHAR:
case TABLE_COL_TYPE_BIT: case TABLE_COL_TYPE_BIT:
case TABLE_COL_TYPE_NEWDECIMAL: case TABLE_COL_TYPE_NEWDECIMAL:
case TABLE_COL_TYPE_VAR_STRING: case TABLE_COL_TYPE_VAR_STRING:
case TABLE_COL_TYPE_GEOMETRY: case TABLE_COL_TYPE_GEOMETRY:
return true; return true;
default: default:
return false; return false;
} }
} }
@ -157,15 +157,15 @@ bool column_is_temporal(uint8_t type)
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_YEAR: case TABLE_COL_TYPE_YEAR:
case TABLE_COL_TYPE_DATE: case TABLE_COL_TYPE_DATE:
case TABLE_COL_TYPE_TIME: case TABLE_COL_TYPE_TIME:
case TABLE_COL_TYPE_TIME2: case TABLE_COL_TYPE_TIME2:
case TABLE_COL_TYPE_DATETIME: case TABLE_COL_TYPE_DATETIME:
case TABLE_COL_TYPE_DATETIME2: case TABLE_COL_TYPE_DATETIME2:
case TABLE_COL_TYPE_TIMESTAMP: case TABLE_COL_TYPE_TIMESTAMP:
case TABLE_COL_TYPE_TIMESTAMP2: case TABLE_COL_TYPE_TIMESTAMP2:
return true; return true;
} }
return false; return false;
} }
@ -379,7 +379,7 @@ size_t unpack_enum(uint8_t *ptr, uint8_t *metadata, uint8_t *dest)
* @return Length of the processed field in bytes * @return Length of the processed field in bytes
*/ */
size_t unpack_bit(uint8_t *ptr, uint8_t *null_mask, uint32_t col_count, size_t unpack_bit(uint8_t *ptr, uint8_t *null_mask, uint32_t col_count,
uint32_t curr_col_index, uint8_t *metadata, uint64_t *dest) uint32_t curr_col_index, uint8_t *metadata, uint64_t *dest)
{ {
if (metadata[1]) if (metadata[1])
{ {
@ -399,29 +399,29 @@ static size_t temporal_field_size(uint8_t type, uint8_t decimals)
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_YEAR: case TABLE_COL_TYPE_YEAR:
return 1; return 1;
case TABLE_COL_TYPE_TIME: case TABLE_COL_TYPE_TIME:
case TABLE_COL_TYPE_DATE: case TABLE_COL_TYPE_DATE:
return 3; return 3;
case TABLE_COL_TYPE_TIME2: case TABLE_COL_TYPE_TIME2:
return 3 + ((decimals + 1) / 2); return 3 + ((decimals + 1) / 2);
case TABLE_COL_TYPE_DATETIME: case TABLE_COL_TYPE_DATETIME:
case TABLE_COL_TYPE_TIMESTAMP: case TABLE_COL_TYPE_TIMESTAMP:
return 4; return 4;
case TABLE_COL_TYPE_TIMESTAMP2: case TABLE_COL_TYPE_TIMESTAMP2:
return 4 + ((decimals + 1) / 2); return 4 + ((decimals + 1) / 2);
case TABLE_COL_TYPE_DATETIME2: case TABLE_COL_TYPE_DATETIME2:
return 5 + ((decimals + 1) / 2); return 5 + ((decimals + 1) / 2);
default: default:
MXS_ERROR("Unknown field type: %x %s", type, column_type_to_string(type)); MXS_ERROR("Unknown field type: %x %s", type, column_type_to_string(type));
break; break;
} }
return 0; return 0;
@ -440,31 +440,31 @@ size_t unpack_temporal_value(uint8_t type, uint8_t *ptr, uint8_t *metadata, stru
{ {
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_YEAR: case TABLE_COL_TYPE_YEAR:
unpack_year(ptr, tm); unpack_year(ptr, tm);
break; break;
case TABLE_COL_TYPE_DATETIME: case TABLE_COL_TYPE_DATETIME:
// This is not used with MariaDB RBR // This is not used with MariaDB RBR
//unpack_datetime(ptr, *metadata, tm); //unpack_datetime(ptr, *metadata, tm);
break; break;
case TABLE_COL_TYPE_DATETIME2: case TABLE_COL_TYPE_DATETIME2:
unpack_datetime2(ptr, *metadata, tm); unpack_datetime2(ptr, *metadata, tm);
break; break;
case TABLE_COL_TYPE_TIME: case TABLE_COL_TYPE_TIME:
unpack_time(ptr, tm); unpack_time(ptr, tm);
break; break;
case TABLE_COL_TYPE_DATE: case TABLE_COL_TYPE_DATE:
unpack_date(ptr, tm); unpack_date(ptr, tm);
break; break;
case TABLE_COL_TYPE_TIMESTAMP: case TABLE_COL_TYPE_TIMESTAMP:
case TABLE_COL_TYPE_TIMESTAMP2: case TABLE_COL_TYPE_TIMESTAMP2:
unpack_timestamp(ptr, *metadata, tm); unpack_timestamp(ptr, *metadata, tm);
break; break;
} }
return temporal_field_size(type, *metadata); return temporal_field_size(type, *metadata);
} }
@ -475,30 +475,30 @@ void format_temporal_value(char *str, size_t size, uint8_t type, struct tm *tm)
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_DATETIME: case TABLE_COL_TYPE_DATETIME:
case TABLE_COL_TYPE_DATETIME2: case TABLE_COL_TYPE_DATETIME2:
case TABLE_COL_TYPE_TIMESTAMP: case TABLE_COL_TYPE_TIMESTAMP:
case TABLE_COL_TYPE_TIMESTAMP2: case TABLE_COL_TYPE_TIMESTAMP2:
format = "%Y-%m-%d %H:%M:%S"; format = "%Y-%m-%d %H:%M:%S";
break; break;
case TABLE_COL_TYPE_TIME: case TABLE_COL_TYPE_TIME:
case TABLE_COL_TYPE_TIME2: case TABLE_COL_TYPE_TIME2:
format = "%H:%M:%S"; format = "%H:%M:%S";
break; break;
case TABLE_COL_TYPE_DATE: case TABLE_COL_TYPE_DATE:
format = "%Y-%m-%d"; format = "%Y-%m-%d";
break; break;
case TABLE_COL_TYPE_YEAR: case TABLE_COL_TYPE_YEAR:
format = "%Y"; format = "%Y";
break; break;
default: default:
MXS_ERROR("Unexpected temporal type: %x %s", type, column_type_to_string(type)); MXS_ERROR("Unexpected temporal type: %x %s", type, column_type_to_string(type));
ss_dassert(false); ss_dassert(false);
break; break;
} }
strftime(str, size, format, tm); strftime(str, size, format, tm);
} }
@ -521,31 +521,31 @@ size_t unpack_numeric_field(uint8_t *src, uint8_t type, uint8_t *metadata, uint8
size_t size = 0; size_t size = 0;
switch (type) switch (type)
{ {
case TABLE_COL_TYPE_LONG: case TABLE_COL_TYPE_LONG:
case TABLE_COL_TYPE_FLOAT: case TABLE_COL_TYPE_FLOAT:
size = 4; size = 4;
break; break;
case TABLE_COL_TYPE_INT24: case TABLE_COL_TYPE_INT24:
size = 3; size = 3;
break; break;
case TABLE_COL_TYPE_LONGLONG: case TABLE_COL_TYPE_LONGLONG:
case TABLE_COL_TYPE_DOUBLE: case TABLE_COL_TYPE_DOUBLE:
size = 8; size = 8;
break; break;
case TABLE_COL_TYPE_SHORT: case TABLE_COL_TYPE_SHORT:
size = 2; size = 2;
break; break;
case TABLE_COL_TYPE_TINY: case TABLE_COL_TYPE_TINY:
size = 1; size = 1;
break; break;
default: default:
MXS_ERROR("Bad column type: %x %s", type, column_type_to_string(type)); MXS_ERROR("Bad column type: %x %s", type, column_type_to_string(type));
break; break;
} }
memcpy(dest, src, size); memcpy(dest, src, size);
@ -558,30 +558,34 @@ static uint64_t unpack_bytes(uint8_t *ptr, size_t bytes)
switch (bytes) switch (bytes)
{ {
case 1: case 1:
val = ptr[0]; val = ptr[0];
break; break;
case 2: case 2:
val = ptr[1] | ((uint64_t)(ptr[0]) << 8); val = ptr[1] | ((uint64_t)(ptr[0]) << 8);
break; break;
case 3: case 3:
val = (uint64_t)ptr[2] | ((uint64_t)ptr[1] << 8) | ((uint64_t)ptr[0] << 16); val = (uint64_t)ptr[2] | ((uint64_t)ptr[1] << 8) | ((uint64_t)ptr[0] << 16);
break; break;
case 4: case 4:
val = (uint64_t)ptr[3] | ((uint64_t)ptr[2] << 8) | ((uint64_t)ptr[1] << 16) | ((uint64_t)ptr[0] << 24); val = (uint64_t)ptr[3] | ((uint64_t)ptr[2] << 8) | ((uint64_t)ptr[1] << 16) | ((uint64_t)ptr[0] << 24);
break; break;
case 5: case 5:
val = (uint64_t)ptr[4] | ((uint64_t)ptr[3] << 8) | ((uint64_t)ptr[2] << 16) | ((uint64_t)ptr[1] << 24) | ((uint64_t)ptr[0] << 32); val = (uint64_t)ptr[4] | ((uint64_t)ptr[3] << 8) | ((uint64_t)ptr[2] << 16) | ((uint64_t)ptr[1] << 24) | ((
break; uint64_t)ptr[0] << 32);
case 6: break;
val = (uint64_t)ptr[5] | ((uint64_t)ptr[4] << 8) | ((uint64_t)ptr[3] << 16) | ((uint64_t)ptr[2] << 24) | ((uint64_t)ptr[1] << 32) | ((uint64_t)ptr[0] << 40); case 6:
break; val = (uint64_t)ptr[5] | ((uint64_t)ptr[4] << 8) | ((uint64_t)ptr[3] << 16) | ((uint64_t)ptr[2] << 24) | ((
case 7: uint64_t)ptr[1] << 32) | ((uint64_t)ptr[0] << 40);
val = (uint64_t)ptr[6] | ((uint64_t)ptr[5] << 8) | ((uint64_t)ptr[4] << 16) | ((uint64_t)ptr[3] << 24) | ((uint64_t)ptr[2] << 32) | ((uint64_t)ptr[1] << 40) | ((uint64_t)ptr[0] << 48); break;
break; case 7:
case 8: val = (uint64_t)ptr[6] | ((uint64_t)ptr[5] << 8) | ((uint64_t)ptr[4] << 16) | ((uint64_t)ptr[3] << 24) | ((
val = (uint64_t)ptr[7] | ((uint64_t)ptr[6] << 8) | ((uint64_t)ptr[5] << 16) | ((uint64_t)ptr[4] << 24) | ((uint64_t)ptr[3] << 32) | ((uint64_t)ptr[2] << 40) | ((uint64_t)ptr[1] << 48) | ((uint64_t)ptr[0] << 56); uint64_t)ptr[2] << 32) | ((uint64_t)ptr[1] << 40) | ((uint64_t)ptr[0] << 48);
break; break;
case 8:
val = (uint64_t)ptr[7] | ((uint64_t)ptr[6] << 8) | ((uint64_t)ptr[5] << 16) | ((uint64_t)ptr[4] << 24) | ((
uint64_t)ptr[3] << 32) | ((uint64_t)ptr[2] << 40) | ((uint64_t)ptr[1] << 48) | ((uint64_t)ptr[0] << 56);
break;
} }
return val; return val;

View File

@ -272,7 +272,7 @@ mxs_mysql_name_kind_t mxs_mysql_name_to_pcre(char *pcre,
case '{': case '{':
case '}': case '}':
*pcre++ = '\\'; *pcre++ = '\\';
// Flowthrough // Flowthrough
default: default:
*pcre = *mysql; *pcre = *mysql;
} }

View File

@ -1629,11 +1629,16 @@ dShowEventStats(DCB *pdcb)
int i; int i;
dcb_printf(pdcb, "\nEvent statistics.\n"); dcb_printf(pdcb, "\nEvent statistics.\n");
dcb_printf(pdcb, "Maximum queue time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxqtime, TS_STATS_MAX)); dcb_printf(pdcb, "Maximum queue time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxqtime,
dcb_printf(pdcb, "Maximum execution time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxexectime, TS_STATS_MAX)); TS_STATS_MAX));
dcb_printf(pdcb, "Maximum event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_max, TS_STATS_MAX)); dcb_printf(pdcb, "Maximum execution time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxexectime,
dcb_printf(pdcb, "Total event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_length, TS_STATS_SUM)); TS_STATS_MAX));
dcb_printf(pdcb, "Average event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_length, TS_STATS_AVG)); dcb_printf(pdcb, "Maximum event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_max,
TS_STATS_MAX));
dcb_printf(pdcb, "Total event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_length,
TS_STATS_SUM));
dcb_printf(pdcb, "Average event queue length: %3" PRId64 "\n", ts_stats_get(pollStats.evq_length,
TS_STATS_AVG));
dcb_printf(pdcb, "\n"); dcb_printf(pdcb, "\n");
dcb_printf(pdcb, " | Number of events\n"); dcb_printf(pdcb, " | Number of events\n");
dcb_printf(pdcb, "Duration | Queued | Executed\n"); dcb_printf(pdcb, "Duration | Queued | Executed\n");

View File

@ -306,48 +306,48 @@ struct type_name_info field_usage_to_type_name_info(qc_field_usage_t usage)
static const char name[] = "QC_USED_IN_SELECT"; static const char name[] = "QC_USED_IN_SELECT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QC_USED_IN_SUBSELECT: case QC_USED_IN_SUBSELECT:
{ {
static const char name[] = "QC_USED_IN_SUBSELECT"; static const char name[] = "QC_USED_IN_SUBSELECT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QC_USED_IN_WHERE: case QC_USED_IN_WHERE:
{ {
static const char name[] = "QC_USED_IN_WHERE"; static const char name[] = "QC_USED_IN_WHERE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QC_USED_IN_SET: case QC_USED_IN_SET:
{ {
static const char name[] = "QC_USED_IN_SET"; static const char name[] = "QC_USED_IN_SET";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QC_USED_IN_GROUP_BY: case QC_USED_IN_GROUP_BY:
{ {
static const char name[] = "QC_USED_IN_GROUP_BY"; static const char name[] = "QC_USED_IN_GROUP_BY";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
default: default:
{ {
static const char name[] = "UNKNOWN_FIELD_USAGE"; static const char name[] = "UNKNOWN_FIELD_USAGE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
} }
return info; return info;
@ -435,43 +435,43 @@ const char* qc_op_to_string(qc_query_op_t op)
switch (op) switch (op)
{ {
case QUERY_OP_UNDEFINED: case QUERY_OP_UNDEFINED:
return "QUERY_OP_UNDEFINED"; return "QUERY_OP_UNDEFINED";
case QUERY_OP_SELECT: case QUERY_OP_SELECT:
return "QUERY_OP_SELECT"; return "QUERY_OP_SELECT";
case QUERY_OP_UPDATE: case QUERY_OP_UPDATE:
return "QUERY_OP_UPDATE"; return "QUERY_OP_UPDATE";
case QUERY_OP_INSERT: case QUERY_OP_INSERT:
return "QUERY_OP_INSERT"; return "QUERY_OP_INSERT";
case QUERY_OP_DELETE: case QUERY_OP_DELETE:
return "QUERY_OP_DELETE"; return "QUERY_OP_DELETE";
case QUERY_OP_TRUNCATE: case QUERY_OP_TRUNCATE:
return "QUERY_OP_TRUNCATE"; return "QUERY_OP_TRUNCATE";
case QUERY_OP_ALTER: case QUERY_OP_ALTER:
return "QUERY_OP_ALTER"; return "QUERY_OP_ALTER";
case QUERY_OP_CREATE: case QUERY_OP_CREATE:
return "QUERY_OP_CREATE"; return "QUERY_OP_CREATE";
case QUERY_OP_DROP: case QUERY_OP_DROP:
return "QUERY_OP_DROP"; return "QUERY_OP_DROP";
case QUERY_OP_CHANGE_DB: case QUERY_OP_CHANGE_DB:
return "QUERY_OP_CHANGE_DB"; return "QUERY_OP_CHANGE_DB";
case QUERY_OP_LOAD: case QUERY_OP_LOAD:
return "QUERY_OP_LOAD"; return "QUERY_OP_LOAD";
case QUERY_OP_GRANT: case QUERY_OP_GRANT:
return "QUERY_OP_GRANT"; return "QUERY_OP_GRANT";
case QUERY_OP_REVOKE: case QUERY_OP_REVOKE:
return "QUERY_OP_REVOKE"; return "QUERY_OP_REVOKE";
default: default:
return "UNKNOWN_QUERY_OP"; return "UNKNOWN_QUERY_OP";
@ -489,48 +489,48 @@ struct type_name_info type_to_type_name_info(qc_query_type_t type)
static const char name[] = "QUERY_TYPE_UNKNOWN"; static const char name[] = "QUERY_TYPE_UNKNOWN";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_LOCAL_READ: case QUERY_TYPE_LOCAL_READ:
{ {
static const char name[] = "QUERY_TYPE_LOCAL_READ"; static const char name[] = "QUERY_TYPE_LOCAL_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_READ: case QUERY_TYPE_READ:
{ {
static const char name[] = "QUERY_TYPE_READ"; static const char name[] = "QUERY_TYPE_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_WRITE: case QUERY_TYPE_WRITE:
{ {
static const char name[] = "QUERY_TYPE_WRITE"; static const char name[] = "QUERY_TYPE_WRITE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_MASTER_READ: case QUERY_TYPE_MASTER_READ:
{ {
static const char name[] = "QUERY_TYPE_MASTER_READ"; static const char name[] = "QUERY_TYPE_MASTER_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_SESSION_WRITE: case QUERY_TYPE_SESSION_WRITE:
{ {
static const char name[] = "QUERY_TYPE_SESSION_WRITE"; static const char name[] = "QUERY_TYPE_SESSION_WRITE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_USERVAR_WRITE: case QUERY_TYPE_USERVAR_WRITE:
{ {
@ -545,138 +545,138 @@ struct type_name_info type_to_type_name_info(qc_query_type_t type)
static const char name[] = "QUERY_TYPE_USERVAR_READ"; static const char name[] = "QUERY_TYPE_USERVAR_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_SYSVAR_READ: case QUERY_TYPE_SYSVAR_READ:
{ {
static const char name[] = "QUERY_TYPE_SYSVAR_READ"; static const char name[] = "QUERY_TYPE_SYSVAR_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
/** Not implemented yet */ /** Not implemented yet */
//case QUERY_TYPE_SYSVAR_WRITE: //case QUERY_TYPE_SYSVAR_WRITE:
case QUERY_TYPE_GSYSVAR_READ: case QUERY_TYPE_GSYSVAR_READ:
{ {
static const char name[] = "QUERY_TYPE_GSYSVAR_READ"; static const char name[] = "QUERY_TYPE_GSYSVAR_READ";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_GSYSVAR_WRITE: case QUERY_TYPE_GSYSVAR_WRITE:
{ {
static const char name[] = "QUERY_TYPE_GSYSVAR_WRITE"; static const char name[] = "QUERY_TYPE_GSYSVAR_WRITE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_BEGIN_TRX: case QUERY_TYPE_BEGIN_TRX:
{ {
static const char name[] = "QUERY_TYPE_BEGIN_TRX"; static const char name[] = "QUERY_TYPE_BEGIN_TRX";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_ENABLE_AUTOCOMMIT: case QUERY_TYPE_ENABLE_AUTOCOMMIT:
{ {
static const char name[] = "QUERY_TYPE_ENABLE_AUTOCOMMIT"; static const char name[] = "QUERY_TYPE_ENABLE_AUTOCOMMIT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_DISABLE_AUTOCOMMIT: case QUERY_TYPE_DISABLE_AUTOCOMMIT:
{ {
static const char name[] = "QUERY_TYPE_DISABLE_AUTOCOMMIT"; static const char name[] = "QUERY_TYPE_DISABLE_AUTOCOMMIT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_ROLLBACK: case QUERY_TYPE_ROLLBACK:
{ {
static const char name[] = "QUERY_TYPE_ROLLBACK"; static const char name[] = "QUERY_TYPE_ROLLBACK";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_COMMIT: case QUERY_TYPE_COMMIT:
{ {
static const char name[] = "QUERY_TYPE_COMMIT"; static const char name[] = "QUERY_TYPE_COMMIT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_PREPARE_NAMED_STMT: case QUERY_TYPE_PREPARE_NAMED_STMT:
{ {
static const char name[] = "QUERY_TYPE_PREPARE_NAMED_STMT"; static const char name[] = "QUERY_TYPE_PREPARE_NAMED_STMT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_PREPARE_STMT: case QUERY_TYPE_PREPARE_STMT:
{ {
static const char name[] = "QUERY_TYPE_PREPARE_STMT"; static const char name[] = "QUERY_TYPE_PREPARE_STMT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_EXEC_STMT: case QUERY_TYPE_EXEC_STMT:
{ {
static const char name[] = "QUERY_TYPE_EXEC_STMT"; static const char name[] = "QUERY_TYPE_EXEC_STMT";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_CREATE_TMP_TABLE: case QUERY_TYPE_CREATE_TMP_TABLE:
{ {
static const char name[] = "QUERY_TYPE_CREATE_TMP_TABLE"; static const char name[] = "QUERY_TYPE_CREATE_TMP_TABLE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_READ_TMP_TABLE: case QUERY_TYPE_READ_TMP_TABLE:
{ {
static const char name[] = "QUERY_TYPE_READ_TMP_TABLE"; static const char name[] = "QUERY_TYPE_READ_TMP_TABLE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_SHOW_DATABASES: case QUERY_TYPE_SHOW_DATABASES:
{ {
static const char name[] = "QUERY_TYPE_SHOW_DATABASES"; static const char name[] = "QUERY_TYPE_SHOW_DATABASES";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
case QUERY_TYPE_SHOW_TABLES: case QUERY_TYPE_SHOW_TABLES:
{ {
static const char name[] = "QUERY_TYPE_SHOW_TABLES"; static const char name[] = "QUERY_TYPE_SHOW_TABLES";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
default: default:
{ {
static const char name[] = "UNKNOWN_QUERY_TYPE"; static const char name[] = "UNKNOWN_QUERY_TYPE";
info.name = name; info.name = name;
info.name_len = sizeof(name) - 1; info.name_len = sizeof(name) - 1;
} }
break; break;
} }
return info; return info;

View File

@ -55,7 +55,7 @@ QUEUE_CONFIG
QUEUE_CONFIG *new_queue = (QUEUE_CONFIG *)MXS_CALLOC(1, sizeof(QUEUE_CONFIG)); QUEUE_CONFIG *new_queue = (QUEUE_CONFIG *)MXS_CALLOC(1, sizeof(QUEUE_CONFIG));
if (new_queue) if (new_queue)
{ {
new_queue->queue_array = MXS_CALLOC(limit+1, sizeof(QUEUE_ENTRY)); new_queue->queue_array = MXS_CALLOC(limit + 1, sizeof(QUEUE_ENTRY));
if (new_queue->queue_array) if (new_queue->queue_array)
{ {
new_queue->queue_limit = limit; new_queue->queue_limit = limit;

View File

@ -1203,25 +1203,25 @@ static bool create_server_config(const SERVER *server, const char *filename)
switch (server->server_ssl->ssl_method_type) switch (server->server_ssl->ssl_method_type)
{ {
case SERVICE_TLS10: case SERVICE_TLS10:
version = "TLSV10"; version = "TLSV10";
break; break;
#ifdef OPENSSL_1_0 #ifdef OPENSSL_1_0
case SERVICE_TLS11: case SERVICE_TLS11:
version = "TLSV11"; version = "TLSV11";
break; break;
case SERVICE_TLS12: case SERVICE_TLS12:
version = "TLSV12"; version = "TLSV12";
break; break;
#endif #endif
case SERVICE_SSL_TLS_MAX: case SERVICE_SSL_TLS_MAX:
version = "MAX"; version = "MAX";
break; break;
default: default:
break; break;
} }
if (version) if (version)
@ -1273,7 +1273,7 @@ bool server_serialize(const SERVER *server)
} }
SERVER* server_find_destroyed(const char *name, const char *protocol, SERVER* server_find_destroyed(const char *name, const char *protocol,
const char *authenticator, const char *auth_options) const char *authenticator, const char *auth_options)
{ {
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
SERVER *server = allServers; SERVER *server = allServers;

View File

@ -318,19 +318,19 @@ serviceStartPort(SERVICE *service, SERV_LISTENER *port)
{ {
switch (port->listener->authfunc.loadusers(port)) switch (port->listener->authfunc.loadusers(port))
{ {
case MXS_AUTH_LOADUSERS_FATAL: case MXS_AUTH_LOADUSERS_FATAL:
MXS_ERROR("[%s] Fatal error when loading users for listener '%s', " MXS_ERROR("[%s] Fatal error when loading users for listener '%s', "
"service is not started.", service->name, port->name); "service is not started.", service->name, port->name);
close_port(port); close_port(port);
return 0; return 0;
case MXS_AUTH_LOADUSERS_ERROR: case MXS_AUTH_LOADUSERS_ERROR:
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication" MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
" might not work.", service->name, port->name); " might not work.", service->name, port->name);
break; break;
default: default:
break; break;
} }
} }
@ -1223,7 +1223,7 @@ serviceSetFilters(SERVICE *service, char *filters)
n++; n++;
MXS_FILTER_DEF **tmp; MXS_FILTER_DEF **tmp;
if ((tmp = (MXS_FILTER_DEF **) MXS_REALLOC(flist, if ((tmp = (MXS_FILTER_DEF **) MXS_REALLOC(flist,
(n + 1) * sizeof(MXS_FILTER_DEF *))) == NULL) (n + 1) * sizeof(MXS_FILTER_DEF *))) == NULL)
{ {
rval = false; rval = false;
break; break;
@ -1393,18 +1393,18 @@ void dprintService(DCB *dcb, SERVICE *service)
dcb_printf(dcb, "\tRouter: %s\n", service->routerModule); dcb_printf(dcb, "\tRouter: %s\n", service->routerModule);
switch (service->state) switch (service->state)
{ {
case SERVICE_STATE_STARTED: case SERVICE_STATE_STARTED:
dcb_printf(dcb, "\tState: Started\n"); dcb_printf(dcb, "\tState: Started\n");
break; break;
case SERVICE_STATE_STOPPED: case SERVICE_STATE_STOPPED:
dcb_printf(dcb, "\tState: Stopped\n"); dcb_printf(dcb, "\tState: Stopped\n");
break; break;
case SERVICE_STATE_FAILED: case SERVICE_STATE_FAILED:
dcb_printf(dcb, "\tState: Failed\n"); dcb_printf(dcb, "\tState: Failed\n");
break; break;
case SERVICE_STATE_ALLOC: case SERVICE_STATE_ALLOC:
dcb_printf(dcb, "\tState: Allocated\n"); dcb_printf(dcb, "\tState: Allocated\n");
break; break;
} }
if (service->router && service->router_instance) if (service->router && service->router_instance)
{ {
@ -1635,20 +1635,20 @@ int service_refresh_users(SERVICE *service)
{ {
switch (port->listener->authfunc.loadusers(port)) switch (port->listener->authfunc.loadusers(port))
{ {
case MXS_AUTH_LOADUSERS_FATAL: case MXS_AUTH_LOADUSERS_FATAL:
MXS_ERROR("[%s] Fatal error when loading users for listener '%s'," MXS_ERROR("[%s] Fatal error when loading users for listener '%s',"
" authentication will not work.", service->name, port->name); " authentication will not work.", service->name, port->name);
ret = 1; ret = 1;
break; break;
case MXS_AUTH_LOADUSERS_ERROR: case MXS_AUTH_LOADUSERS_ERROR:
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication" MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
" might not work.", service->name, port->name); " might not work.", service->name, port->name);
ret = 1; ret = 1;
break; break;
default: default:
break; break;
} }
} }
} }
@ -2135,12 +2135,12 @@ static void service_calculate_weights(SERVICE *service)
if (perc == 0) if (perc == 0)
{ {
MXS_WARNING("Weighting parameter '%s' with a value of %d for" MXS_WARNING("Weighting parameter '%s' with a value of %d for"
" server '%s' rounds down to zero with total weight" " server '%s' rounds down to zero with total weight"
" of %d for service '%s'. No queries will be " " of %d for service '%s'. No queries will be "
"routed to this server as long as a server with" "routed to this server as long as a server with"
" positive weight is available.", " positive weight is available.",
weightby, wght, server->server->unique_name, weightby, wght, server->server->unique_name,
total, service->name); total, service->name);
} }
else if (perc < 0) else if (perc < 0)
{ {

View File

@ -514,16 +514,16 @@ dprintSession(DCB *dcb, SESSION *print_session)
if (print_session->client_dcb && print_session->client_dcb->remote) if (print_session->client_dcb && print_session->client_dcb->remote)
{ {
double idle = (hkheartbeat - print_session->client_dcb->last_read); double idle = (hkheartbeat - print_session->client_dcb->last_read);
idle = idle > 0 ? idle/10.f : 0; idle = idle > 0 ? idle / 10.f : 0;
dcb_printf(dcb, "\tClient Address: %s%s%s\n", dcb_printf(dcb, "\tClient Address: %s%s%s\n",
print_session->client_dcb->user?print_session->client_dcb->user:"", print_session->client_dcb->user ? print_session->client_dcb->user : "",
print_session->client_dcb->user?"@":"", print_session->client_dcb->user ? "@" : "",
print_session->client_dcb->remote); print_session->client_dcb->remote);
dcb_printf(dcb, "\tConnected: %s\n", dcb_printf(dcb, "\tConnected: %s\n",
asctime_r(localtime_r(&print_session->stats.connect, &result), buf)); asctime_r(localtime_r(&print_session->stats.connect, &result), buf));
if (print_session->client_dcb->state == DCB_STATE_POLLING) if (print_session->client_dcb->state == DCB_STATE_POLLING)
{ {
dcb_printf(dcb, "\tIdle: %.0f seconds\n",idle); dcb_printf(dcb, "\tIdle: %.0f seconds\n", idle);
} }
} }

View File

@ -467,7 +467,7 @@ void acquire_lock(int* l)
misscount += 1; misscount += 1;
if (misscount > 10) if (misscount > 10)
{ {
ts1.tv_nsec = (random_jkiss() % misscount)*1000000; ts1.tv_nsec = (random_jkiss() % misscount) * 1000000;
nanosleep(&ts1, NULL); nanosleep(&ts1, NULL);
} }
} }

View File

@ -138,24 +138,24 @@ int64_t ts_stats_get(ts_stats_t stats, enum ts_stats_type type)
switch (type) switch (type)
{ {
case TS_STATS_MAX: case TS_STATS_MAX:
if (value > best) if (value > best)
{ {
best = value; best = value;
} }
break; break;
case TS_STATS_MIX: case TS_STATS_MIX:
if (value < best) if (value < best)
{ {
best = value; best = value;
} }
break; break;
case TS_STATS_AVG: case TS_STATS_AVG:
case TS_STATS_SUM: case TS_STATS_SUM:
best += value; best += value;
break; break;
} }
} }

View File

@ -359,7 +359,8 @@ int test_domain_matching()
const char *ns = "mysqlmon"; const char *ns = "mysqlmon";
const char *id = "test_domain_matching"; const char *id = "test_domain_matching";
modulecmd_arg_type_t args[] = { modulecmd_arg_type_t args[] =
{
{MODULECMD_ARG_MONITOR | MODULECMD_ARG_NAME_MATCHES_DOMAIN, ""} {MODULECMD_ARG_MONITOR | MODULECMD_ARG_NAME_MATCHES_DOMAIN, ""}
}; };

View File

@ -109,9 +109,9 @@ test1()
if ((input_counter - output_counter) != TEST_QUEUE_SIZE) if ((input_counter - output_counter) != TEST_QUEUE_SIZE)
{ {
ss_dfprintf(stderr, "\nFailed enqueue, but input counter %d and output counter %d do not differ by %d.\n", ss_dfprintf(stderr, "\nFailed enqueue, but input counter %d and output counter %d do not differ by %d.\n",
input_counter, input_counter,
output_counter, output_counter,
TEST_QUEUE_SIZE); TEST_QUEUE_SIZE);
return 4; return 4;
} }
filled++; filled++;
@ -127,61 +127,61 @@ test1()
if (*(int *)entry.queued_object != output_counter) if (*(int *)entry.queued_object != output_counter)
{ {
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n", ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
output_counter, output_counter,
*(int *)entry.queued_object); *(int *)entry.queued_object);
return 10; return 10;
} }
output_counter++; output_counter++;
} }
else else
{ {
hkheartbeat += (HEARTBEATS_TO_EXPIRE + 1); hkheartbeat += (HEARTBEATS_TO_EXPIRE + 1);
if (mxs_dequeue_if_expired(queue, &entry)) if (mxs_dequeue_if_expired(queue, &entry))
{
if (*(int *)entry.queued_object != output_counter)
{ {
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n", if (*(int *)entry.queued_object != output_counter)
output_counter, {
*(int *)entry.queued_object); ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
return 6; output_counter,
*(int *)entry.queued_object);
return 6;
}
output_counter++;
} }
output_counter++; else
} {
else ss_dfprintf(stderr, "\nReturned no expired entry even though all are expired.\n");
{ return 7;
ss_dfprintf(stderr, "\nReturned no expired entry even though all are expired.\n"); }
return 7; expired++;
}
expired++;
} }
} }
} }
} }
else else
{ {
QUEUE_ENTRY entry; QUEUE_ENTRY entry;
if (mxs_dequeue(queue, &entry)) if (mxs_dequeue(queue, &entry))
{ {
if (*(int *)entry.queued_object != output_counter) if (*(int *)entry.queued_object != output_counter)
{ {
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n", ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
output_counter, output_counter,
*(int *)entry.queued_object); *(int *)entry.queued_object);
return 8; return 8;
} }
output_counter++; output_counter++;
} }
else else
{ {
if (input_counter != output_counter) if (input_counter != output_counter)
{ {
ss_dfprintf(stderr, "\nNULL from dequeue, but input counter %d and output counter %d.\n", ss_dfprintf(stderr, "\nNULL from dequeue, but input counter %d and output counter %d.\n",
input_counter, input_counter,
output_counter); output_counter);
return 9; return 9;
} }
emptied++; emptied++;
} }
} }
} }

View File

@ -545,7 +545,7 @@ strip_escape_chars(char* val)
#define BUFFER_GROWTH_RATE 1.2 #define BUFFER_GROWTH_RATE 1.2
static pcre2_code* remove_comments_re = NULL; static pcre2_code* remove_comments_re = NULL;
static const PCRE2_SPTR remove_comments_pattern = (PCRE2_SPTR) static const PCRE2_SPTR remove_comments_pattern = (PCRE2_SPTR)
"(?:`[^`]*`\\K)|(\\/[*](?!(M?!)).*?[*]\\/)|(?:#.*|--[[:space:]].*)"; "(?:`[^`]*`\\K)|(\\/[*](?!(M?!)).*?[*]\\/)|(?:#.*|--[[:space:]].*)";
/** /**
* Remove SQL comments from the end of a string * Remove SQL comments from the end of a string
@ -614,7 +614,7 @@ char* remove_mysql_comments(const char** src, const size_t* srcsize, char** dest
static pcre2_code* replace_values_re = NULL; static pcre2_code* replace_values_re = NULL;
static const PCRE2_SPTR replace_values_pattern = (PCRE2_SPTR) "(?i)([-=,+*/([:space:]]|\\b|[@])" static const PCRE2_SPTR replace_values_pattern = (PCRE2_SPTR) "(?i)([-=,+*/([:space:]]|\\b|[@])"
"(?:[0-9.-]+|(?<=[@])[a-z_0-9]+)([-=,+*/)[:space:];]|$)"; "(?:[0-9.-]+|(?<=[@])[a-z_0-9]+)([-=,+*/)[:space:];]|$)";
/** /**
* Replace literal numbers and user variables with a question mark. * Replace literal numbers and user variables with a question mark.
@ -755,7 +755,8 @@ char* replace_literal(char* haystack, const char* needle, const char* replacemen
memcpy(newstr, haystack, match.rm_so + 1); memcpy(newstr, haystack, match.rm_so + 1);
memcpy(newstr + match.rm_so + 1, replacement, rlen); memcpy(newstr + match.rm_so + 1, replacement, rlen);
/** +1 is terminating byte */ /** +1 is terminating byte */
memcpy(newstr + match.rm_so + 1 + rlen, haystack + match.rm_so + 1 + nlen, hlen - (match.rm_so + 1) - nlen + 1); memcpy(newstr + match.rm_so + 1 + rlen, haystack + match.rm_so + 1 + nlen,
hlen - (match.rm_so + 1) - nlen + 1);
regfree(&re); regfree(&re);
free(haystack); free(haystack);
@ -766,7 +767,7 @@ retblock:
static pcre2_code* replace_quoted_re = NULL; static pcre2_code* replace_quoted_re = NULL;
static const PCRE2_SPTR replace_quoted_pattern = (PCRE2_SPTR) static const PCRE2_SPTR replace_quoted_pattern = (PCRE2_SPTR)
"(?>[^'\"]*)(?|(?:\"\\K(?:(?:(?<=\\\\)\")|[^\"])*(\"))|(?:'\\K(?:(?:(?<=\\\\)')|[^'])*(')))"; "(?>[^'\"]*)(?|(?:\"\\K(?:(?:(?<=\\\\)\")|[^\"])*(\"))|(?:'\\K(?:(?:(?<=\\\\)')|[^'])*(')))";
/** /**
* Replace contents of single or double quoted strings with question marks. * Replace contents of single or double quoted strings with question marks.