Format core source code and headers
Formatted core source code and headers with Astyle.
This commit is contained in:
parent
f109144841
commit
0b6b9c3d81
@ -41,11 +41,12 @@ public:
|
||||
// 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&".
|
||||
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
|
||||
uint8_t, // The type of the elems
|
||||
std::ptrdiff_t, // Difference between two its
|
||||
pointer_type, // The type of pointer to an elem
|
||||
reference_type> // The reference type of an elem
|
||||
class iterator_base : public std::iterator <
|
||||
std::forward_iterator_tag, // The type of the iterator
|
||||
uint8_t, // The type of the elems
|
||||
std::ptrdiff_t, // Difference between two its
|
||||
pointer_type, // The type of pointer to an elem
|
||||
reference_type > // The reference type of an elem
|
||||
{
|
||||
public:
|
||||
/**
|
||||
|
@ -25,9 +25,9 @@
|
||||
* - Global constants applicable across the line can be defined here.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifdef __cplusplus
|
||||
# define MXS_BEGIN_DECLS extern "C" {
|
||||
# define MXS_END_DECLS }
|
||||
# define MXS_END_DECLS }
|
||||
#else
|
||||
# define MXS_BEGIN_DECLS
|
||||
# define MXS_END_DECLS
|
||||
|
@ -51,29 +51,29 @@ MXS_BEGIN_DECLS
|
||||
# define ss_dfflush fflush
|
||||
# define ss_dfwrite fwrite
|
||||
|
||||
# define ss_dassert(exp) \
|
||||
{ \
|
||||
if (!(exp)) { \
|
||||
ss_dfprintf(stderr, \
|
||||
"debug assert %s:%d\n", \
|
||||
(char*)__FILE__, \
|
||||
__LINE__); \
|
||||
ss_dfflush(stderr); \
|
||||
assert(exp); \
|
||||
} \
|
||||
# define ss_dassert(exp) \
|
||||
{ \
|
||||
if (!(exp)) { \
|
||||
ss_dfprintf(stderr, \
|
||||
"debug assert %s:%d \n", \
|
||||
(char*)__FILE__, \
|
||||
__LINE__); \
|
||||
ss_dfflush(stderr); \
|
||||
assert(exp); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
# define ss_info_dassert(exp, info) \
|
||||
{ \
|
||||
if (!(exp)) { \
|
||||
ss_dfprintf(stderr, "debug assert %s:%d, %s\n", \
|
||||
(char *)__FILE__, \
|
||||
__LINE__, \
|
||||
info); \
|
||||
ss_dfflush(stderr); \
|
||||
assert((exp)); \
|
||||
} \
|
||||
# define ss_info_dassert(exp, info) \
|
||||
{ \
|
||||
if (!(exp)) { \
|
||||
ss_dfprintf(stderr, "debug assert %s:%d, %s\n", \
|
||||
(char *)__FILE__, \
|
||||
__LINE__, \
|
||||
info); \
|
||||
ss_dfflush(stderr); \
|
||||
assert((exp)); \
|
||||
} \
|
||||
}
|
||||
|
||||
#else /* SS_DEBUG */
|
||||
@ -128,61 +128,61 @@ typedef enum skygw_chk_t
|
||||
|
||||
# define STRBOOL(b) ((b) ? "true" : "false")
|
||||
|
||||
# define STRQTYPE(t) ((t) == QUERY_TYPE_WRITE ? "QUERY_TYPE_WRITE" : \
|
||||
((t) == QUERY_TYPE_READ ? "QUERY_TYPE_READ" : \
|
||||
((t) == QUERY_TYPE_SESSION_WRITE ? "QUERY_TYPE_SESSION_WRITE" : \
|
||||
((t) == QUERY_TYPE_UNKNOWN ? "QUERY_TYPE_UNKNOWN" : \
|
||||
((t) == QUERY_TYPE_LOCAL_READ ? "QUERY_TYPE_LOCAL_READ" : \
|
||||
((t) == QUERY_TYPE_MASTER_READ ? "QUERY_TYPE_MASTER_READ" : \
|
||||
((t) == QUERY_TYPE_USERVAR_WRITE ? "QUERY_TYPE_USERVAR_WRITE" : \
|
||||
((t) == QUERY_TYPE_USERVAR_READ ? "QUERY_TYPE_USERVAR_READ" : \
|
||||
((t) == QUERY_TYPE_SYSVAR_READ ? "QUERY_TYPE_SYSVAR_READ" : \
|
||||
((t) == QUERY_TYPE_GSYSVAR_READ ? "QUERY_TYPE_GSYSVAR_READ" : \
|
||||
((t) == QUERY_TYPE_GSYSVAR_WRITE ? "QUERY_TYPE_GSYSVAR_WRITE" : \
|
||||
((t) == QUERY_TYPE_BEGIN_TRX ? "QUERY_TYPE_BEGIN_TRX" : \
|
||||
((t) == QUERY_TYPE_ENABLE_AUTOCOMMIT ? "QUERY_TYPE_ENABLE_AUTOCOMMIT" : \
|
||||
((t) == QUERY_TYPE_DISABLE_AUTOCOMMIT ? "QUERY_TYPE_DISABLE_AUTOCOMMIT" : \
|
||||
((t) == QUERY_TYPE_ROLLBACK ? "QUERY_TYPE_ROLLBACK" : \
|
||||
((t) == QUERY_TYPE_COMMIT ? "QUERY_TYPE_COMMIT" : \
|
||||
((t) == QUERY_TYPE_PREPARE_NAMED_STMT ? "QUERY_TYPE_PREPARE_NAMED_STMT" : \
|
||||
((t) == QUERY_TYPE_PREPARE_STMT ? "QUERY_TYPE_PREPARE_STMT" : \
|
||||
((t) == QUERY_TYPE_EXEC_STMT ? "QUERY_TYPE_EXEC_STMT" : \
|
||||
((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_SHOW_DATABASES ? "QUERY_TYPE_SHOW_DATABASES" : \
|
||||
((t) == QUERY_TYPE_SHOW_TABLES ? "QUERY_TYPE_SHOW_TABLES" : \
|
||||
"Unknown query type")))))))))))))))))))))))
|
||||
# define STRQTYPE(t) ((t) == QUERY_TYPE_WRITE ? "QUERY_TYPE_WRITE" : \
|
||||
((t) == QUERY_TYPE_READ ? "QUERY_TYPE_READ" : \
|
||||
((t) == QUERY_TYPE_SESSION_WRITE ? "QUERY_TYPE_SESSION_WRITE" : \
|
||||
((t) == QUERY_TYPE_UNKNOWN ? "QUERY_TYPE_UNKNOWN" : \
|
||||
((t) == QUERY_TYPE_LOCAL_READ ? "QUERY_TYPE_LOCAL_READ" : \
|
||||
((t) == QUERY_TYPE_MASTER_READ ? "QUERY_TYPE_MASTER_READ" : \
|
||||
((t) == QUERY_TYPE_USERVAR_WRITE ? "QUERY_TYPE_USERVAR_WRITE" : \
|
||||
((t) == QUERY_TYPE_USERVAR_READ ? "QUERY_TYPE_USERVAR_READ" : \
|
||||
((t) == QUERY_TYPE_SYSVAR_READ ? "QUERY_TYPE_SYSVAR_READ" : \
|
||||
((t) == QUERY_TYPE_GSYSVAR_READ ? "QUERY_TYPE_GSYSVAR_READ" : \
|
||||
((t) == QUERY_TYPE_GSYSVAR_WRITE ? "QUERY_TYPE_GSYSVAR_WRITE" : \
|
||||
((t) == QUERY_TYPE_BEGIN_TRX ? "QUERY_TYPE_BEGIN_TRX" : \
|
||||
((t) == QUERY_TYPE_ENABLE_AUTOCOMMIT ? "QUERY_TYPE_ENABLE_AUTOCOMMIT" : \
|
||||
((t) == QUERY_TYPE_DISABLE_AUTOCOMMIT ? "QUERY_TYPE_DISABLE_AUTOCOMMIT" : \
|
||||
((t) == QUERY_TYPE_ROLLBACK ? "QUERY_TYPE_ROLLBACK" : \
|
||||
((t) == QUERY_TYPE_COMMIT ? "QUERY_TYPE_COMMIT" : \
|
||||
((t) == QUERY_TYPE_PREPARE_NAMED_STMT ? "QUERY_TYPE_PREPARE_NAMED_STMT" : \
|
||||
((t) == QUERY_TYPE_PREPARE_STMT ? "QUERY_TYPE_PREPARE_STMT" : \
|
||||
((t) == QUERY_TYPE_EXEC_STMT ? "QUERY_TYPE_EXEC_STMT" : \
|
||||
((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_SHOW_DATABASES ? "QUERY_TYPE_SHOW_DATABASES" : \
|
||||
((t) == QUERY_TYPE_SHOW_TABLES ? "QUERY_TYPE_SHOW_TABLES" : \
|
||||
"Unknown query type")))))))))))))))))))))))
|
||||
|
||||
#define STRLOGPRIORITYNAME(n)\
|
||||
((n) == LOG_EMERG ? "LOG_EMERG" : \
|
||||
((n) == LOG_ALERT ? "LOG_ALERT" : \
|
||||
((n) == LOG_CRIT ? "LOG_CRIT" : \
|
||||
((n) == LOG_ERR ? "LOG_ERR" : \
|
||||
((n) == LOG_WARNING ? "LOG_WARNING" : \
|
||||
((n) == LOG_NOTICE ? "LOG_NOTICE" : \
|
||||
((n) == LOG_INFO ? "LOG_INFO" : \
|
||||
((n) == LOG_DEBUG ? "LOG_DEBUG" : \
|
||||
#define STRLOGPRIORITYNAME(n) \
|
||||
((n) == LOG_EMERG ? "LOG_EMERG" : \
|
||||
((n) == LOG_ALERT ? "LOG_ALERT" : \
|
||||
((n) == LOG_CRIT ? "LOG_CRIT" : \
|
||||
((n) == LOG_ERR ? "LOG_ERR" : \
|
||||
((n) == LOG_WARNING ? "LOG_WARNING" : \
|
||||
((n) == LOG_NOTICE ? "LOG_NOTICE" : \
|
||||
((n) == LOG_INFO ? "LOG_INFO" : \
|
||||
((n) == LOG_DEBUG ? "LOG_DEBUG" : \
|
||||
"Unknown log priority"))))))))
|
||||
|
||||
#define STRPACKETTYPE(p) ((p) == MYSQL_COM_INIT_DB ? "COM_INIT_DB" : \
|
||||
((p) == MYSQL_COM_CREATE_DB ? "COM_CREATE_DB" : \
|
||||
((p) == MYSQL_COM_DROP_DB ? "COM_DROP_DB" : \
|
||||
((p) == MYSQL_COM_REFRESH ? "COM_REFRESH" : \
|
||||
((p) == MYSQL_COM_DEBUG ? "COM_DEBUG" : \
|
||||
((p) == MYSQL_COM_PING ? "COM_PING" : \
|
||||
#define STRPACKETTYPE(p) ((p) == MYSQL_COM_INIT_DB ? "COM_INIT_DB" : \
|
||||
((p) == MYSQL_COM_CREATE_DB ? "COM_CREATE_DB" : \
|
||||
((p) == MYSQL_COM_DROP_DB ? "COM_DROP_DB" : \
|
||||
((p) == MYSQL_COM_REFRESH ? "COM_REFRESH" : \
|
||||
((p) == MYSQL_COM_DEBUG ? "COM_DEBUG" : \
|
||||
((p) == MYSQL_COM_PING ? "COM_PING" : \
|
||||
((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_PROCESS_INFO ? "COM_PROCESS_INFO" : \
|
||||
((p) == MYSQL_COM_CONNECT ? "COM_CONNECT" : \
|
||||
((p) == MYSQL_COM_PROCESS_KILL ? "COM_PROCESS_KILL" : \
|
||||
((p) == MYSQL_COM_TIME ? "COM_TIME" : \
|
||||
((p) == MYSQL_COM_DELAYED_INSERT ? "COM_DELAYED_INSERT" : \
|
||||
((p) == MYSQL_COM_DAEMON ? "COM_DAEMON" : \
|
||||
((p) == MYSQL_COM_QUIT ? "COM_QUIT" : \
|
||||
((p) == MYSQL_COM_STMT_PREPARE ? "MYSQL_COM_STMT_PREPARE" : \
|
||||
((p) == MYSQL_COM_STMT_EXECUTE ? "MYSQL_COM_STMT_EXECUTE" : \
|
||||
"UNKNOWN MYSQL PACKET TYPE"))))))))))))))))))
|
||||
((p) == MYSQL_COM_PROCESS_INFO ? "COM_PROCESS_INFO" : \
|
||||
((p) == MYSQL_COM_CONNECT ? "COM_CONNECT" : \
|
||||
((p) == MYSQL_COM_PROCESS_KILL ? "COM_PROCESS_KILL" : \
|
||||
((p) == MYSQL_COM_TIME ? "COM_TIME" : \
|
||||
((p) == MYSQL_COM_DELAYED_INSERT ? "COM_DELAYED_INSERT" : \
|
||||
((p) == MYSQL_COM_DAEMON ? "COM_DAEMON" : \
|
||||
((p) == MYSQL_COM_QUIT ? "COM_QUIT" : \
|
||||
((p) == MYSQL_COM_STMT_PREPARE ? "MYSQL_COM_STMT_PREPARE" : \
|
||||
((p) == MYSQL_COM_STMT_EXECUTE ? "MYSQL_COM_STMT_EXECUTE" : \
|
||||
"UNKNOWN MYSQL PACKET TYPE"))))))))))))))))))
|
||||
|
||||
#define STRDCBSTATE(s) ((s) == DCB_STATE_ALLOC ? "DCB_STATE_ALLOC" : \
|
||||
((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_ROUTER_READY ? "SESSION_STATE_ROUTER_READY" : \
|
||||
((s) == SESSION_STATE_LISTENER_STOPPED ? "SESSION_STATE_LISTENER_STOPPED" : \
|
||||
(s) == SESSION_STATE_STOPPING ? "SESSION_STATE_STOPPING":\
|
||||
"SESSION_STATE_UNKNOWN"))))))
|
||||
(s) == SESSION_STATE_STOPPING ? "SESSION_STATE_STOPPING": \
|
||||
"SESSION_STATE_UNKNOWN"))))))
|
||||
|
||||
#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_CONNECTED ? "MXS_AUTH_STATE_CONNECTED" : \
|
||||
((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_FAILED ? "MXS_AUTH_STATE_FAILED" : \
|
||||
((s) == MXS_AUTH_STATE_COMPLETE ? "MXS_AUTH_STATE_COMPLETE" : \
|
||||
"UNKNOWN AUTH STATE")))))))
|
||||
((s) == MXS_AUTH_STATE_PENDING_CONNECT ? "MXS_AUTH_STATE_PENDING_CONNECT" : \
|
||||
((s) == MXS_AUTH_STATE_CONNECTED ? "MXS_AUTH_STATE_CONNECTED" : \
|
||||
((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_FAILED ? "MXS_AUTH_STATE_FAILED" : \
|
||||
((s) == MXS_AUTH_STATE_COMPLETE ? "MXS_AUTH_STATE_COMPLETE" : \
|
||||
"UNKNOWN AUTH STATE")))))))
|
||||
|
||||
#define STRITEMTYPE(t) ((t) == Item::FIELD_ITEM ? "FIELD_ITEM" : \
|
||||
((t) == Item::FUNC_ITEM ? "FUNC_ITEM" : \
|
||||
((t) == Item::SUM_FUNC_ITEM ? "SUM_FUNC_ITEM" : \
|
||||
((t) == Item::STRING_ITEM ? "STRING_ITEM" : \
|
||||
((t) == Item::INT_ITEM ? "INT_ITEM" : \
|
||||
((t) == Item::REAL_ITEM ? "REAL_ITEM" : \
|
||||
((t) == Item::NULL_ITEM ? "NULL_ITEM" : \
|
||||
((t) == Item::VARBIN_ITEM ? "VARBIN_ITEM" : \
|
||||
((t) == Item::COPY_STR_ITEM ? "COPY_STR_ITEM" : \
|
||||
((t) == Item::FIELD_AVG_ITEM ? "FIELD_AVG_ITEM" : \
|
||||
((t) == Item::DEFAULT_VALUE_ITEM ? "DEFAULT_VALUE_ITEM" : \
|
||||
((t) == Item::PROC_ITEM ? "PROC_ITEM" : \
|
||||
((t) == Item::COND_ITEM ? "COND_ITEM" : \
|
||||
((t) == Item::REF_ITEM ? "REF_ITEM" : \
|
||||
(t) == Item::FIELD_STD_ITEM ? "FIELD_STD_ITEM" : \
|
||||
((t) == Item::FIELD_VARIANCE_ITEM ? "FIELD_VARIANCE_ITEM" : \
|
||||
((t) == Item::INSERT_VALUE_ITEM ? "INSERT_VALUE_ITEM": \
|
||||
((t) == Item::SUBSELECT_ITEM ? "SUBSELECT_ITEM" : \
|
||||
((t) == Item::ROW_ITEM ? "ROW_ITEM" : \
|
||||
((t) == Item::CACHE_ITEM ? "CACHE_ITEM" : \
|
||||
((t) == Item::TYPE_HOLDER ? "TYPE_HOLDER" : \
|
||||
((t) == Item::PARAM_ITEM ? "PARAM_ITEM" : \
|
||||
((t) == Item::TRIGGER_FIELD_ITEM ? "TRIGGER_FIELD_ITEM" : \
|
||||
((t) == Item::DECIMAL_ITEM ? "DECIMAL_ITEM" : \
|
||||
((t) == Item::XPATH_NODESET ? "XPATH_NODESET" : \
|
||||
((t) == Item::XPATH_NODESET_CMP ? "XPATH_NODESET_CMP" : \
|
||||
((t) == Item::VIEW_FIXER_ITEM ? "VIEW_FIXER_ITEM" : \
|
||||
((t) == Item::EXPR_CACHE_ITEM ? "EXPR_CACHE_ITEM" : \
|
||||
"Unknown item")))))))))))))))))))))))))))
|
||||
#define STRITEMTYPE(t) ((t) == Item::FIELD_ITEM ? "FIELD_ITEM" : \
|
||||
((t) == Item::FUNC_ITEM ? "FUNC_ITEM" : \
|
||||
((t) == Item::SUM_FUNC_ITEM ? "SUM_FUNC_ITEM" : \
|
||||
((t) == Item::STRING_ITEM ? "STRING_ITEM" : \
|
||||
((t) == Item::INT_ITEM ? "INT_ITEM" : \
|
||||
((t) == Item::REAL_ITEM ? "REAL_ITEM" : \
|
||||
((t) == Item::NULL_ITEM ? "NULL_ITEM" : \
|
||||
((t) == Item::VARBIN_ITEM ? "VARBIN_ITEM" : \
|
||||
((t) == Item::COPY_STR_ITEM ? "COPY_STR_ITEM" : \
|
||||
((t) == Item::FIELD_AVG_ITEM ? "FIELD_AVG_ITEM" : \
|
||||
((t) == Item::DEFAULT_VALUE_ITEM ? "DEFAULT_VALUE_ITEM" : \
|
||||
((t) == Item::PROC_ITEM ? "PROC_ITEM" : \
|
||||
((t) == Item::COND_ITEM ? "COND_ITEM" : \
|
||||
((t) == Item::REF_ITEM ? "REF_ITEM" : \
|
||||
(t) == Item::FIELD_STD_ITEM ? "FIELD_STD_ITEM" : \
|
||||
((t) == Item::FIELD_VARIANCE_ITEM ? "FIELD_VARIANCE_ITEM" : \
|
||||
((t) == Item::INSERT_VALUE_ITEM ? "INSERT_VALUE_ITEM": \
|
||||
((t) == Item::SUBSELECT_ITEM ? "SUBSELECT_ITEM" : \
|
||||
((t) == Item::ROW_ITEM ? "ROW_ITEM" : \
|
||||
((t) == Item::CACHE_ITEM ? "CACHE_ITEM" : \
|
||||
((t) == Item::TYPE_HOLDER ? "TYPE_HOLDER" : \
|
||||
((t) == Item::PARAM_ITEM ? "PARAM_ITEM" : \
|
||||
((t) == Item::TRIGGER_FIELD_ITEM ? "TRIGGER_FIELD_ITEM" : \
|
||||
((t) == Item::DECIMAL_ITEM ? "DECIMAL_ITEM" : \
|
||||
((t) == Item::XPATH_NODESET ? "XPATH_NODESET" : \
|
||||
((t) == Item::XPATH_NODESET_CMP ? "XPATH_NODESET_CMP" : \
|
||||
((t) == Item::VIEW_FIXER_ITEM ? "VIEW_FIXER_ITEM" : \
|
||||
((t) == Item::EXPR_CACHE_ITEM ? "EXPR_CACHE_ITEM" : \
|
||||
"Unknown item")))))))))))))))))))))))))))
|
||||
|
||||
#define STRDCBROLE(r) ((r) == DCB_ROLE_SERVICE_LISTENER ? "DCB_ROLE_SERVICE_LISTENER" : \
|
||||
((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" : \
|
||||
"UNKNOWN DCB ROLE"))))
|
||||
|
||||
#define STRBETYPE(t) ((t) == BE_MASTER ? "BE_MASTER" : \
|
||||
((t) == BE_SLAVE ? "BE_SLAVE" : \
|
||||
((t) == BE_UNDEFINED ? "BE_UNDEFINED" : \
|
||||
#define STRBETYPE(t) ((t) == BE_MASTER ? "BE_MASTER" : \
|
||||
((t) == BE_SLAVE ? "BE_SLAVE" : \
|
||||
((t) == BE_UNDEFINED ? "BE_UNDEFINED" : \
|
||||
"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_ROUTER_CONNECTIONS ? "LEAST_ROUTER_CONNECTIONS" : \
|
||||
((c) == LEAST_BEHIND_MASTER ? "LEAST_BEHIND_MASTER" : \
|
||||
((c) == LEAST_CURRENT_OPERATIONS ? "LEAST_CURRENT_OPERATIONS" : "Unknown criteria")))))
|
||||
((c) == LEAST_ROUTER_CONNECTIONS ? "LEAST_ROUTER_CONNECTIONS" : \
|
||||
((c) == LEAST_BEHIND_MASTER ? "LEAST_BEHIND_MASTER" : \
|
||||
((c) == LEAST_CURRENT_OPERATIONS ? "LEAST_CURRENT_OPERATIONS" : "Unknown criteria")))))
|
||||
|
||||
#define STRSRVSTATUS(s) (SERVER_IS_MASTER(s) ? "RUNNING MASTER" : \
|
||||
(SERVER_IS_SLAVE(s) ? "RUNNING SLAVE" : \
|
||||
(SERVER_IS_JOINED(s) ? "RUNNING JOINED" : \
|
||||
(SERVER_IS_NDB(s) ? "RUNNING NDB" : \
|
||||
((SERVER_IS_RUNNING(s) && SERVER_IN_MAINT(s)) ? "RUNNING MAINTENANCE" : \
|
||||
(SERVER_IS_RELAY_SERVER(s) ? "RUNNING RELAY" : \
|
||||
(SERVER_IS_RUNNING(s) ? "RUNNING (only)" : \
|
||||
(SERVER_IS_DOWN(s) ? "DOWN" : "UNKNOWN STATUS"))))))))
|
||||
#define STRSRVSTATUS(s) (SERVER_IS_MASTER(s) ? "RUNNING MASTER" : \
|
||||
(SERVER_IS_SLAVE(s) ? "RUNNING SLAVE" : \
|
||||
(SERVER_IS_JOINED(s) ? "RUNNING JOINED" : \
|
||||
(SERVER_IS_NDB(s) ? "RUNNING NDB" : \
|
||||
((SERVER_IS_RUNNING(s) && SERVER_IN_MAINT(s)) ? "RUNNING MAINTENANCE" : \
|
||||
(SERVER_IS_RELAY_SERVER(s) ? "RUNNING RELAY" : \
|
||||
(SERVER_IS_RUNNING(s) ? "RUNNING (only)" : \
|
||||
(SERVER_IS_DOWN(s) ? "DOWN" : "UNKNOWN STATUS"))))))))
|
||||
|
||||
#define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \
|
||||
(t == TARGET_MASTER ? "TARGET_MASTER" : \
|
||||
(t == TARGET_SLAVE ? "TARGET_SLAVE" : \
|
||||
(t == TARGET_NAMED_SERVER ? "TARGET_NAMED_SERVER" : \
|
||||
(t == TARGET_UNDEFINED ? "TARGET_UNDEFINED" : \
|
||||
"Unknown target value")))))
|
||||
#define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \
|
||||
(t == TARGET_MASTER ? "TARGET_MASTER" : \
|
||||
(t == TARGET_SLAVE ? "TARGET_SLAVE" : \
|
||||
(t == TARGET_NAMED_SERVER ? "TARGET_NAMED_SERVER" : \
|
||||
(t == TARGET_UNDEFINED ? "TARGET_UNDEFINED" : \
|
||||
"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" : \
|
||||
((t) == HINT_ROUTE_TO_SLAVE ? "HINT_ROUTE_TO_SLAVE" : \
|
||||
((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_ALL ? "HINT_ROUTE_TO_ALL" : \
|
||||
((t) == HINT_PARAMETER ? "HINT_PARAMETER" : "UNKNOWN HINT TYPE"))))))
|
||||
#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_NAMED_SERVER ? "HINT_ROUTE_TO_NAMED_SERVER" : \
|
||||
((t) == HINT_ROUTE_TO_UPTODATE_SERVER ? "HINT_ROUTE_TO_UPTODATE_SERVER" : \
|
||||
((t) == HINT_ROUTE_TO_ALL ? "HINT_ROUTE_TO_ALL" : \
|
||||
((t) == HINT_PARAMETER ? "HINT_PARAMETER" : "UNKNOWN HINT TYPE"))))))
|
||||
|
||||
#define STRDCBREASON(r) ((r) == DCB_REASON_CLOSE ? "DCB_REASON_CLOSE" : \
|
||||
((r) == DCB_REASON_DRAINED ? "DCB_REASON_DRAINED" : \
|
||||
((r) == DCB_REASON_HIGH_WATER ? "DCB_REASON_HIGH_WATER" : \
|
||||
((r) == DCB_REASON_LOW_WATER ? "DCB_REASON_LOW_WATER" : \
|
||||
((r) == DCB_REASON_ERROR ? "DCB_REASON_ERROR" : \
|
||||
((r) == DCB_REASON_HUP ? "DCB_REASON_HUP" : \
|
||||
((r) == DCB_REASON_NOT_RESPONDING ? "DCB_REASON_NOT_RESPONDING" : \
|
||||
"Unknown DCB reason")))))))
|
||||
#define STRDCBREASON(r) ((r) == DCB_REASON_CLOSE ? "DCB_REASON_CLOSE" : \
|
||||
((r) == DCB_REASON_DRAINED ? "DCB_REASON_DRAINED" : \
|
||||
((r) == DCB_REASON_HIGH_WATER ? "DCB_REASON_HIGH_WATER" : \
|
||||
((r) == DCB_REASON_LOW_WATER ? "DCB_REASON_LOW_WATER" : \
|
||||
((r) == DCB_REASON_ERROR ? "DCB_REASON_ERROR" : \
|
||||
((r) == DCB_REASON_HUP ? "DCB_REASON_HUP" : \
|
||||
((r) == DCB_REASON_NOT_RESPONDING ? "DCB_REASON_NOT_RESPONDING" : \
|
||||
"Unknown DCB reason")))))))
|
||||
|
||||
#define CHK_MLIST(l) { \
|
||||
ss_info_dassert((l->mlist_chk_top == CHK_NUM_MLIST && \
|
||||
l->mlist_chk_tail == CHK_NUM_MLIST), \
|
||||
"Single-linked list structure under- or overflow"); \
|
||||
if (l->mlist_first == NULL) { \
|
||||
ss_info_dassert(l->mlist_nodecount == 0, \
|
||||
"List head is NULL but element counter is not zero."); \
|
||||
ss_info_dassert(l->mlist_last == NULL, \
|
||||
"List head is NULL but tail has node"); \
|
||||
} else { \
|
||||
ss_info_dassert(l->mlist_nodecount > 0, \
|
||||
"List head has node but element counter is not " \
|
||||
"positive."); \
|
||||
CHK_MLIST_NODE(l->mlist_first); \
|
||||
CHK_MLIST_NODE(l->mlist_last); \
|
||||
} \
|
||||
if (l->mlist_nodecount == 0) { \
|
||||
ss_info_dassert(l->mlist_first == NULL, \
|
||||
"Element counter is zero but head has node"); \
|
||||
ss_info_dassert(l->mlist_last == NULL, \
|
||||
"Element counter is zero but tail has node"); \
|
||||
} \
|
||||
ss_info_dassert((l->mlist_chk_top == CHK_NUM_MLIST && \
|
||||
l->mlist_chk_tail == CHK_NUM_MLIST), \
|
||||
"Single-linked list structure under- or overflow"); \
|
||||
if (l->mlist_first == NULL) { \
|
||||
ss_info_dassert(l->mlist_nodecount == 0, \
|
||||
"List head is NULL but element counter is not zero."); \
|
||||
ss_info_dassert(l->mlist_last == NULL, \
|
||||
"List head is NULL but tail has node"); \
|
||||
} else { \
|
||||
ss_info_dassert(l->mlist_nodecount > 0, \
|
||||
"List head has node but element counter is not " \
|
||||
"positive."); \
|
||||
CHK_MLIST_NODE(l->mlist_first); \
|
||||
CHK_MLIST_NODE(l->mlist_last); \
|
||||
} \
|
||||
if (l->mlist_nodecount == 0) { \
|
||||
ss_info_dassert(l->mlist_first == NULL, \
|
||||
"Element counter is zero but head has node"); \
|
||||
ss_info_dassert(l->mlist_last == NULL, \
|
||||
"Element counter is zero but tail has node"); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define CHK_MLIST_NODE(n) { \
|
||||
ss_info_dassert((n->mlnode_chk_top == CHK_NUM_MLIST_NODE && \
|
||||
n->mlnode_chk_tail == CHK_NUM_MLIST_NODE), \
|
||||
"Single-linked list node under- or overflow"); \
|
||||
ss_info_dassert((n->mlnode_chk_top == CHK_NUM_MLIST_NODE && \
|
||||
n->mlnode_chk_tail == CHK_NUM_MLIST_NODE), \
|
||||
"Single-linked list node under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_MLIST_CURSOR(c) { \
|
||||
ss_info_dassert(c->mlcursor_chk_top == CHK_NUM_MLIST_CURSOR && \
|
||||
c->mlcursor_chk_tail == CHK_NUM_MLIST_CURSOR, \
|
||||
"List cursor under- or overflow"); \
|
||||
ss_info_dassert(c->mlcursor_list != NULL, \
|
||||
"List cursor doesn't have list"); \
|
||||
ss_info_dassert(c->mlcursor_pos != NULL || \
|
||||
(c->mlcursor_pos == NULL && \
|
||||
c->mlcursor_list->mlist_first == NULL), \
|
||||
"List cursor doesn't have position"); \
|
||||
ss_info_dassert(c->mlcursor_chk_top == CHK_NUM_MLIST_CURSOR && \
|
||||
c->mlcursor_chk_tail == CHK_NUM_MLIST_CURSOR, \
|
||||
"List cursor under- or overflow"); \
|
||||
ss_info_dassert(c->mlcursor_list != NULL, \
|
||||
"List cursor doesn't have list"); \
|
||||
ss_info_dassert(c->mlcursor_pos != NULL || \
|
||||
(c->mlcursor_pos == NULL && \
|
||||
c->mlcursor_list->mlist_first == NULL), \
|
||||
"List cursor doesn't have position"); \
|
||||
}
|
||||
|
||||
#define CHK_SLIST(l) { \
|
||||
ss_info_dassert((l->slist_chk_top == CHK_NUM_SLIST && \
|
||||
l->slist_chk_tail == CHK_NUM_SLIST), \
|
||||
"Single-linked list structure under- or overflow"); \
|
||||
if (l->slist_head == NULL) { \
|
||||
ss_info_dassert(l->slist_nelems == 0, \
|
||||
"List head is NULL but element counter is not zero."); \
|
||||
ss_info_dassert(l->slist_tail == NULL, \
|
||||
"List head is NULL but tail has node"); \
|
||||
} else { \
|
||||
ss_info_dassert(l->slist_nelems > 0, \
|
||||
"List head has node but element counter is not " \
|
||||
"positive."); \
|
||||
CHK_SLIST_NODE(l->slist_head); \
|
||||
CHK_SLIST_NODE(l->slist_tail); \
|
||||
} \
|
||||
if (l->slist_nelems == 0) { \
|
||||
ss_info_dassert(l->slist_head == NULL, \
|
||||
"Element counter is zero but head has node"); \
|
||||
ss_info_dassert(l->slist_tail == NULL, \
|
||||
"Element counter is zero but tail has node"); \
|
||||
} \
|
||||
#define CHK_SLIST(l) { \
|
||||
ss_info_dassert((l->slist_chk_top == CHK_NUM_SLIST && \
|
||||
l->slist_chk_tail == CHK_NUM_SLIST), \
|
||||
"Single-linked list structure under- or overflow"); \
|
||||
if (l->slist_head == NULL) { \
|
||||
ss_info_dassert(l->slist_nelems == 0, \
|
||||
"List head is NULL but element counter is not zero."); \
|
||||
ss_info_dassert(l->slist_tail == NULL, \
|
||||
"List head is NULL but tail has node"); \
|
||||
} else { \
|
||||
ss_info_dassert(l->slist_nelems > 0, \
|
||||
"List head has node but element counter is not " \
|
||||
"positive."); \
|
||||
CHK_SLIST_NODE(l->slist_head); \
|
||||
CHK_SLIST_NODE(l->slist_tail); \
|
||||
} \
|
||||
if (l->slist_nelems == 0) { \
|
||||
ss_info_dassert(l->slist_head == NULL, \
|
||||
"Element counter is zero but head has node"); \
|
||||
ss_info_dassert(l->slist_tail == NULL, \
|
||||
"Element counter is zero but tail has node"); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define CHK_SLIST_NODE(n) { \
|
||||
ss_info_dassert((n->slnode_chk_top == CHK_NUM_SLIST_NODE && \
|
||||
n->slnode_chk_tail == CHK_NUM_SLIST_NODE), \
|
||||
"Single-linked list node under- or overflow"); \
|
||||
}
|
||||
ss_info_dassert((n->slnode_chk_top == CHK_NUM_SLIST_NODE && \
|
||||
n->slnode_chk_tail == CHK_NUM_SLIST_NODE), \
|
||||
"Single-linked list node under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_SLIST_CURSOR(c) { \
|
||||
ss_info_dassert(c->slcursor_chk_top == CHK_NUM_SLIST_CURSOR && \
|
||||
c->slcursor_chk_tail == CHK_NUM_SLIST_CURSOR, \
|
||||
"List cursor under- or overflow"); \
|
||||
ss_info_dassert(c->slcursor_list != NULL, \
|
||||
"List cursor doesn't have list"); \
|
||||
ss_info_dassert(c->slcursor_pos != NULL || \
|
||||
(c->slcursor_pos == NULL && \
|
||||
c->slcursor_list->slist_head == NULL), \
|
||||
"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"); \
|
||||
ss_info_dassert(c->slcursor_chk_top == CHK_NUM_SLIST_CURSOR && \
|
||||
c->slcursor_chk_tail == CHK_NUM_SLIST_CURSOR, \
|
||||
"List cursor under- or overflow"); \
|
||||
ss_info_dassert(c->slcursor_list != NULL, \
|
||||
"List cursor doesn't have list"); \
|
||||
ss_info_dassert(c->slcursor_pos != NULL || \
|
||||
(c->slcursor_pos == NULL && \
|
||||
c->slcursor_list->slist_head == NULL), \
|
||||
"List cursor doesn't have position"); \
|
||||
}
|
||||
|
||||
#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_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_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_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) { \
|
||||
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) { \
|
||||
ss_info_dassert((l.mlist_uselock && l.mlist_islocked) || \
|
||||
!(l.mlist_uselock || l.mlist_islocked), \
|
||||
ss_info_dassert((l.mlist_uselock && l.mlist_islocked) || \
|
||||
!(l.mlist_uselock || l.mlist_islocked), \
|
||||
("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) { \
|
||||
ss_info_dassert(!b || \
|
||||
(b && (l->srw_rwlock_thr == pthread_self())), \
|
||||
"rwlock is not acquired although it should be."); \
|
||||
(b && (l->srw_rwlock_thr == pthread_self())), \
|
||||
"rwlock is not acquired although it should be."); \
|
||||
}
|
||||
|
||||
#define CHK_FNAMES_CONF(fn) { \
|
||||
ss_info_dassert(fn->fn_chk_top == CHK_NUM_FNAMES && \
|
||||
fn->fn_chk_tail == CHK_NUM_FNAMES, \
|
||||
"File names confs struct under- or overflow"); \
|
||||
ss_info_dassert(fn->fn_chk_top == CHK_NUM_FNAMES && \
|
||||
fn->fn_chk_tail == CHK_NUM_FNAMES, \
|
||||
"File names confs struct under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_LOGMANAGER(lm) { \
|
||||
ss_info_dassert(lm->lm_chk_top == CHK_NUM_LOGMANAGER && \
|
||||
lm->lm_chk_tail == CHK_NUM_LOGMANAGER, \
|
||||
"Log manager struct under- or overflow"); \
|
||||
#define CHK_LOGMANAGER(lm) { \
|
||||
ss_info_dassert(lm->lm_chk_top == CHK_NUM_LOGMANAGER && \
|
||||
lm->lm_chk_tail == CHK_NUM_LOGMANAGER, \
|
||||
"Log manager struct under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_FILE(f) { \
|
||||
ss_info_dassert(f->sf_chk_top == CHK_NUM_FILE && \
|
||||
f->sf_chk_tail == CHK_NUM_FILE, \
|
||||
"File struct under- or overflow"); \
|
||||
#define CHK_FILE(f) { \
|
||||
ss_info_dassert(f->sf_chk_top == CHK_NUM_FILE && \
|
||||
f->sf_chk_tail == CHK_NUM_FILE, \
|
||||
"File struct under- or overflow"); \
|
||||
}
|
||||
|
||||
|
||||
#define CHK_BLOCKBUF(bb) { \
|
||||
ss_info_dassert(bb->bb_chk_top == CHK_NUM_BLOCKBUF, \
|
||||
"Block buf under- or overflow"); \
|
||||
#define CHK_BLOCKBUF(bb) { \
|
||||
ss_info_dassert(bb->bb_chk_top == CHK_NUM_BLOCKBUF, \
|
||||
"Block buf under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_HASHTABLE(t) { \
|
||||
ss_info_dassert(t->ht_chk_top == CHK_NUM_HASHTABLE && \
|
||||
t->ht_chk_tail == CHK_NUM_HASHTABLE, \
|
||||
"Hashtable under- or overflow"); \
|
||||
#define CHK_HASHTABLE(t) { \
|
||||
ss_info_dassert(t->ht_chk_top == CHK_NUM_HASHTABLE && \
|
||||
t->ht_chk_tail == CHK_NUM_HASHTABLE, \
|
||||
"Hashtable under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_MANAGED_LIST(l) { \
|
||||
ss_info_dassert(l->list_entry_chk_top == CHK_NUM_MANAGED_LIST && \
|
||||
l->list_entry_chk_tail == CHK_NUM_MANAGED_LIST, \
|
||||
"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_MANAGED_LIST(l) { \
|
||||
ss_info_dassert(l->list_entry_chk_top == CHK_NUM_MANAGED_LIST && \
|
||||
l->list_entry_chk_tail == CHK_NUM_MANAGED_LIST, \
|
||||
"Managed list under- or overflow"); \
|
||||
}
|
||||
|
||||
#define CHK_SESSION(s) { \
|
||||
ss_info_dassert(s->ses_chk_top == CHK_NUM_SESSION && \
|
||||
s->ses_chk_tail == CHK_NUM_SESSION, \
|
||||
"Session 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_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_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_GWBUF(b) { \
|
||||
ss_info_dassert(((char *)(b)->start <= (char *)(b)->end), \
|
||||
"gwbuf start has passed the endpoint"); \
|
||||
#define CHK_SESSION(s) { \
|
||||
ss_info_dassert(s->ses_chk_top == CHK_NUM_SESSION && \
|
||||
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) { \
|
||||
ss_info_dassert((r)->rses_chk_top == CHK_NUM_ROUTER_SES && \
|
||||
(r)->rses_chk_tail == CHK_NUM_ROUTER_SES, \
|
||||
"Router client session has invalid check fields"); \
|
||||
}
|
||||
ss_info_dassert((r)->rses_chk_top == CHK_NUM_ROUTER_SES && \
|
||||
(r)->rses_chk_tail == CHK_NUM_ROUTER_SES, \
|
||||
"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 && \
|
||||
(p)->rses_prop_chk_tail == CHK_NUM_ROUTER_PROPERTY, \
|
||||
"Router property has invalid check fields"); \
|
||||
}
|
||||
(p)->rses_prop_chk_tail == CHK_NUM_ROUTER_PROPERTY, \
|
||||
"Router property has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_MYSQL_SESCMD(s) { \
|
||||
ss_info_dassert((s)->my_sescmd_chk_top == CHK_NUM_MY_SESCMD && \
|
||||
(s)->my_sescmd_chk_tail == CHK_NUM_MY_SESCMD, \
|
||||
"Session command has invalid check fields"); \
|
||||
}
|
||||
#define CHK_MYSQL_SESCMD(s) { \
|
||||
ss_info_dassert((s)->my_sescmd_chk_top == CHK_NUM_MY_SESCMD && \
|
||||
(s)->my_sescmd_chk_tail == CHK_NUM_MY_SESCMD, \
|
||||
"Session command has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_SESCMD_CUR(c) { \
|
||||
ss_info_dassert((c)->scmd_cur_chk_top == CHK_NUM_SESCMD_CUR && \
|
||||
(c)->scmd_cur_chk_tail == CHK_NUM_SESCMD_CUR, \
|
||||
"Session command cursor has invalid check fields"); \
|
||||
}
|
||||
#define CHK_SESCMD_CUR(c) { \
|
||||
ss_info_dassert((c)->scmd_cur_chk_top == CHK_NUM_SESCMD_CUR && \
|
||||
(c)->scmd_cur_chk_tail == CHK_NUM_SESCMD_CUR, \
|
||||
"Session command cursor has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_BACKEND(b) { \
|
||||
ss_info_dassert((b)->be_chk_top == CHK_NUM_BACKEND && \
|
||||
(b)->be_chk_tail == CHK_NUM_BACKEND, \
|
||||
"BACKEND has invalid check fields"); \
|
||||
}
|
||||
#define CHK_BACKEND(b) { \
|
||||
ss_info_dassert((b)->be_chk_top == CHK_NUM_BACKEND && \
|
||||
(b)->be_chk_tail == CHK_NUM_BACKEND, \
|
||||
"BACKEND has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_BACKEND_REF(r) { \
|
||||
ss_info_dassert((r)->bref_chk_top == CHK_NUM_BACKEND_REF && \
|
||||
(r)->bref_chk_tail == CHK_NUM_BACKEND_REF, \
|
||||
"Backend reference has invalid check fields"); \
|
||||
}
|
||||
(r)->bref_chk_tail == CHK_NUM_BACKEND_REF, \
|
||||
"Backend reference has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_PREP_STMT(p) { \
|
||||
ss_info_dassert((p)->pstmt_chk_top == CHK_NUM_PREP_STMT && \
|
||||
(p)->pstmt_chk_tail == CHK_NUM_PREP_STMT, \
|
||||
"Prepared statement struct has invalid check fields"); \
|
||||
}
|
||||
(p)->pstmt_chk_tail == CHK_NUM_PREP_STMT, \
|
||||
"Prepared statement struct has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_PARSING_INFO(p) { \
|
||||
ss_info_dassert((p)->pi_chk_top == CHK_NUM_PINFO && \
|
||||
(p)->pi_chk_tail == CHK_NUM_PINFO, \
|
||||
"Parsing info struct has invalid check fields"); \
|
||||
}
|
||||
ss_info_dassert((p)->pi_chk_top == CHK_NUM_PINFO && \
|
||||
(p)->pi_chk_tail == CHK_NUM_PINFO, \
|
||||
"Parsing info struct has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_MYSQL_SESSION(s) { \
|
||||
ss_info_dassert((s)->myses_chk_top == CHK_NUM_MYSQLSES && \
|
||||
(s)->myses_chk_tail == CHK_NUM_MYSQLSES, \
|
||||
"MYSQL session struct has invalid check fields"); \
|
||||
}
|
||||
#define CHK_MYSQL_SESSION(s) { \
|
||||
ss_info_dassert((s)->myses_chk_top == CHK_NUM_MYSQLSES && \
|
||||
(s)->myses_chk_tail == CHK_NUM_MYSQLSES, \
|
||||
"MYSQL session struct has invalid check fields"); \
|
||||
}
|
||||
|
||||
#define CHK_ADMIN_SESSION(s) { \
|
||||
ss_info_dassert((s)->adminses_chk_top == CHK_NUM_ADMINSES && \
|
||||
(s)->adminses_chk_tail == CHK_NUM_ADMINSES, \
|
||||
"Admin session struct has invalid check fields"); \
|
||||
}
|
||||
#define CHK_ADMIN_SESSION(s) { \
|
||||
ss_info_dassert((s)->adminses_chk_top == CHK_NUM_ADMINSES && \
|
||||
(s)->adminses_chk_tail == CHK_NUM_ADMINSES, \
|
||||
"Admin session struct has invalid check fields"); \
|
||||
}
|
||||
|
||||
|
||||
MXS_END_DECLS
|
||||
|
@ -71,7 +71,8 @@ typedef struct ssl_listener
|
||||
char *ssl_key; /*< SSL private key */
|
||||
char *ssl_ca_cert; /*< SSL CA certificate */
|
||||
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;
|
||||
|
||||
int ssl_authenticate_client(struct dcb *dcb, bool is_capable);
|
||||
|
@ -73,8 +73,8 @@ typedef struct servlistener
|
||||
bool listener_serialize(const SERV_LISTENER *listener);
|
||||
|
||||
SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol,
|
||||
const char *address, unsigned short port, const char *authenticator,
|
||||
const char* auth_options, SSL_LISTENER *ssl);
|
||||
const char *address, unsigned short port, const char *authenticator,
|
||||
const char* auth_options, SSL_LISTENER *ssl);
|
||||
void listener_free(SERV_LISTENER* listener);
|
||||
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);
|
||||
|
@ -107,7 +107,7 @@ typedef struct mxs_enum_value
|
||||
{
|
||||
const char *name; /**< Name of the enum value */
|
||||
int enum_value; /**< The integer value of the enum */
|
||||
}MXS_ENUM_VALUE;
|
||||
} MXS_ENUM_VALUE;
|
||||
|
||||
/** Module parameter declaration */
|
||||
typedef struct mxs_module_param
|
||||
|
@ -190,9 +190,9 @@ static const MXS_ENUM_VALUE monitor_event_enum_values[] =
|
||||
|
||||
/** Default value for the `events` parameter */
|
||||
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,"
|
||||
"ndb_down,ndb_up,lost_master,lost_slave,lost_synced,lost_donor,lost_ndb,"
|
||||
"new_master,new_slave,new_synced,new_donor,new_ndb";
|
||||
"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,"
|
||||
"new_master,new_slave,new_synced,new_donor,new_ndb";
|
||||
|
||||
/**
|
||||
* 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 */
|
||||
bool created_online; /**< Whether this monitor was created at runtime */
|
||||
volatile bool server_pending_changes;
|
||||
/**< Are there any pending changes to a server?
|
||||
* If yes, the next monitor loop starts early. */
|
||||
/**< Are there any pending changes to a server?
|
||||
* If yes, the next monitor loop starts early. */
|
||||
struct monitor *next; /**< Next monitor in the linked list */
|
||||
};
|
||||
|
||||
|
@ -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_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,
|
||||
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);
|
||||
|
||||
void format_temporal_value(char *str, size_t size, uint8_t type, struct tm *tm);
|
||||
|
@ -66,7 +66,7 @@ static inline int
|
||||
mxs_queue_count(QUEUE_CONFIG *queue_config)
|
||||
{
|
||||
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
|
||||
|
@ -77,11 +77,11 @@ typedef struct router_object
|
||||
void (*diagnostics)(ROUTER *instance, DCB *dcb);
|
||||
void (*clientReply)(ROUTER* instance, void* router_session, GWBUF* queue, DCB *backend_dcb);
|
||||
void (*handleError)(ROUTER* instance,
|
||||
void* router_session,
|
||||
GWBUF* errmsgbuf,
|
||||
DCB* backend_dcb,
|
||||
error_action_t action,
|
||||
bool* succp);
|
||||
void* router_session,
|
||||
GWBUF* errmsgbuf,
|
||||
DCB* backend_dcb,
|
||||
error_action_t action,
|
||||
bool* succp);
|
||||
uint64_t (*getCapabilities)(void);
|
||||
void (*destroyInstance)(ROUTER *instance);
|
||||
} ROUTER_OBJECT;
|
||||
|
@ -154,7 +154,7 @@ typedef enum
|
||||
* A session status block is created for each user (client) connection
|
||||
* to the database, it links the descriptors, routing implementation
|
||||
* and originating service together for the client session.
|
||||
*
|
||||
*
|
||||
* Note that the first few fields (up to and including "entry_is_ready") must
|
||||
* precisely match the LIST_ENTRY structure defined in the list manager.
|
||||
*/
|
||||
|
@ -531,8 +531,8 @@ int gwbuf_compare(const GWBUF* lhs, const GWBUF* rhs)
|
||||
uint8_t lc;
|
||||
uint8_t rc;
|
||||
|
||||
ss_debug(bool rv1 =) gwbuf_get_byte(&lhs, &loffset, &lc);
|
||||
ss_debug(bool rv2 =) gwbuf_get_byte(&rhs, &roffset, &rc);
|
||||
ss_debug(bool rv1 = ) gwbuf_get_byte(&lhs, &loffset, &lc);
|
||||
ss_debug(bool rv2 = ) gwbuf_get_byte(&rhs, &roffset, &rc);
|
||||
|
||||
ss_dassert(rv1 && rv2);
|
||||
|
||||
|
@ -173,9 +173,9 @@ static const char *monitor_params[] =
|
||||
|
||||
static const char *filter_params[] =
|
||||
{
|
||||
"type",
|
||||
"module",
|
||||
NULL
|
||||
"type",
|
||||
"module",
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char *server_params[] =
|
||||
@ -576,21 +576,21 @@ static bool contains_cnf_files(const char *path)
|
||||
|
||||
switch (rc)
|
||||
{
|
||||
case 0:
|
||||
rval = true;
|
||||
break;
|
||||
case 0:
|
||||
rval = true;
|
||||
break;
|
||||
|
||||
case GLOB_NOSPACE:
|
||||
MXS_OOM();
|
||||
break;
|
||||
case GLOB_NOSPACE:
|
||||
MXS_OOM();
|
||||
break;
|
||||
|
||||
case GLOB_ABORTED:
|
||||
MXS_ERROR("Failed to read directory '%s'", path);
|
||||
break;
|
||||
case GLOB_ABORTED:
|
||||
MXS_ERROR("Failed to read directory '%s'", path);
|
||||
break;
|
||||
|
||||
default:
|
||||
ss_dassert(rc == GLOB_NOMATCH);
|
||||
break;
|
||||
default:
|
||||
ss_dassert(rc == GLOB_NOMATCH);
|
||||
break;
|
||||
}
|
||||
|
||||
globfree(&matches);
|
||||
@ -955,56 +955,56 @@ uint64_t config_get_size(const CONFIG_PARAMETER *params, const char *key)
|
||||
|
||||
switch (*end)
|
||||
{
|
||||
case 'T':
|
||||
case 't':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL * 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL * 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
case 't':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL * 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL * 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
case 'g':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
case 'G':
|
||||
case 'g':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
case 'm':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
case 'm':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL * 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL * 1000ULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'K':
|
||||
case 'k':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL;
|
||||
}
|
||||
break;
|
||||
case 'K':
|
||||
case 'k':
|
||||
if (*(end + 1) == 'i')
|
||||
{
|
||||
size *= 1024ULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
size *= 1000ULL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return size;
|
||||
@ -3151,10 +3151,10 @@ bool config_have_required_ssl_params(CONFIG_CONTEXT *obj)
|
||||
CONFIG_PARAMETER *param = obj->parameters;
|
||||
|
||||
return config_get_param(param, "ssl") &&
|
||||
config_get_param(param, "ssl_key") &&
|
||||
config_get_param(param, "ssl_cert") &&
|
||||
config_get_param(param, "ssl_ca_cert") &&
|
||||
strcmp(config_get_value_string(param, "ssl"), "required") == 0;
|
||||
config_get_param(param, "ssl_key") &&
|
||||
config_get_param(param, "ssl_cert") &&
|
||||
config_get_param(param, "ssl_ca_cert") &&
|
||||
strcmp(config_get_value_string(param, "ssl"), "required") == 0;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
case MXS_MODULE_PARAM_COUNT:
|
||||
if ((strtol(value, &endptr, 10)) >= 0 && endptr != value && *endptr == '\0')
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
case MXS_MODULE_PARAM_COUNT:
|
||||
if ((strtol(value, &endptr, 10)) >= 0 && endptr != value && *endptr == '\0')
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_INT:
|
||||
strtol(value, &endptr, 10);
|
||||
if (endptr != value && *endptr == '\0')
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
case MXS_MODULE_PARAM_INT:
|
||||
strtol(value, &endptr, 10);
|
||||
if (endptr != value && *endptr == '\0')
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_SIZE:
|
||||
strtoll(value, &endptr, 10);
|
||||
if (endptr != value)
|
||||
case MXS_MODULE_PARAM_SIZE:
|
||||
strtoll(value, &endptr, 10);
|
||||
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':
|
||||
case 't':
|
||||
case 'G':
|
||||
case 'g':
|
||||
case 'M':
|
||||
case 'm':
|
||||
case 'K':
|
||||
case 'k':
|
||||
if (*endptr == '\0' ||
|
||||
(*endptr == 'i' && *(endptr + 1) == '\0'))
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_BOOL:
|
||||
if (config_truth_value(value) != -1)
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
tok = strtok_r(NULL, delim, &endptr);
|
||||
|
||||
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)
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_SERVICE:
|
||||
if ((context && config_contains_type(context, value, "service")) ||
|
||||
service_find(value))
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
case MXS_MODULE_PARAM_SERVICE:
|
||||
if ((context && config_contains_type(context, value, "service")) ||
|
||||
service_find(value))
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_SERVER:
|
||||
if ((context && config_contains_type(context, value, "server")) ||
|
||||
server_find_by_unique_name(value))
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
case MXS_MODULE_PARAM_SERVER:
|
||||
if ((context && config_contains_type(context, value, "server")) ||
|
||||
server_find_by_unique_name(value))
|
||||
{
|
||||
valid = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MXS_MODULE_PARAM_PATH:
|
||||
valid = check_path_parameter(¶ms[i], value);
|
||||
break;
|
||||
case MXS_MODULE_PARAM_PATH:
|
||||
valid = check_path_parameter(¶ms[i], value);
|
||||
break;
|
||||
|
||||
default:
|
||||
MXS_ERROR("Unexpected module parameter type: %d", params[i].type);
|
||||
ss_dassert(false);
|
||||
break;
|
||||
default:
|
||||
MXS_ERROR("Unexpected module parameter type: %d", params[i].type);
|
||||
ss_dassert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ dcb_connect(SERVER *server, SESSION *session, const char *protocol)
|
||||
}
|
||||
|
||||
if ((funcs = (MXS_PROTOCOL *)load_module(protocol,
|
||||
MODULE_PROTOCOL)) == NULL)
|
||||
MODULE_PROTOCOL)) == NULL)
|
||||
{
|
||||
dcb->state = DCB_STATE_DISCONNECTED;
|
||||
dcb_final_free(dcb);
|
||||
@ -693,8 +693,8 @@ dcb_connect(SERVER *server, SESSION *session, const char *protocol)
|
||||
dcb->protoname = MXS_STRDUP_A(protocol);
|
||||
|
||||
const char *authenticator = server->authenticator ?
|
||||
server->authenticator : dcb->func.auth_default ?
|
||||
dcb->func.auth_default() : "NullAuthDeny";
|
||||
server->authenticator : dcb->func.auth_default ?
|
||||
dcb->func.auth_default() : "NullAuthDeny";
|
||||
|
||||
GWAUTHENTICATOR *authfuncs = (GWAUTHENTICATOR*)load_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",
|
||||
pthread_self(),
|
||||
__func__
|
||||
);
|
||||
);
|
||||
poll_fake_hangup_event(dcb);
|
||||
*nsingleread = 0;
|
||||
break;
|
||||
@ -1151,7 +1151,7 @@ dcb_basic_read_SSL(DCB *dcb, int *nsingleread)
|
||||
MXS_DEBUG("%lu [%s] SSL connection want read",
|
||||
pthread_self(),
|
||||
__func__
|
||||
);
|
||||
);
|
||||
dcb->ssl_read_want_write = false;
|
||||
dcb->ssl_read_want_read = true;
|
||||
*nsingleread = 0;
|
||||
@ -1162,7 +1162,7 @@ dcb_basic_read_SSL(DCB *dcb, int *nsingleread)
|
||||
MXS_DEBUG("%lu [%s] SSL connection want write",
|
||||
pthread_self(),
|
||||
__func__
|
||||
);
|
||||
);
|
||||
dcb->ssl_read_want_write = true;
|
||||
dcb->ssl_read_want_read = false;
|
||||
*nsingleread = 0;
|
||||
@ -1583,25 +1583,25 @@ static void log_illegal_dcb(DCB *dcb)
|
||||
|
||||
switch (dcb->dcb_role)
|
||||
{
|
||||
case DCB_ROLE_BACKEND_HANDLER:
|
||||
connected_to = dcb->server->unique_name;
|
||||
break;
|
||||
case DCB_ROLE_BACKEND_HANDLER:
|
||||
connected_to = dcb->server->unique_name;
|
||||
break;
|
||||
|
||||
case DCB_ROLE_CLIENT_HANDLER:
|
||||
connected_to = dcb->remote;
|
||||
break;
|
||||
case DCB_ROLE_CLIENT_HANDLER:
|
||||
connected_to = dcb->remote;
|
||||
break;
|
||||
|
||||
case DCB_ROLE_INTERNAL:
|
||||
connected_to = "Internal DCB";
|
||||
break;
|
||||
case DCB_ROLE_INTERNAL:
|
||||
connected_to = "Internal DCB";
|
||||
break;
|
||||
|
||||
case DCB_ROLE_SERVICE_LISTENER:
|
||||
connected_to = dcb->service->name;
|
||||
break;
|
||||
case DCB_ROLE_SERVICE_LISTENER:
|
||||
connected_to = dcb->service->name;
|
||||
break;
|
||||
|
||||
default:
|
||||
connected_to = "Illegal DCB role";
|
||||
break;
|
||||
default:
|
||||
connected_to = "Illegal DCB role";
|
||||
break;
|
||||
}
|
||||
|
||||
MXS_ERROR("[dcb_close] Error : Removing DCB %p but it is in state %s "
|
||||
@ -1840,12 +1840,12 @@ void printAllDCBs()
|
||||
void
|
||||
dprintOneDCB(DCB *pdcb, DCB *dcb)
|
||||
{
|
||||
/* TODO: Uncomment once listmanager code is in use
|
||||
if (false == dcb->entry_is_in_use)
|
||||
{
|
||||
return;
|
||||
}
|
||||
*/
|
||||
/* TODO: Uncomment once listmanager code is in use
|
||||
if (false == dcb->entry_is_in_use)
|
||||
{
|
||||
return;
|
||||
}
|
||||
*/
|
||||
dcb_printf(pdcb, "DCB: %p\n", (void *)dcb);
|
||||
dcb_printf(pdcb, "\tDCB state: %s\n",
|
||||
gw_dcb_state2string(dcb->state));
|
||||
@ -2147,22 +2147,22 @@ gw_dcb_state2string(dcb_state_t state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case DCB_STATE_ALLOC:
|
||||
return "DCB Allocated";
|
||||
case DCB_STATE_POLLING:
|
||||
return "DCB in the polling loop";
|
||||
case DCB_STATE_NOPOLLING:
|
||||
return "DCB not in polling loop";
|
||||
case DCB_STATE_LISTENING:
|
||||
return "DCB for listening socket";
|
||||
case DCB_STATE_DISCONNECTED:
|
||||
return "DCB socket closed";
|
||||
case DCB_STATE_ZOMBIE:
|
||||
return "DCB Zombie";
|
||||
case DCB_STATE_UNDEFINED:
|
||||
return "DCB undefined state";
|
||||
default:
|
||||
return "DCB (unknown - erroneous)";
|
||||
case DCB_STATE_ALLOC:
|
||||
return "DCB Allocated";
|
||||
case DCB_STATE_POLLING:
|
||||
return "DCB in the polling loop";
|
||||
case DCB_STATE_NOPOLLING:
|
||||
return "DCB not in polling loop";
|
||||
case DCB_STATE_LISTENING:
|
||||
return "DCB for listening socket";
|
||||
case DCB_STATE_DISCONNECTED:
|
||||
return "DCB socket closed";
|
||||
case DCB_STATE_ZOMBIE:
|
||||
return "DCB Zombie";
|
||||
case DCB_STATE_UNDEFINED:
|
||||
return "DCB undefined state";
|
||||
default:
|
||||
return "DCB (unknown - erroneous)";
|
||||
}
|
||||
}
|
||||
|
||||
@ -2661,40 +2661,40 @@ bool count_by_usage_cb(DCB *dcb, void *data)
|
||||
|
||||
switch (d->type)
|
||||
{
|
||||
case DCB_USAGE_CLIENT:
|
||||
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:
|
||||
case DCB_USAGE_CLIENT:
|
||||
if (DCB_ROLE_CLIENT_HANDLER == dcb->dcb_role)
|
||||
{
|
||||
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;
|
||||
@ -2767,52 +2767,52 @@ int dcb_accept_SSL(DCB* dcb)
|
||||
|
||||
switch (SSL_get_error(dcb->ssl, ssl_rval))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
MXS_DEBUG("SSL_accept done for %s@%s", user, remote);
|
||||
dcb->ssl_state = SSL_ESTABLISHED;
|
||||
dcb->ssl_read_want_write = false;
|
||||
return 1;
|
||||
case SSL_ERROR_NONE:
|
||||
MXS_DEBUG("SSL_accept done for %s@%s", user, remote);
|
||||
dcb->ssl_state = SSL_ESTABLISHED;
|
||||
dcb->ssl_read_want_write = false;
|
||||
return 1;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
MXS_DEBUG("SSL_accept ongoing want read for %s@%s", user, remote);
|
||||
return 0;
|
||||
case SSL_ERROR_WANT_READ:
|
||||
MXS_DEBUG("SSL_accept ongoing want read for %s@%s", user, remote);
|
||||
return 0;
|
||||
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
MXS_DEBUG("SSL_accept ongoing want write for %s@%s", user, remote);
|
||||
dcb->ssl_read_want_write = true;
|
||||
return 0;
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
MXS_DEBUG("SSL_accept ongoing want write for %s@%s", user, remote);
|
||||
dcb->ssl_read_want_write = true;
|
||||
return 0;
|
||||
|
||||
case SSL_ERROR_ZERO_RETURN:
|
||||
MXS_DEBUG("SSL error, shut down cleanly during SSL accept %s@%s", user, remote);
|
||||
dcb_log_errors_SSL(dcb, __func__, 0);
|
||||
case SSL_ERROR_ZERO_RETURN:
|
||||
MXS_DEBUG("SSL error, shut down cleanly during SSL accept %s@%s", user, remote);
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
}
|
||||
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);
|
||||
switch (SSL_get_error(dcb->ssl, ssl_rval))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
MXS_DEBUG("SSL_connect done for %s", dcb->remote);
|
||||
dcb->ssl_state = SSL_ESTABLISHED;
|
||||
dcb->ssl_read_want_write = false;
|
||||
return_code = 1;
|
||||
break;
|
||||
case SSL_ERROR_NONE:
|
||||
MXS_DEBUG("SSL_connect done for %s", dcb->remote);
|
||||
dcb->ssl_state = SSL_ESTABLISHED;
|
||||
dcb->ssl_read_want_write = false;
|
||||
return_code = 1;
|
||||
break;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
MXS_DEBUG("SSL_connect ongoing want read for %s", dcb->remote);
|
||||
case SSL_ERROR_WANT_READ:
|
||||
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;
|
||||
break;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
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;
|
||||
}
|
||||
@ -3014,7 +3014,7 @@ dcb_accept(DCB *listener)
|
||||
/** Allocate DCB specific authentication data */
|
||||
if (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.");
|
||||
dcb_close(client_dcb);
|
||||
|
@ -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);
|
||||
switch (rc)
|
||||
{
|
||||
case MXS_PCRE2_ERROR:
|
||||
MXS_FREE(dest);
|
||||
rval = false;
|
||||
break;
|
||||
case MXS_PCRE2_MATCH:
|
||||
MXS_FREE(cmd->argv[i]);
|
||||
cmd->argv[i] = dest;
|
||||
break;
|
||||
case MXS_PCRE2_NOMATCH:
|
||||
MXS_FREE(dest);
|
||||
break;
|
||||
case MXS_PCRE2_ERROR:
|
||||
MXS_FREE(dest);
|
||||
rval = false;
|
||||
break;
|
||||
case MXS_PCRE2_MATCH:
|
||||
MXS_FREE(cmd->argv[i]);
|
||||
cmd->argv[i] = dest;
|
||||
break;
|
||||
case MXS_PCRE2_NOMATCH:
|
||||
MXS_FREE(dest);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1327,186 +1327,186 @@ int main(int argc, char **argv)
|
||||
|
||||
switch (opt)
|
||||
{
|
||||
case 'd':
|
||||
/*< Debug mode, maxscale runs in this same process */
|
||||
daemon_mode = false;
|
||||
break;
|
||||
case 'd':
|
||||
/*< Debug mode, maxscale runs in this same process */
|
||||
daemon_mode = false;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
/*<
|
||||
* Simply copy the conf file argument. Expand or validate
|
||||
* it when MaxScale home directory is resolved.
|
||||
*/
|
||||
if (optarg[0] != '-')
|
||||
{
|
||||
cnf_file_arg = strndup(optarg, PATH_MAX);
|
||||
}
|
||||
if (cnf_file_arg == NULL)
|
||||
{
|
||||
const char* logerr =
|
||||
"Configuration file argument "
|
||||
"identifier \'-f\' was specified but "
|
||||
"the argument didn't specify\n a valid "
|
||||
"configuration file or the argument "
|
||||
"was missing.";
|
||||
print_log_n_stderr(true, true, logerr, logerr, 0);
|
||||
usage();
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'f':
|
||||
/*<
|
||||
* Simply copy the conf file argument. Expand or validate
|
||||
* it when MaxScale home directory is resolved.
|
||||
*/
|
||||
if (optarg[0] != '-')
|
||||
{
|
||||
cnf_file_arg = strndup(optarg, PATH_MAX);
|
||||
}
|
||||
if (cnf_file_arg == NULL)
|
||||
{
|
||||
const char* logerr =
|
||||
"Configuration file argument "
|
||||
"identifier \'-f\' was specified but "
|
||||
"the argument didn't specify\n a valid "
|
||||
"configuration file or the argument "
|
||||
"was missing.";
|
||||
print_log_n_stderr(true, true, logerr, logerr, 0);
|
||||
usage();
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
rc = EXIT_SUCCESS;
|
||||
printf("MaxScale %s\n", MAXSCALE_VERSION);
|
||||
goto return_main;
|
||||
case 'v':
|
||||
rc = EXIT_SUCCESS;
|
||||
printf("MaxScale %s\n", MAXSCALE_VERSION);
|
||||
goto return_main;
|
||||
|
||||
case 'V':
|
||||
rc = EXIT_SUCCESS;
|
||||
printf("MaxScale %s - %s\n", MAXSCALE_VERSION, maxscale_commit);
|
||||
goto return_main;
|
||||
case 'V':
|
||||
rc = EXIT_SUCCESS;
|
||||
printf("MaxScale %s - %s\n", MAXSCALE_VERSION, maxscale_commit);
|
||||
goto return_main;
|
||||
|
||||
case 'l':
|
||||
if (strncasecmp(optarg, "file", PATH_MAX) == 0)
|
||||
{
|
||||
*log_to_shm = false;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else if (strncasecmp(optarg, "shm", PATH_MAX) == 0)
|
||||
{
|
||||
*log_to_shm = true;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else if (strncasecmp(optarg, "stdout", PATH_MAX) == 0)
|
||||
{
|
||||
to_stdout = true;
|
||||
*log_to_shm = false;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* logerr =
|
||||
"Configuration file argument "
|
||||
"identifier \'-l\' was specified but "
|
||||
"the argument didn't specify\n a valid "
|
||||
"configuration file or the argument "
|
||||
"was missing.";
|
||||
print_log_n_stderr(true, true, logerr, logerr, 0);
|
||||
usage();
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_logdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_langdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'P':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_piddir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'D':
|
||||
snprintf(datadir, PATH_MAX, "%s", optarg);
|
||||
datadir[PATH_MAX] = '\0';
|
||||
set_datadir(MXS_STRDUP_A(optarg));
|
||||
datadir_defined = true;
|
||||
break;
|
||||
case 'C':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_configdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'B':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_libdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_cachedir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'l':
|
||||
if (strncasecmp(optarg, "file", PATH_MAX) == 0)
|
||||
{
|
||||
*log_to_shm = false;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else if (strncasecmp(optarg, "shm", PATH_MAX) == 0)
|
||||
{
|
||||
*log_to_shm = true;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else if (strncasecmp(optarg, "stdout", PATH_MAX) == 0)
|
||||
{
|
||||
to_stdout = true;
|
||||
*log_to_shm = false;
|
||||
log_to_shm_configured = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* logerr =
|
||||
"Configuration file argument "
|
||||
"identifier \'-l\' was specified but "
|
||||
"the argument didn't specify\n a valid "
|
||||
"configuration file or the argument "
|
||||
"was missing.";
|
||||
print_log_n_stderr(true, true, logerr, logerr, 0);
|
||||
usage();
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_logdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_langdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'P':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_piddir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'D':
|
||||
snprintf(datadir, PATH_MAX, "%s", optarg);
|
||||
datadir[PATH_MAX] = '\0';
|
||||
set_datadir(MXS_STRDUP_A(optarg));
|
||||
datadir_defined = true;
|
||||
break;
|
||||
case 'C':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_configdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'B':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_libdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_cachedir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_execdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'F':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_config_persistdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'E':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
set_execdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'F':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_config_persistdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_module_configdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, true))
|
||||
{
|
||||
set_module_configdir(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
succp = set_dirs(tmp_path);
|
||||
free(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
if (handle_path_arg(&tmp_path, optarg, NULL, true, false))
|
||||
{
|
||||
succp = set_dirs(tmp_path);
|
||||
free(tmp_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
case 'S':
|
||||
{
|
||||
char* tok = strstr(optarg, "=");
|
||||
if (tok)
|
||||
@ -1525,7 +1525,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
case 's':
|
||||
{
|
||||
char* tok = strstr(optarg, "=");
|
||||
if (tok)
|
||||
@ -1544,28 +1544,28 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'U':
|
||||
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();
|
||||
case 'U':
|
||||
if (set_user(optarg) != 0)
|
||||
{
|
||||
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)
|
||||
@ -2665,16 +2665,16 @@ static void log_exit_status()
|
||||
{
|
||||
switch (last_signal)
|
||||
{
|
||||
case SIGTERM:
|
||||
MXS_NOTICE("MaxScale received signal SIGTERM. Exiting.");
|
||||
break;
|
||||
case SIGTERM:
|
||||
MXS_NOTICE("MaxScale received signal SIGTERM. Exiting.");
|
||||
break;
|
||||
|
||||
case SIGINT:
|
||||
MXS_NOTICE("MaxScale received signal SIGINT. Exiting.");
|
||||
break;
|
||||
case SIGINT:
|
||||
MXS_NOTICE("MaxScale received signal SIGINT. Exiting.");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -235,7 +235,7 @@ listener_init_SSL(SSL_LISTENER *ssl_listener)
|
||||
|
||||
if (!ssl_listener->ssl_init_done)
|
||||
{
|
||||
switch(ssl_listener->ssl_method_type)
|
||||
switch (ssl_listener->ssl_method_type)
|
||||
{
|
||||
case SERVICE_TLS10:
|
||||
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();
|
||||
break;
|
||||
#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:
|
||||
ssl_listener->method = (SSL_METHOD*)SSLv23_method();
|
||||
break;
|
||||
@ -356,9 +356,10 @@ listener_init_SSL(SSL_LISTENER *ssl_listener)
|
||||
static RSA *
|
||||
tmp_rsa_callback(SSL *s, int is_export, int keylength)
|
||||
{
|
||||
RSA *rsa_tmp=NULL;
|
||||
RSA *rsa_tmp = NULL;
|
||||
|
||||
switch (keylength) {
|
||||
switch (keylength)
|
||||
{
|
||||
case 512:
|
||||
if (rsa_512)
|
||||
{
|
||||
@ -367,28 +368,28 @@ tmp_rsa_callback(SSL *s, int is_export, int keylength)
|
||||
else
|
||||
{
|
||||
/* 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 */
|
||||
}
|
||||
break;
|
||||
case 1024:
|
||||
if (rsa_1024)
|
||||
{
|
||||
rsa_tmp=rsa_1024;
|
||||
rsa_tmp = rsa_1024;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Generating a key on the fly is very costly, so use what is there */
|
||||
if (rsa_1024)
|
||||
{
|
||||
rsa_tmp=rsa_1024;
|
||||
rsa_tmp = rsa_1024;
|
||||
}
|
||||
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)
|
||||
{
|
||||
case SERVICE_TLS10:
|
||||
version = "TLSV10";
|
||||
break;
|
||||
case SERVICE_TLS10:
|
||||
version = "TLSV10";
|
||||
break;
|
||||
|
||||
#ifdef OPENSSL_1_0
|
||||
case SERVICE_TLS11:
|
||||
version = "TLSV11";
|
||||
break;
|
||||
case SERVICE_TLS11:
|
||||
version = "TLSV11";
|
||||
break;
|
||||
|
||||
case SERVICE_TLS12:
|
||||
version = "TLSV12";
|
||||
break;
|
||||
case SERVICE_TLS12:
|
||||
version = "TLSV12";
|
||||
break;
|
||||
#endif
|
||||
case SERVICE_SSL_TLS_MAX:
|
||||
version = "MAX";
|
||||
break;
|
||||
case SERVICE_SSL_TLS_MAX:
|
||||
version = "MAX";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (version)
|
||||
|
@ -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, "Currently free for reuse: %d\n", list_config->freecount);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -60,9 +60,9 @@ static LOADED_MODULE *registered = NULL;
|
||||
|
||||
static LOADED_MODULE *find_module(const char *module);
|
||||
static LOADED_MODULE* register_module(const char *module,
|
||||
const char *type,
|
||||
void *dlhandle,
|
||||
MXS_MODULE *mod_info);
|
||||
const char *type,
|
||||
void *dlhandle,
|
||||
MXS_MODULE *mod_info);
|
||||
static void unregister_module(const char *module);
|
||||
int module_create_feedback_report(GWBUF **buffer, LOADED_MODULE *modules, FEEDBACK_CONF *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
|
||||
*/
|
||||
static LOADED_MODULE* register_module(const char *module,
|
||||
const char *type,
|
||||
void *dlhandle,
|
||||
MXS_MODULE *mod_info)
|
||||
const char *type,
|
||||
void *dlhandle,
|
||||
MXS_MODULE *mod_info)
|
||||
{
|
||||
module = MXS_STRDUP(module);
|
||||
type = MXS_STRDUP(type);
|
||||
|
@ -919,18 +919,18 @@ static int logmanager_write_log(int priority,
|
||||
|
||||
switch (priority)
|
||||
{
|
||||
case LOG_EMERG:
|
||||
case LOG_ALERT:
|
||||
case LOG_CRIT:
|
||||
case LOG_ERR:
|
||||
case LOG_WARNING:
|
||||
case LOG_NOTICE:
|
||||
syslog(priority, "%s", message);
|
||||
break;
|
||||
case LOG_EMERG:
|
||||
case LOG_ALERT:
|
||||
case LOG_CRIT:
|
||||
case LOG_ERR:
|
||||
case LOG_WARNING:
|
||||
case LOG_NOTICE:
|
||||
syslog(priority, "%s", message);
|
||||
break;
|
||||
|
||||
default:
|
||||
// LOG_INFO and LOG_DEBUG messages are never written to syslog.
|
||||
break;
|
||||
default:
|
||||
// LOG_INFO and LOG_DEBUG messages are never written to syslog.
|
||||
break;
|
||||
}
|
||||
}
|
||||
/** remove double line feed */
|
||||
@ -1995,22 +1995,22 @@ static void logfile_done(logfile_t* lf)
|
||||
{
|
||||
switch (lf->lf_state)
|
||||
{
|
||||
case RUN:
|
||||
CHK_LOGFILE(lf);
|
||||
/** fallthrough */
|
||||
case INIT:
|
||||
/** Test if list is initialized before freeing it */
|
||||
if (lf->lf_blockbuf_list.mlist_versno != 0)
|
||||
{
|
||||
mlist_done(&lf->lf_blockbuf_list);
|
||||
}
|
||||
logfile_free_memory(lf);
|
||||
lf->lf_state = DONE;
|
||||
/** fallthrough */
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
case RUN:
|
||||
CHK_LOGFILE(lf);
|
||||
/** fallthrough */
|
||||
case INIT:
|
||||
/** Test if list is initialized before freeing it */
|
||||
if (lf->lf_blockbuf_list.mlist_versno != 0)
|
||||
{
|
||||
mlist_done(&lf->lf_blockbuf_list);
|
||||
}
|
||||
logfile_free_memory(lf);
|
||||
lf->lf_state = DONE;
|
||||
/** fallthrough */
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2122,30 +2122,30 @@ static void filewriter_done(filewriter_t* fw, bool write_footer)
|
||||
{
|
||||
switch (fw->fwr_state)
|
||||
{
|
||||
case RUN:
|
||||
CHK_FILEWRITER(fw);
|
||||
if (log_config.use_stdout)
|
||||
case RUN:
|
||||
CHK_FILEWRITER(fw);
|
||||
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);
|
||||
}
|
||||
case INIT:
|
||||
fw->fwr_logmes = NULL;
|
||||
fw->fwr_clientmes = NULL;
|
||||
fw->fwr_state = DONE;
|
||||
break;
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
skygw_file_close(fw->fwr_file);
|
||||
}
|
||||
case INIT:
|
||||
fw->fwr_logmes = NULL;
|
||||
fw->fwr_clientmes = NULL;
|
||||
fw->fwr_state = DONE;
|
||||
break;
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2397,15 +2397,15 @@ static void fnames_conf_done(fnames_conf_t* fn)
|
||||
{
|
||||
switch (fn->fn_state)
|
||||
{
|
||||
case RUN:
|
||||
CHK_FNAMES_CONF(fn);
|
||||
case INIT:
|
||||
fnames_conf_free_memory(fn);
|
||||
fn->fn_state = DONE;
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
case RUN:
|
||||
CHK_FNAMES_CONF(fn);
|
||||
case INIT:
|
||||
fnames_conf_free_memory(fn);
|
||||
fn->fn_state = DONE;
|
||||
case DONE:
|
||||
case UNINIT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2624,25 +2624,25 @@ static const char* priority_name(int priority)
|
||||
{
|
||||
switch (priority)
|
||||
{
|
||||
case LOG_EMERG:
|
||||
return "emercency";
|
||||
case LOG_ALERT:
|
||||
return "alert";
|
||||
case LOG_CRIT:
|
||||
return "critical";
|
||||
case LOG_ERR:
|
||||
return "error";
|
||||
case LOG_WARNING:
|
||||
return "warning";
|
||||
case LOG_NOTICE:
|
||||
return "notice";
|
||||
case LOG_INFO:
|
||||
return "informational";
|
||||
case LOG_DEBUG:
|
||||
return "debug";
|
||||
default:
|
||||
assert(!true);
|
||||
return "unknown";
|
||||
case LOG_EMERG:
|
||||
return "emercency";
|
||||
case LOG_ALERT:
|
||||
return "alert";
|
||||
case LOG_CRIT:
|
||||
return "critical";
|
||||
case LOG_ERR:
|
||||
return "error";
|
||||
case LOG_WARNING:
|
||||
return "warning";
|
||||
case LOG_NOTICE:
|
||||
return "notice";
|
||||
case LOG_INFO:
|
||||
return "informational";
|
||||
case LOG_DEBUG:
|
||||
return "debug";
|
||||
default:
|
||||
assert(!true);
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
@ -2706,51 +2706,51 @@ static log_prefix_t priority_to_prefix(int priority)
|
||||
|
||||
switch (priority)
|
||||
{
|
||||
case LOG_EMERG:
|
||||
prefix.text = PREFIX_EMERG;
|
||||
prefix.len = sizeof(PREFIX_EMERG);
|
||||
break;
|
||||
case LOG_EMERG:
|
||||
prefix.text = PREFIX_EMERG;
|
||||
prefix.len = sizeof(PREFIX_EMERG);
|
||||
break;
|
||||
|
||||
case LOG_ALERT:
|
||||
prefix.text = PREFIX_ALERT;
|
||||
prefix.len = sizeof(PREFIX_ALERT);
|
||||
break;
|
||||
case LOG_ALERT:
|
||||
prefix.text = PREFIX_ALERT;
|
||||
prefix.len = sizeof(PREFIX_ALERT);
|
||||
break;
|
||||
|
||||
case LOG_CRIT:
|
||||
prefix.text = PREFIX_CRIT;
|
||||
prefix.len = sizeof(PREFIX_CRIT);
|
||||
break;
|
||||
case LOG_CRIT:
|
||||
prefix.text = PREFIX_CRIT;
|
||||
prefix.len = sizeof(PREFIX_CRIT);
|
||||
break;
|
||||
|
||||
case LOG_ERR:
|
||||
prefix.text = PREFIX_ERROR;
|
||||
prefix.len = sizeof(PREFIX_ERROR);
|
||||
break;
|
||||
case LOG_ERR:
|
||||
prefix.text = PREFIX_ERROR;
|
||||
prefix.len = sizeof(PREFIX_ERROR);
|
||||
break;
|
||||
|
||||
case LOG_WARNING:
|
||||
prefix.text = PREFIX_WARNING;
|
||||
prefix.len = sizeof(PREFIX_WARNING);
|
||||
break;
|
||||
case LOG_WARNING:
|
||||
prefix.text = PREFIX_WARNING;
|
||||
prefix.len = sizeof(PREFIX_WARNING);
|
||||
break;
|
||||
|
||||
case LOG_NOTICE:
|
||||
prefix.text = PREFIX_NOTICE;
|
||||
prefix.len = sizeof(PREFIX_NOTICE);
|
||||
break;
|
||||
case LOG_NOTICE:
|
||||
prefix.text = PREFIX_NOTICE;
|
||||
prefix.len = sizeof(PREFIX_NOTICE);
|
||||
break;
|
||||
|
||||
case LOG_INFO:
|
||||
prefix.text = PREFIX_INFO;
|
||||
prefix.len = sizeof(PREFIX_INFO);
|
||||
break;
|
||||
case LOG_INFO:
|
||||
prefix.text = PREFIX_INFO;
|
||||
prefix.len = sizeof(PREFIX_INFO);
|
||||
break;
|
||||
|
||||
case LOG_DEBUG:
|
||||
prefix.text = PREFIX_DEBUG;
|
||||
prefix.len = sizeof(PREFIX_DEBUG);
|
||||
break;
|
||||
case LOG_DEBUG:
|
||||
prefix.text = PREFIX_DEBUG;
|
||||
prefix.len = sizeof(PREFIX_DEBUG);
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(!true);
|
||||
prefix.text = PREFIX_ERROR;
|
||||
prefix.len = sizeof(PREFIX_ERROR);
|
||||
break;
|
||||
default:
|
||||
assert(!true);
|
||||
prefix.text = PREFIX_ERROR;
|
||||
prefix.len = sizeof(PREFIX_ERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
--prefix.len; // Remove trailing NULL.
|
||||
@ -2764,19 +2764,19 @@ static enum log_flush priority_to_flush(int priority)
|
||||
|
||||
switch (priority)
|
||||
{
|
||||
case LOG_EMERG:
|
||||
case LOG_ALERT:
|
||||
case LOG_CRIT:
|
||||
case LOG_ERR:
|
||||
return LOG_FLUSH_YES;
|
||||
case LOG_EMERG:
|
||||
case LOG_ALERT:
|
||||
case LOG_CRIT:
|
||||
case LOG_ERR:
|
||||
return LOG_FLUSH_YES;
|
||||
|
||||
default:
|
||||
assert(!true);
|
||||
case LOG_WARNING:
|
||||
case LOG_NOTICE:
|
||||
case LOG_INFO:
|
||||
case LOG_DEBUG:
|
||||
return LOG_FLUSH_NO;
|
||||
default:
|
||||
assert(!true);
|
||||
case LOG_WARNING:
|
||||
case LOG_NOTICE:
|
||||
case LOG_INFO:
|
||||
case LOG_DEBUG:
|
||||
return LOG_FLUSH_NO;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 ";
|
||||
/** 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 ";
|
||||
/** 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
|
||||
{
|
||||
|
@ -220,144 +220,144 @@ static bool process_argument(const MODULECMD *cmd, modulecmd_arg_type_t *type, c
|
||||
{
|
||||
switch (MODULECMD_GET_TYPE(type))
|
||||
{
|
||||
case MODULECMD_ARG_NONE:
|
||||
arg->type.type = MODULECMD_ARG_NONE;
|
||||
rval = true;
|
||||
break;
|
||||
case MODULECMD_ARG_NONE:
|
||||
arg->type.type = MODULECMD_ARG_NONE;
|
||||
rval = true;
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_STRING:
|
||||
if ((arg->value.string = MXS_STRDUP((char*)value)))
|
||||
case MODULECMD_ARG_STRING:
|
||||
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;
|
||||
}
|
||||
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);
|
||||
if (truthval != -1)
|
||||
{
|
||||
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";
|
||||
}
|
||||
arg->type.type = MODULECMD_ARG_SERVICE;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "service not found";
|
||||
*err = "router and domain names don't match";
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "service not found";
|
||||
}
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SERVER:
|
||||
if ((arg->value.server = server_find_by_unique_name((char*)value)))
|
||||
case MODULECMD_ARG_SERVER:
|
||||
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) ||
|
||||
strcmp(cmd->domain, arg->value.server->protocol) == 0)
|
||||
{
|
||||
arg->type.type = MODULECMD_ARG_SERVER;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "server and domain names don't match";
|
||||
}
|
||||
arg->type.type = MODULECMD_ARG_SERVER;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "server not found";
|
||||
*err = "server and domain names don't match";
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "server not found";
|
||||
}
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SESSION:
|
||||
if ((arg->value.session = session_get_by_id(atoi(value))))
|
||||
case MODULECMD_ARG_SESSION:
|
||||
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;
|
||||
}
|
||||
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";
|
||||
}
|
||||
arg->type.type = MODULECMD_ARG_MONITOR;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "monitor not found";
|
||||
*err = "monitor and domain names don't match";
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "monitor not found";
|
||||
}
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_FILTER:
|
||||
if ((arg->value.filter = filter_def_find((char*)value)))
|
||||
case MODULECMD_ARG_FILTER:
|
||||
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) ||
|
||||
strcmp(cmd->domain, arg->value.filter->module) == 0)
|
||||
{
|
||||
arg->type.type = MODULECMD_ARG_FILTER;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "filter and domain names don't match";
|
||||
}
|
||||
arg->type.type = MODULECMD_ARG_FILTER;
|
||||
rval = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "filter not found";
|
||||
*err = "filter and domain names don't match";
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = "filter not found";
|
||||
}
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_OUTPUT:
|
||||
arg->type.type = MODULECMD_ARG_OUTPUT;
|
||||
arg->value.dcb = (DCB*)value;
|
||||
rval = true;
|
||||
break;
|
||||
case MODULECMD_ARG_OUTPUT:
|
||||
arg->type.type = MODULECMD_ARG_OUTPUT;
|
||||
arg->value.dcb = (DCB*)value;
|
||||
rval = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
ss_dassert(false);
|
||||
MXS_ERROR("Undefined argument type: %0lx", type->type);
|
||||
*err = "internal error";
|
||||
break;
|
||||
default:
|
||||
ss_dassert(false);
|
||||
MXS_ERROR("Undefined argument type: %0lx", type->type);
|
||||
*err = "internal error";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -392,16 +392,16 @@ static void free_argument(struct arg_node *arg)
|
||||
{
|
||||
switch (arg->type.type)
|
||||
{
|
||||
case MODULECMD_ARG_STRING:
|
||||
MXS_FREE(arg->value.string);
|
||||
break;
|
||||
case MODULECMD_ARG_STRING:
|
||||
MXS_FREE(arg->value.string);
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SESSION:
|
||||
session_put_ref(arg->value.session);
|
||||
break;
|
||||
case MODULECMD_ARG_SESSION:
|
||||
session_put_ref(arg->value.session);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -568,7 +568,7 @@ const char* modulecmd_get_error()
|
||||
}
|
||||
|
||||
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 stop = false;
|
||||
@ -578,16 +578,16 @@ bool modulecmd_foreach(const char *domain_re, const char *ident_re,
|
||||
{
|
||||
int err;
|
||||
mxs_pcre2_result_t d_res = domain_re ?
|
||||
mxs_pcre2_simple_match(domain_re, domain->domain, 0, &err) :
|
||||
MXS_PCRE2_MATCH;
|
||||
mxs_pcre2_simple_match(domain_re, domain->domain, 0, &err) :
|
||||
MXS_PCRE2_MATCH;
|
||||
|
||||
if (d_res == MXS_PCRE2_MATCH)
|
||||
{
|
||||
for (MODULECMD *cmd = domain->commands; cmd && rval; cmd = cmd->next)
|
||||
{
|
||||
mxs_pcre2_result_t i_res = ident_re ?
|
||||
mxs_pcre2_simple_match(ident_re, cmd->identifier, 0, &err) :
|
||||
MXS_PCRE2_MATCH;
|
||||
mxs_pcre2_simple_match(ident_re, cmd->identifier, 0, &err) :
|
||||
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))
|
||||
{
|
||||
case MODULECMD_ARG_NONE:
|
||||
strtype = "NONE";
|
||||
break;
|
||||
case MODULECMD_ARG_NONE:
|
||||
strtype = "NONE";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_STRING:
|
||||
strtype = "STRING";
|
||||
break;
|
||||
case MODULECMD_ARG_STRING:
|
||||
strtype = "STRING";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_BOOLEAN:
|
||||
strtype = "BOOLEAN";
|
||||
break;
|
||||
case MODULECMD_ARG_BOOLEAN:
|
||||
strtype = "BOOLEAN";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SERVICE:
|
||||
strtype = "SERVICE";
|
||||
break;
|
||||
case MODULECMD_ARG_SERVICE:
|
||||
strtype = "SERVICE";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SERVER:
|
||||
strtype = "SERVER";
|
||||
break;
|
||||
case MODULECMD_ARG_SERVER:
|
||||
strtype = "SERVER";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_SESSION:
|
||||
strtype = "SESSION";
|
||||
break;
|
||||
case MODULECMD_ARG_SESSION:
|
||||
strtype = "SESSION";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_DCB:
|
||||
strtype = "DCB";
|
||||
break;
|
||||
case MODULECMD_ARG_DCB:
|
||||
strtype = "DCB";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_MONITOR:
|
||||
strtype = "MONITOR";
|
||||
break;
|
||||
case MODULECMD_ARG_MONITOR:
|
||||
strtype = "MONITOR";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_FILTER:
|
||||
strtype = "FILTER";
|
||||
break;
|
||||
case MODULECMD_ARG_FILTER:
|
||||
strtype = "FILTER";
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_OUTPUT:
|
||||
strtype = "OUTPUT";
|
||||
break;
|
||||
case MODULECMD_ARG_OUTPUT:
|
||||
strtype = "OUTPUT";
|
||||
break;
|
||||
|
||||
default:
|
||||
ss_dassert(false);
|
||||
MXS_ERROR("Unknown type");
|
||||
break;
|
||||
default:
|
||||
ss_dassert(false);
|
||||
MXS_ERROR("Unknown type");
|
||||
break;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return arg->argc > idx &&
|
||||
MODULECMD_GET_TYPE(&arg->argv[idx].type) != MODULECMD_ARG_NONE;
|
||||
MODULECMD_GET_TYPE(&arg->argv[idx].type) != MODULECMD_ARG_NONE;
|
||||
}
|
||||
|
@ -855,56 +855,56 @@ char* strnchr_esc_mysql(char* ptr, char c, int len)
|
||||
{
|
||||
switch (*p)
|
||||
{
|
||||
case '\\':
|
||||
escaped = true;
|
||||
break;
|
||||
case '\\':
|
||||
escaped = true;
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
case '"':
|
||||
if (!quoted)
|
||||
{
|
||||
quoted = true;
|
||||
qc = *p;
|
||||
}
|
||||
else if (*p == qc)
|
||||
{
|
||||
quoted = false;
|
||||
}
|
||||
break;
|
||||
case '\'':
|
||||
case '"':
|
||||
if (!quoted)
|
||||
{
|
||||
quoted = true;
|
||||
qc = *p;
|
||||
}
|
||||
else if (*p == qc)
|
||||
{
|
||||
quoted = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case '/':
|
||||
if (p + 1 < end && *(p + 1) == '*')
|
||||
{
|
||||
comment = true;
|
||||
p += 1;
|
||||
}
|
||||
break;
|
||||
case '/':
|
||||
if (p + 1 < end && *(p + 1) == '*')
|
||||
{
|
||||
comment = true;
|
||||
p += 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '*':
|
||||
if (comment && p + 1 < end && *(p + 1) == '/')
|
||||
{
|
||||
comment = false;
|
||||
p += 1;
|
||||
}
|
||||
break;
|
||||
case '*':
|
||||
if (comment && p + 1 < end && *(p + 1) == '/')
|
||||
{
|
||||
comment = false;
|
||||
p += 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '`':
|
||||
backtick = !backtick;
|
||||
break;
|
||||
case '`':
|
||||
backtick = !backtick;
|
||||
break;
|
||||
|
||||
case '#':
|
||||
case '#':
|
||||
return NULL;
|
||||
|
||||
case '-':
|
||||
if (p + 2 < end && *(p + 1) == '-' &&
|
||||
isspace(*(p + 2)))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case '-':
|
||||
if (p + 2 < end && *(p + 1) == '-' &&
|
||||
isspace(*(p + 2)))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (*p == c && !escaped && !quoted && !comment && !backtick)
|
||||
@ -940,23 +940,23 @@ bool is_mysql_statement_end(const char* start, int len)
|
||||
{
|
||||
switch (*ptr)
|
||||
{
|
||||
case '-':
|
||||
if (ptr < start + len - 2 && *(ptr + 1) == '-' && isspace(*(ptr + 2)))
|
||||
{
|
||||
rval = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case '#':
|
||||
case '-':
|
||||
if (ptr < start + len - 2 && *(ptr + 1) == '-' && isspace(*(ptr + 2)))
|
||||
{
|
||||
rval = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case '/':
|
||||
if (ptr < start + len - 1 && *(ptr + 1) == '*')
|
||||
{
|
||||
rval = true;
|
||||
}
|
||||
break;
|
||||
case '#':
|
||||
rval = true;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
if (ptr < start + len - 1 && *(ptr + 1) == '*')
|
||||
{
|
||||
rval = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -424,21 +424,21 @@ monitorShow(DCB *dcb, MONITOR *monitor)
|
||||
|
||||
switch (monitor->state)
|
||||
{
|
||||
case MONITOR_STATE_RUNNING:
|
||||
state = "Running";
|
||||
break;
|
||||
case MONITOR_STATE_STOPPING:
|
||||
state = "Stopping";
|
||||
break;
|
||||
case MONITOR_STATE_STOPPED:
|
||||
state = "Stopped";
|
||||
break;
|
||||
case MONITOR_STATE_ALLOC:
|
||||
state = "Allocated";
|
||||
break;
|
||||
default:
|
||||
state = "Unknown";
|
||||
break;
|
||||
case MONITOR_STATE_RUNNING:
|
||||
state = "Running";
|
||||
break;
|
||||
case MONITOR_STATE_STOPPING:
|
||||
state = "Stopping";
|
||||
break;
|
||||
case MONITOR_STATE_STOPPED:
|
||||
state = "Stopped";
|
||||
break;
|
||||
case MONITOR_STATE_ALLOC:
|
||||
state = "Allocated";
|
||||
break;
|
||||
default:
|
||||
state = "Unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
dcb_printf(dcb, "Monitor: %p\n", monitor);
|
||||
@ -557,22 +557,22 @@ monitorSetNetworkTimeout(MONITOR *mon, int type, int value)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MONITOR_CONNECT_TIMEOUT:
|
||||
mon->connect_timeout = value;
|
||||
break;
|
||||
case MONITOR_CONNECT_TIMEOUT:
|
||||
mon->connect_timeout = value;
|
||||
break;
|
||||
|
||||
case MONITOR_READ_TIMEOUT:
|
||||
mon->read_timeout = value;
|
||||
break;
|
||||
case MONITOR_READ_TIMEOUT:
|
||||
mon->read_timeout = value;
|
||||
break;
|
||||
|
||||
case MONITOR_WRITE_TIMEOUT:
|
||||
mon->write_timeout = value;
|
||||
break;
|
||||
case MONITOR_WRITE_TIMEOUT:
|
||||
mon->write_timeout = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
MXS_ERROR("Monitor setNetworkTimeout received an unsupported action type %i", type);
|
||||
rval = false;
|
||||
break;
|
||||
default:
|
||||
MXS_ERROR("Monitor setNetworkTimeout received an unsupported action type %i", type);
|
||||
rval = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -678,30 +678,30 @@ bool check_monitor_permissions(MONITOR* monitor, const char* query)
|
||||
mondb->server->port, mysql_error(mondb->con));
|
||||
switch (mysql_errno(mondb->con))
|
||||
{
|
||||
case ER_ACCESS_DENIED_ERROR:
|
||||
case ER_DBACCESS_DENIED_ERROR:
|
||||
case ER_ACCESS_DENIED_NO_PASSWORD_ERROR:
|
||||
break;
|
||||
default:
|
||||
rval = true;
|
||||
break;
|
||||
case ER_ACCESS_DENIED_ERROR:
|
||||
case ER_DBACCESS_DENIED_ERROR:
|
||||
case ER_ACCESS_DENIED_NO_PASSWORD_ERROR:
|
||||
break;
|
||||
default:
|
||||
rval = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (mysql_query(mondb->con, query) != 0)
|
||||
{
|
||||
switch (mysql_errno(mondb->con))
|
||||
{
|
||||
case ER_TABLEACCESS_DENIED_ERROR:
|
||||
case ER_COLUMNACCESS_DENIED_ERROR:
|
||||
case ER_SPECIFIC_ACCESS_DENIED_ERROR:
|
||||
case ER_PROCACCESS_DENIED_ERROR:
|
||||
case ER_KILL_DENIED_ERROR:
|
||||
rval = false;
|
||||
break;
|
||||
case ER_TABLEACCESS_DENIED_ERROR:
|
||||
case ER_COLUMNACCESS_DENIED_ERROR:
|
||||
case ER_SPECIFIC_ACCESS_DENIED_ERROR:
|
||||
case ER_PROCACCESS_DENIED_ERROR:
|
||||
case ER_KILL_DENIED_ERROR:
|
||||
rval = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
rval = true;
|
||||
break;
|
||||
default:
|
||||
rval = true;
|
||||
break;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
case UP_EVENT:
|
||||
return (present & SERVER_MASTER) ? MASTER_UP_EVENT :
|
||||
(present & SERVER_SLAVE) ? SLAVE_UP_EVENT :
|
||||
(present & SERVER_JOINED) ? SYNCED_UP_EVENT :
|
||||
(present & SERVER_NDB) ? NDB_UP_EVENT :
|
||||
SERVER_UP_EVENT;
|
||||
case DOWN_EVENT:
|
||||
return (prev & SERVER_MASTER) ? MASTER_DOWN_EVENT :
|
||||
(prev & SERVER_SLAVE) ? SLAVE_DOWN_EVENT :
|
||||
(prev & SERVER_JOINED) ? SYNCED_DOWN_EVENT :
|
||||
(prev & SERVER_NDB) ? NDB_DOWN_EVENT :
|
||||
SERVER_DOWN_EVENT;
|
||||
case LOSS_EVENT:
|
||||
return (prev & SERVER_MASTER) ? LOST_MASTER_EVENT :
|
||||
(prev & SERVER_SLAVE) ? LOST_SLAVE_EVENT :
|
||||
(prev & SERVER_JOINED) ? LOST_SYNCED_EVENT :
|
||||
LOST_NDB_EVENT;
|
||||
case NEW_EVENT:
|
||||
return (present & SERVER_MASTER) ? NEW_MASTER_EVENT :
|
||||
(present & SERVER_SLAVE) ? NEW_SLAVE_EVENT :
|
||||
(present & SERVER_JOINED) ? NEW_SYNCED_EVENT :
|
||||
NEW_NDB_EVENT;
|
||||
default:
|
||||
return UNDEFINED_EVENT;
|
||||
case UP_EVENT:
|
||||
return (present & SERVER_MASTER) ? MASTER_UP_EVENT :
|
||||
(present & SERVER_SLAVE) ? SLAVE_UP_EVENT :
|
||||
(present & SERVER_JOINED) ? SYNCED_UP_EVENT :
|
||||
(present & SERVER_NDB) ? NDB_UP_EVENT :
|
||||
SERVER_UP_EVENT;
|
||||
case DOWN_EVENT:
|
||||
return (prev & SERVER_MASTER) ? MASTER_DOWN_EVENT :
|
||||
(prev & SERVER_SLAVE) ? SLAVE_DOWN_EVENT :
|
||||
(prev & SERVER_JOINED) ? SYNCED_DOWN_EVENT :
|
||||
(prev & SERVER_NDB) ? NDB_DOWN_EVENT :
|
||||
SERVER_DOWN_EVENT;
|
||||
case LOSS_EVENT:
|
||||
return (prev & SERVER_MASTER) ? LOST_MASTER_EVENT :
|
||||
(prev & SERVER_SLAVE) ? LOST_SLAVE_EVENT :
|
||||
(prev & SERVER_JOINED) ? LOST_SYNCED_EVENT :
|
||||
LOST_NDB_EVENT;
|
||||
case NEW_EVENT:
|
||||
return (present & SERVER_MASTER) ? NEW_MASTER_EVENT :
|
||||
(present & SERVER_SLAVE) ? NEW_SLAVE_EVENT :
|
||||
(present & SERVER_JOINED) ? NEW_SYNCED_EVENT :
|
||||
NEW_NDB_EVENT;
|
||||
default:
|
||||
return UNDEFINED_EVENT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,68 +36,68 @@ const char* column_type_to_string(uint8_t type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_DECIMAL:
|
||||
return "DECIMAL";
|
||||
case TABLE_COL_TYPE_TINY:
|
||||
return "TINY";
|
||||
case TABLE_COL_TYPE_SHORT:
|
||||
return "SHORT";
|
||||
case TABLE_COL_TYPE_LONG:
|
||||
return "LONG";
|
||||
case TABLE_COL_TYPE_FLOAT:
|
||||
return "FLOAT";
|
||||
case TABLE_COL_TYPE_DOUBLE:
|
||||
return "DOUBLE";
|
||||
case TABLE_COL_TYPE_NULL:
|
||||
return "NULL";
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
return "TIMESTAMP";
|
||||
case TABLE_COL_TYPE_LONGLONG:
|
||||
return "LONGLONG";
|
||||
case TABLE_COL_TYPE_INT24:
|
||||
return "INT24";
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
return "DATE";
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
return "TIME";
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
return "DATETIME";
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
return "YEAR";
|
||||
case TABLE_COL_TYPE_NEWDATE:
|
||||
return "NEWDATE";
|
||||
case TABLE_COL_TYPE_VARCHAR:
|
||||
return "VARCHAR";
|
||||
case TABLE_COL_TYPE_BIT:
|
||||
return "BIT";
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return "TIMESTAMP2";
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
return "DATETIME2";
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
return "TIME2";
|
||||
case TABLE_COL_TYPE_NEWDECIMAL:
|
||||
return "NEWDECIMAL";
|
||||
case TABLE_COL_TYPE_ENUM:
|
||||
return "ENUM";
|
||||
case TABLE_COL_TYPE_SET:
|
||||
return "SET";
|
||||
case TABLE_COL_TYPE_TINY_BLOB:
|
||||
return "TINY_BLOB";
|
||||
case TABLE_COL_TYPE_MEDIUM_BLOB:
|
||||
return "MEDIUM_BLOB";
|
||||
case TABLE_COL_TYPE_LONG_BLOB:
|
||||
return "LONG_BLOB";
|
||||
case TABLE_COL_TYPE_BLOB:
|
||||
return "BLOB";
|
||||
case TABLE_COL_TYPE_VAR_STRING:
|
||||
return "VAR_STRING";
|
||||
case TABLE_COL_TYPE_STRING:
|
||||
return "STRING";
|
||||
case TABLE_COL_TYPE_GEOMETRY:
|
||||
return "GEOMETRY";
|
||||
default:
|
||||
break;
|
||||
case TABLE_COL_TYPE_DECIMAL:
|
||||
return "DECIMAL";
|
||||
case TABLE_COL_TYPE_TINY:
|
||||
return "TINY";
|
||||
case TABLE_COL_TYPE_SHORT:
|
||||
return "SHORT";
|
||||
case TABLE_COL_TYPE_LONG:
|
||||
return "LONG";
|
||||
case TABLE_COL_TYPE_FLOAT:
|
||||
return "FLOAT";
|
||||
case TABLE_COL_TYPE_DOUBLE:
|
||||
return "DOUBLE";
|
||||
case TABLE_COL_TYPE_NULL:
|
||||
return "NULL";
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
return "TIMESTAMP";
|
||||
case TABLE_COL_TYPE_LONGLONG:
|
||||
return "LONGLONG";
|
||||
case TABLE_COL_TYPE_INT24:
|
||||
return "INT24";
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
return "DATE";
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
return "TIME";
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
return "DATETIME";
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
return "YEAR";
|
||||
case TABLE_COL_TYPE_NEWDATE:
|
||||
return "NEWDATE";
|
||||
case TABLE_COL_TYPE_VARCHAR:
|
||||
return "VARCHAR";
|
||||
case TABLE_COL_TYPE_BIT:
|
||||
return "BIT";
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return "TIMESTAMP2";
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
return "DATETIME2";
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
return "TIME2";
|
||||
case TABLE_COL_TYPE_NEWDECIMAL:
|
||||
return "NEWDECIMAL";
|
||||
case TABLE_COL_TYPE_ENUM:
|
||||
return "ENUM";
|
||||
case TABLE_COL_TYPE_SET:
|
||||
return "SET";
|
||||
case TABLE_COL_TYPE_TINY_BLOB:
|
||||
return "TINY_BLOB";
|
||||
case TABLE_COL_TYPE_MEDIUM_BLOB:
|
||||
return "MEDIUM_BLOB";
|
||||
case TABLE_COL_TYPE_LONG_BLOB:
|
||||
return "LONG_BLOB";
|
||||
case TABLE_COL_TYPE_BLOB:
|
||||
return "BLOB";
|
||||
case TABLE_COL_TYPE_VAR_STRING:
|
||||
return "VAR_STRING";
|
||||
case TABLE_COL_TYPE_STRING:
|
||||
return "STRING";
|
||||
case TABLE_COL_TYPE_GEOMETRY:
|
||||
return "GEOMETRY";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "UNKNOWN";
|
||||
}
|
||||
@ -106,11 +106,11 @@ bool column_is_blob(uint8_t type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_TINY_BLOB:
|
||||
case TABLE_COL_TYPE_MEDIUM_BLOB:
|
||||
case TABLE_COL_TYPE_LONG_BLOB:
|
||||
case TABLE_COL_TYPE_BLOB:
|
||||
return true;
|
||||
case TABLE_COL_TYPE_TINY_BLOB:
|
||||
case TABLE_COL_TYPE_MEDIUM_BLOB:
|
||||
case TABLE_COL_TYPE_LONG_BLOB:
|
||||
case TABLE_COL_TYPE_BLOB:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -126,15 +126,15 @@ bool column_is_variable_string(uint8_t type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_DECIMAL:
|
||||
case TABLE_COL_TYPE_VARCHAR:
|
||||
case TABLE_COL_TYPE_BIT:
|
||||
case TABLE_COL_TYPE_NEWDECIMAL:
|
||||
case TABLE_COL_TYPE_VAR_STRING:
|
||||
case TABLE_COL_TYPE_GEOMETRY:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
case TABLE_COL_TYPE_DECIMAL:
|
||||
case TABLE_COL_TYPE_VARCHAR:
|
||||
case TABLE_COL_TYPE_BIT:
|
||||
case TABLE_COL_TYPE_NEWDECIMAL:
|
||||
case TABLE_COL_TYPE_VAR_STRING:
|
||||
case TABLE_COL_TYPE_GEOMETRY:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -157,15 +157,15 @@ bool column_is_temporal(uint8_t type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return true;
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return true;
|
||||
}
|
||||
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
|
||||
*/
|
||||
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])
|
||||
{
|
||||
@ -399,29 +399,29 @@ static size_t temporal_field_size(uint8_t type, uint8_t decimals)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
return 1;
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
return 1;
|
||||
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
return 3;
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
return 3;
|
||||
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
return 3 + ((decimals + 1) / 2);
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
return 3 + ((decimals + 1) / 2);
|
||||
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
return 4;
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
return 4;
|
||||
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return 4 + ((decimals + 1) / 2);
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
return 4 + ((decimals + 1) / 2);
|
||||
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
return 5 + ((decimals + 1) / 2);
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
return 5 + ((decimals + 1) / 2);
|
||||
|
||||
default:
|
||||
MXS_ERROR("Unknown field type: %x %s", type, column_type_to_string(type));
|
||||
break;
|
||||
default:
|
||||
MXS_ERROR("Unknown field type: %x %s", type, column_type_to_string(type));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -440,31 +440,31 @@ size_t unpack_temporal_value(uint8_t type, uint8_t *ptr, uint8_t *metadata, stru
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
unpack_year(ptr, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
unpack_year(ptr, tm);
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
// This is not used with MariaDB RBR
|
||||
//unpack_datetime(ptr, *metadata, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
// This is not used with MariaDB RBR
|
||||
//unpack_datetime(ptr, *metadata, tm);
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
unpack_datetime2(ptr, *metadata, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
unpack_datetime2(ptr, *metadata, tm);
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
unpack_time(ptr, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
unpack_time(ptr, tm);
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
unpack_date(ptr, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
unpack_date(ptr, tm);
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
unpack_timestamp(ptr, *metadata, tm);
|
||||
break;
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
unpack_timestamp(ptr, *metadata, tm);
|
||||
break;
|
||||
}
|
||||
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)
|
||||
{
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
format = "%Y-%m-%d %H:%M:%S";
|
||||
break;
|
||||
case TABLE_COL_TYPE_DATETIME:
|
||||
case TABLE_COL_TYPE_DATETIME2:
|
||||
case TABLE_COL_TYPE_TIMESTAMP:
|
||||
case TABLE_COL_TYPE_TIMESTAMP2:
|
||||
format = "%Y-%m-%d %H:%M:%S";
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
format = "%H:%M:%S";
|
||||
break;
|
||||
case TABLE_COL_TYPE_TIME:
|
||||
case TABLE_COL_TYPE_TIME2:
|
||||
format = "%H:%M:%S";
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
format = "%Y-%m-%d";
|
||||
break;
|
||||
case TABLE_COL_TYPE_DATE:
|
||||
format = "%Y-%m-%d";
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
format = "%Y";
|
||||
break;
|
||||
case TABLE_COL_TYPE_YEAR:
|
||||
format = "%Y";
|
||||
break;
|
||||
|
||||
default:
|
||||
MXS_ERROR("Unexpected temporal type: %x %s", type, column_type_to_string(type));
|
||||
ss_dassert(false);
|
||||
break;
|
||||
default:
|
||||
MXS_ERROR("Unexpected temporal type: %x %s", type, column_type_to_string(type));
|
||||
ss_dassert(false);
|
||||
break;
|
||||
}
|
||||
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;
|
||||
switch (type)
|
||||
{
|
||||
case TABLE_COL_TYPE_LONG:
|
||||
case TABLE_COL_TYPE_FLOAT:
|
||||
size = 4;
|
||||
break;
|
||||
case TABLE_COL_TYPE_LONG:
|
||||
case TABLE_COL_TYPE_FLOAT:
|
||||
size = 4;
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_INT24:
|
||||
size = 3;
|
||||
break;
|
||||
case TABLE_COL_TYPE_INT24:
|
||||
size = 3;
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_LONGLONG:
|
||||
case TABLE_COL_TYPE_DOUBLE:
|
||||
size = 8;
|
||||
break;
|
||||
case TABLE_COL_TYPE_LONGLONG:
|
||||
case TABLE_COL_TYPE_DOUBLE:
|
||||
size = 8;
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_SHORT:
|
||||
size = 2;
|
||||
break;
|
||||
case TABLE_COL_TYPE_SHORT:
|
||||
size = 2;
|
||||
break;
|
||||
|
||||
case TABLE_COL_TYPE_TINY:
|
||||
size = 1;
|
||||
break;
|
||||
case TABLE_COL_TYPE_TINY:
|
||||
size = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
MXS_ERROR("Bad column type: %x %s", type, column_type_to_string(type));
|
||||
break;
|
||||
default:
|
||||
MXS_ERROR("Bad column type: %x %s", type, column_type_to_string(type));
|
||||
break;
|
||||
}
|
||||
|
||||
memcpy(dest, src, size);
|
||||
@ -558,30 +558,34 @@ static uint64_t unpack_bytes(uint8_t *ptr, size_t bytes)
|
||||
|
||||
switch (bytes)
|
||||
{
|
||||
case 1:
|
||||
val = ptr[0];
|
||||
break;
|
||||
case 2:
|
||||
val = ptr[1] | ((uint64_t)(ptr[0]) << 8);
|
||||
break;
|
||||
case 3:
|
||||
val = (uint64_t)ptr[2] | ((uint64_t)ptr[1] << 8) | ((uint64_t)ptr[0] << 16);
|
||||
break;
|
||||
case 4:
|
||||
val = (uint64_t)ptr[3] | ((uint64_t)ptr[2] << 8) | ((uint64_t)ptr[1] << 16) | ((uint64_t)ptr[0] << 24);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
case 6:
|
||||
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);
|
||||
break;
|
||||
case 7:
|
||||
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;
|
||||
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;
|
||||
case 1:
|
||||
val = ptr[0];
|
||||
break;
|
||||
case 2:
|
||||
val = ptr[1] | ((uint64_t)(ptr[0]) << 8);
|
||||
break;
|
||||
case 3:
|
||||
val = (uint64_t)ptr[2] | ((uint64_t)ptr[1] << 8) | ((uint64_t)ptr[0] << 16);
|
||||
break;
|
||||
case 4:
|
||||
val = (uint64_t)ptr[3] | ((uint64_t)ptr[2] << 8) | ((uint64_t)ptr[1] << 16) | ((uint64_t)ptr[0] << 24);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
case 6:
|
||||
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);
|
||||
break;
|
||||
case 7:
|
||||
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;
|
||||
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;
|
||||
|
@ -272,7 +272,7 @@ mxs_mysql_name_kind_t mxs_mysql_name_to_pcre(char *pcre,
|
||||
case '{':
|
||||
case '}':
|
||||
*pcre++ = '\\';
|
||||
// Flowthrough
|
||||
// Flowthrough
|
||||
default:
|
||||
*pcre = *mysql;
|
||||
}
|
||||
|
@ -1629,11 +1629,16 @@ dShowEventStats(DCB *pdcb)
|
||||
int i;
|
||||
|
||||
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 execution time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxexectime, 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, "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, "Maximum queue time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxqtime,
|
||||
TS_STATS_MAX));
|
||||
dcb_printf(pdcb, "Maximum execution time: %3" PRId64 "00ms\n", ts_stats_get(queueStats.maxexectime,
|
||||
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, "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, " | Number of events\n");
|
||||
dcb_printf(pdcb, "Duration | Queued | Executed\n");
|
||||
|
@ -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";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QC_USED_IN_SUBSELECT:
|
||||
{
|
||||
static const char name[] = "QC_USED_IN_SUBSELECT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QC_USED_IN_WHERE:
|
||||
{
|
||||
static const char name[] = "QC_USED_IN_WHERE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QC_USED_IN_SET:
|
||||
{
|
||||
static const char name[] = "QC_USED_IN_SET";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QC_USED_IN_GROUP_BY:
|
||||
{
|
||||
static const char name[] = "QC_USED_IN_GROUP_BY";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
static const char name[] = "UNKNOWN_FIELD_USAGE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return info;
|
||||
@ -435,43 +435,43 @@ const char* qc_op_to_string(qc_query_op_t op)
|
||||
switch (op)
|
||||
{
|
||||
case QUERY_OP_UNDEFINED:
|
||||
return "QUERY_OP_UNDEFINED";
|
||||
return "QUERY_OP_UNDEFINED";
|
||||
|
||||
case QUERY_OP_SELECT:
|
||||
return "QUERY_OP_SELECT";
|
||||
return "QUERY_OP_SELECT";
|
||||
|
||||
case QUERY_OP_UPDATE:
|
||||
return "QUERY_OP_UPDATE";
|
||||
return "QUERY_OP_UPDATE";
|
||||
|
||||
case QUERY_OP_INSERT:
|
||||
return "QUERY_OP_INSERT";
|
||||
return "QUERY_OP_INSERT";
|
||||
|
||||
case QUERY_OP_DELETE:
|
||||
return "QUERY_OP_DELETE";
|
||||
return "QUERY_OP_DELETE";
|
||||
|
||||
case QUERY_OP_TRUNCATE:
|
||||
return "QUERY_OP_TRUNCATE";
|
||||
return "QUERY_OP_TRUNCATE";
|
||||
|
||||
case QUERY_OP_ALTER:
|
||||
return "QUERY_OP_ALTER";
|
||||
return "QUERY_OP_ALTER";
|
||||
|
||||
case QUERY_OP_CREATE:
|
||||
return "QUERY_OP_CREATE";
|
||||
return "QUERY_OP_CREATE";
|
||||
|
||||
case QUERY_OP_DROP:
|
||||
return "QUERY_OP_DROP";
|
||||
return "QUERY_OP_DROP";
|
||||
|
||||
case QUERY_OP_CHANGE_DB:
|
||||
return "QUERY_OP_CHANGE_DB";
|
||||
return "QUERY_OP_CHANGE_DB";
|
||||
|
||||
case QUERY_OP_LOAD:
|
||||
return "QUERY_OP_LOAD";
|
||||
return "QUERY_OP_LOAD";
|
||||
|
||||
case QUERY_OP_GRANT:
|
||||
return "QUERY_OP_GRANT";
|
||||
return "QUERY_OP_GRANT";
|
||||
|
||||
case QUERY_OP_REVOKE:
|
||||
return "QUERY_OP_REVOKE";
|
||||
return "QUERY_OP_REVOKE";
|
||||
|
||||
default:
|
||||
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";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_LOCAL_READ:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_LOCAL_READ";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_READ:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_READ";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_WRITE:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_WRITE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_MASTER_READ:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_MASTER_READ";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_SESSION_WRITE:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_SESSION_WRITE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
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";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_SYSVAR_READ:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_SYSVAR_READ";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
/** Not implemented yet */
|
||||
//case QUERY_TYPE_SYSVAR_WRITE:
|
||||
/** Not implemented yet */
|
||||
//case QUERY_TYPE_SYSVAR_WRITE:
|
||||
case QUERY_TYPE_GSYSVAR_READ:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_GSYSVAR_READ";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_GSYSVAR_WRITE:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_GSYSVAR_WRITE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_BEGIN_TRX:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_BEGIN_TRX";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_ENABLE_AUTOCOMMIT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_ENABLE_AUTOCOMMIT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_DISABLE_AUTOCOMMIT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_DISABLE_AUTOCOMMIT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_ROLLBACK:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_ROLLBACK";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_COMMIT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_COMMIT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_PREPARE_NAMED_STMT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_PREPARE_NAMED_STMT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_PREPARE_STMT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_PREPARE_STMT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_EXEC_STMT:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_EXEC_STMT";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_CREATE_TMP_TABLE:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_CREATE_TMP_TABLE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_READ_TMP_TABLE:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_READ_TMP_TABLE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_SHOW_DATABASES:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_SHOW_DATABASES";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case QUERY_TYPE_SHOW_TABLES:
|
||||
{
|
||||
static const char name[] = "QUERY_TYPE_SHOW_TABLES";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
static const char name[] = "UNKNOWN_QUERY_TYPE";
|
||||
info.name = name;
|
||||
info.name_len = sizeof(name) - 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return info;
|
||||
|
@ -55,7 +55,7 @@ QUEUE_CONFIG
|
||||
QUEUE_CONFIG *new_queue = (QUEUE_CONFIG *)MXS_CALLOC(1, sizeof(QUEUE_CONFIG));
|
||||
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)
|
||||
{
|
||||
new_queue->queue_limit = limit;
|
||||
|
@ -1203,25 +1203,25 @@ static bool create_server_config(const SERVER *server, const char *filename)
|
||||
|
||||
switch (server->server_ssl->ssl_method_type)
|
||||
{
|
||||
case SERVICE_TLS10:
|
||||
version = "TLSV10";
|
||||
break;
|
||||
case SERVICE_TLS10:
|
||||
version = "TLSV10";
|
||||
break;
|
||||
|
||||
#ifdef OPENSSL_1_0
|
||||
case SERVICE_TLS11:
|
||||
version = "TLSV11";
|
||||
break;
|
||||
case SERVICE_TLS11:
|
||||
version = "TLSV11";
|
||||
break;
|
||||
|
||||
case SERVICE_TLS12:
|
||||
version = "TLSV12";
|
||||
break;
|
||||
case SERVICE_TLS12:
|
||||
version = "TLSV12";
|
||||
break;
|
||||
#endif
|
||||
case SERVICE_SSL_TLS_MAX:
|
||||
version = "MAX";
|
||||
break;
|
||||
case SERVICE_SSL_TLS_MAX:
|
||||
version = "MAX";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (version)
|
||||
@ -1273,7 +1273,7 @@ bool server_serialize(const SERVER *server)
|
||||
}
|
||||
|
||||
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);
|
||||
SERVER *server = allServers;
|
||||
|
@ -318,19 +318,19 @@ serviceStartPort(SERVICE *service, SERV_LISTENER *port)
|
||||
{
|
||||
switch (port->listener->authfunc.loadusers(port))
|
||||
{
|
||||
case MXS_AUTH_LOADUSERS_FATAL:
|
||||
MXS_ERROR("[%s] Fatal error when loading users for listener '%s', "
|
||||
"service is not started.", service->name, port->name);
|
||||
close_port(port);
|
||||
return 0;
|
||||
case MXS_AUTH_LOADUSERS_FATAL:
|
||||
MXS_ERROR("[%s] Fatal error when loading users for listener '%s', "
|
||||
"service is not started.", service->name, port->name);
|
||||
close_port(port);
|
||||
return 0;
|
||||
|
||||
case MXS_AUTH_LOADUSERS_ERROR:
|
||||
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
|
||||
" might not work.", service->name, port->name);
|
||||
break;
|
||||
case MXS_AUTH_LOADUSERS_ERROR:
|
||||
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
|
||||
" might not work.", service->name, port->name);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1223,7 +1223,7 @@ serviceSetFilters(SERVICE *service, char *filters)
|
||||
n++;
|
||||
MXS_FILTER_DEF **tmp;
|
||||
if ((tmp = (MXS_FILTER_DEF **) MXS_REALLOC(flist,
|
||||
(n + 1) * sizeof(MXS_FILTER_DEF *))) == NULL)
|
||||
(n + 1) * sizeof(MXS_FILTER_DEF *))) == NULL)
|
||||
{
|
||||
rval = false;
|
||||
break;
|
||||
@ -1393,18 +1393,18 @@ void dprintService(DCB *dcb, SERVICE *service)
|
||||
dcb_printf(dcb, "\tRouter: %s\n", service->routerModule);
|
||||
switch (service->state)
|
||||
{
|
||||
case SERVICE_STATE_STARTED:
|
||||
dcb_printf(dcb, "\tState: Started\n");
|
||||
break;
|
||||
case SERVICE_STATE_STOPPED:
|
||||
dcb_printf(dcb, "\tState: Stopped\n");
|
||||
break;
|
||||
case SERVICE_STATE_FAILED:
|
||||
dcb_printf(dcb, "\tState: Failed\n");
|
||||
break;
|
||||
case SERVICE_STATE_ALLOC:
|
||||
dcb_printf(dcb, "\tState: Allocated\n");
|
||||
break;
|
||||
case SERVICE_STATE_STARTED:
|
||||
dcb_printf(dcb, "\tState: Started\n");
|
||||
break;
|
||||
case SERVICE_STATE_STOPPED:
|
||||
dcb_printf(dcb, "\tState: Stopped\n");
|
||||
break;
|
||||
case SERVICE_STATE_FAILED:
|
||||
dcb_printf(dcb, "\tState: Failed\n");
|
||||
break;
|
||||
case SERVICE_STATE_ALLOC:
|
||||
dcb_printf(dcb, "\tState: Allocated\n");
|
||||
break;
|
||||
}
|
||||
if (service->router && service->router_instance)
|
||||
{
|
||||
@ -1635,20 +1635,20 @@ int service_refresh_users(SERVICE *service)
|
||||
{
|
||||
switch (port->listener->authfunc.loadusers(port))
|
||||
{
|
||||
case MXS_AUTH_LOADUSERS_FATAL:
|
||||
MXS_ERROR("[%s] Fatal error when loading users for listener '%s',"
|
||||
" authentication will not work.", service->name, port->name);
|
||||
ret = 1;
|
||||
break;
|
||||
case MXS_AUTH_LOADUSERS_FATAL:
|
||||
MXS_ERROR("[%s] Fatal error when loading users for listener '%s',"
|
||||
" authentication will not work.", service->name, port->name);
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case MXS_AUTH_LOADUSERS_ERROR:
|
||||
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
|
||||
" might not work.", service->name, port->name);
|
||||
ret = 1;
|
||||
break;
|
||||
case MXS_AUTH_LOADUSERS_ERROR:
|
||||
MXS_WARNING("[%s] Failed to load users for listener '%s', authentication"
|
||||
" might not work.", service->name, port->name);
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2135,12 +2135,12 @@ static void service_calculate_weights(SERVICE *service)
|
||||
if (perc == 0)
|
||||
{
|
||||
MXS_WARNING("Weighting parameter '%s' with a value of %d for"
|
||||
" server '%s' rounds down to zero with total weight"
|
||||
" of %d for service '%s'. No queries will be "
|
||||
"routed to this server as long as a server with"
|
||||
" positive weight is available.",
|
||||
weightby, wght, server->server->unique_name,
|
||||
total, service->name);
|
||||
" server '%s' rounds down to zero with total weight"
|
||||
" of %d for service '%s'. No queries will be "
|
||||
"routed to this server as long as a server with"
|
||||
" positive weight is available.",
|
||||
weightby, wght, server->server->unique_name,
|
||||
total, service->name);
|
||||
}
|
||||
else if (perc < 0)
|
||||
{
|
||||
|
@ -514,16 +514,16 @@ dprintSession(DCB *dcb, SESSION *print_session)
|
||||
if (print_session->client_dcb && print_session->client_dcb->remote)
|
||||
{
|
||||
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",
|
||||
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);
|
||||
dcb_printf(dcb, "\tConnected: %s\n",
|
||||
asctime_r(localtime_r(&print_session->stats.connect, &result), buf));
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -467,7 +467,7 @@ void acquire_lock(int* l)
|
||||
misscount += 1;
|
||||
if (misscount > 10)
|
||||
{
|
||||
ts1.tv_nsec = (random_jkiss() % misscount)*1000000;
|
||||
ts1.tv_nsec = (random_jkiss() % misscount) * 1000000;
|
||||
nanosleep(&ts1, NULL);
|
||||
}
|
||||
}
|
||||
|
@ -138,24 +138,24 @@ int64_t ts_stats_get(ts_stats_t stats, enum ts_stats_type type)
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case TS_STATS_MAX:
|
||||
if (value > best)
|
||||
{
|
||||
best = value;
|
||||
}
|
||||
break;
|
||||
case TS_STATS_MAX:
|
||||
if (value > best)
|
||||
{
|
||||
best = value;
|
||||
}
|
||||
break;
|
||||
|
||||
case TS_STATS_MIX:
|
||||
if (value < best)
|
||||
{
|
||||
best = value;
|
||||
}
|
||||
break;
|
||||
case TS_STATS_MIX:
|
||||
if (value < best)
|
||||
{
|
||||
best = value;
|
||||
}
|
||||
break;
|
||||
|
||||
case TS_STATS_AVG:
|
||||
case TS_STATS_SUM:
|
||||
best += value;
|
||||
break;
|
||||
case TS_STATS_AVG:
|
||||
case TS_STATS_SUM:
|
||||
best += value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,7 +359,8 @@ int test_domain_matching()
|
||||
const char *ns = "mysqlmon";
|
||||
const char *id = "test_domain_matching";
|
||||
|
||||
modulecmd_arg_type_t args[] = {
|
||||
modulecmd_arg_type_t args[] =
|
||||
{
|
||||
{MODULECMD_ARG_MONITOR | MODULECMD_ARG_NAME_MATCHES_DOMAIN, ""}
|
||||
};
|
||||
|
||||
|
@ -109,9 +109,9 @@ test1()
|
||||
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",
|
||||
input_counter,
|
||||
output_counter,
|
||||
TEST_QUEUE_SIZE);
|
||||
input_counter,
|
||||
output_counter,
|
||||
TEST_QUEUE_SIZE);
|
||||
return 4;
|
||||
}
|
||||
filled++;
|
||||
@ -127,61 +127,61 @@ test1()
|
||||
if (*(int *)entry.queued_object != output_counter)
|
||||
{
|
||||
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
return 10;
|
||||
}
|
||||
output_counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
hkheartbeat += (HEARTBEATS_TO_EXPIRE + 1);
|
||||
if (mxs_dequeue_if_expired(queue, &entry))
|
||||
{
|
||||
if (*(int *)entry.queued_object != output_counter)
|
||||
hkheartbeat += (HEARTBEATS_TO_EXPIRE + 1);
|
||||
if (mxs_dequeue_if_expired(queue, &entry))
|
||||
{
|
||||
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
return 6;
|
||||
if (*(int *)entry.queued_object != output_counter)
|
||||
{
|
||||
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
return 6;
|
||||
}
|
||||
output_counter++;
|
||||
}
|
||||
output_counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
ss_dfprintf(stderr, "\nReturned no expired entry even though all are expired.\n");
|
||||
return 7;
|
||||
}
|
||||
expired++;
|
||||
else
|
||||
{
|
||||
ss_dfprintf(stderr, "\nReturned no expired entry even though all are expired.\n");
|
||||
return 7;
|
||||
}
|
||||
expired++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QUEUE_ENTRY entry;
|
||||
if (mxs_dequeue(queue, &entry))
|
||||
{
|
||||
if (*(int *)entry.queued_object != output_counter)
|
||||
{
|
||||
QUEUE_ENTRY entry;
|
||||
if (mxs_dequeue(queue, &entry))
|
||||
{
|
||||
if (*(int *)entry.queued_object != output_counter)
|
||||
{
|
||||
ss_dfprintf(stderr, "\nOutput counter was %d, but dequeue gave %d.\n",
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
output_counter,
|
||||
*(int *)entry.queued_object);
|
||||
return 8;
|
||||
}
|
||||
output_counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (input_counter != output_counter)
|
||||
{
|
||||
}
|
||||
output_counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (input_counter != output_counter)
|
||||
{
|
||||
ss_dfprintf(stderr, "\nNULL from dequeue, but input counter %d and output counter %d.\n",
|
||||
input_counter,
|
||||
output_counter);
|
||||
input_counter,
|
||||
output_counter);
|
||||
return 9;
|
||||
}
|
||||
emptied++;
|
||||
}
|
||||
}
|
||||
emptied++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -545,7 +545,7 @@ strip_escape_chars(char* val)
|
||||
#define BUFFER_GROWTH_RATE 1.2
|
||||
static pcre2_code* remove_comments_re = NULL;
|
||||
static const PCRE2_SPTR remove_comments_pattern = (PCRE2_SPTR)
|
||||
"(?:`[^`]*`\\K)|(\\/[*](?!(M?!)).*?[*]\\/)|(?:#.*|--[[:space:]].*)";
|
||||
"(?:`[^`]*`\\K)|(\\/[*](?!(M?!)).*?[*]\\/)|(?:#.*|--[[:space:]].*)";
|
||||
|
||||
/**
|
||||
* 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 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.
|
||||
@ -755,7 +755,8 @@ char* replace_literal(char* haystack, const char* needle, const char* replacemen
|
||||
memcpy(newstr, haystack, match.rm_so + 1);
|
||||
memcpy(newstr + match.rm_so + 1, replacement, rlen);
|
||||
/** +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);
|
||||
free(haystack);
|
||||
@ -766,7 +767,7 @@ retblock:
|
||||
|
||||
static pcre2_code* replace_quoted_re = NULL;
|
||||
static const PCRE2_SPTR replace_quoted_pattern = (PCRE2_SPTR)
|
||||
"(?>[^'\"]*)(?|(?:\"\\K(?:(?:(?<=\\\\)\")|[^\"])*(\"))|(?:'\\K(?:(?:(?<=\\\\)')|[^'])*(')))";
|
||||
"(?>[^'\"]*)(?|(?:\"\\K(?:(?:(?<=\\\\)\")|[^\"])*(\"))|(?:'\\K(?:(?:(?<=\\\\)')|[^'])*(')))";
|
||||
|
||||
/**
|
||||
* Replace contents of single or double quoted strings with question marks.
|
||||
|
Loading…
x
Reference in New Issue
Block a user