Merge branch 'develop' of https://github.com/mariadb-corporation/MaxScale into develop
This commit is contained in:
commit
a65d8cd525
@ -57,10 +57,18 @@ static simple_mutex_t msg_mutex;
|
||||
* actual library calls such as skygw_log_write.
|
||||
*/
|
||||
int lm_enabled_logfiles_bitmask = 0;
|
||||
|
||||
/**
|
||||
* Thread-specific variable for session id which is used in trace logging.
|
||||
* Thread-specific struct variable for storing current session id and currently
|
||||
* enabled log files for the session.
|
||||
*/
|
||||
__thread size_t tls_sesid = 0;
|
||||
__thread log_info_t tls_log_info = {0, 0};
|
||||
|
||||
/**
|
||||
* Global counter for each log file type. It indicates for how many sessions
|
||||
* each log type is currently enabled.
|
||||
*/
|
||||
ssize_t log_ses_count[LOGFILE_LAST] = {0};
|
||||
|
||||
/**
|
||||
* BUFSIZ comes from the system. It equals with block size or
|
||||
@ -68,13 +76,6 @@ __thread size_t tls_sesid = 0;
|
||||
*/
|
||||
#define MAX_LOGSTRLEN BUFSIZ
|
||||
|
||||
#if defined(SS_PROF)
|
||||
/**
|
||||
* These counters may be inaccurate but give some idea of how
|
||||
* things are going.
|
||||
*/
|
||||
|
||||
#endif
|
||||
/**
|
||||
* Path to directory in which all files are stored to shared memory
|
||||
* by the OS.
|
||||
@ -726,20 +727,19 @@ static int logmanager_write_log(
|
||||
int safe_str_len;
|
||||
/** Length of session id */
|
||||
int sesid_str_len;
|
||||
|
||||
|
||||
/** 2 braces and 2 spaces */
|
||||
if (id == LOGFILE_TRACE && tls_sesid > 0)
|
||||
if (id == LOGFILE_TRACE && tls_log_info.li_sesid != 0)
|
||||
{
|
||||
sesid_str_len = 2+2+get_decimal_len(tls_sesid);
|
||||
sesid_str_len = 2+2+get_decimal_len(tls_log_info.li_sesid);
|
||||
}
|
||||
else
|
||||
{
|
||||
sesid_str_len = 0;
|
||||
}
|
||||
|
||||
}
|
||||
timestamp_len = get_timestamp_len();
|
||||
|
||||
/** Findout how much can be safely written with current block size */
|
||||
/** Find out how much can be safely written with current block size */
|
||||
if (timestamp_len-1+sesid_str_len-1+str_len > lf->lf_buf_size)
|
||||
{
|
||||
safe_str_len = lf->lf_buf_size;
|
||||
@ -799,12 +799,15 @@ static int logmanager_write_log(
|
||||
*/
|
||||
timestamp_len = snprint_timestamp(wp, timestamp_len);
|
||||
|
||||
if (id == LOGFILE_TRACE)
|
||||
if (sesid_str_len != 0)
|
||||
{
|
||||
/**
|
||||
* Write session id
|
||||
*/
|
||||
snprintf(wp+timestamp_len, sesid_str_len, "[%lu] ", tls_sesid);
|
||||
snprintf(wp+timestamp_len,
|
||||
sesid_str_len,
|
||||
"[%lu] ",
|
||||
tls_log_info.li_sesid);
|
||||
sesid_str_len -= 1; /*< remove terminating char */
|
||||
}
|
||||
/**
|
||||
@ -1234,10 +1237,10 @@ int skygw_log_enable(
|
||||
{
|
||||
bool err = 0;
|
||||
|
||||
if (!logmanager_register(true)) {
|
||||
//fprintf(stderr, "ERROR: Can't register to logmanager\n");
|
||||
err = -1;
|
||||
goto return_err;
|
||||
if (!logmanager_register(true))
|
||||
{
|
||||
err = -1;
|
||||
goto return_err;
|
||||
}
|
||||
CHK_LOGMANAGER(lm);
|
||||
|
||||
@ -1369,19 +1372,21 @@ int skygw_log_write_flush(
|
||||
va_list valist;
|
||||
size_t len;
|
||||
|
||||
if (!logmanager_register(true)) {
|
||||
//fprintf(stderr, "ERROR: Can't register to logmanager\n");
|
||||
err = -1;
|
||||
goto return_err;
|
||||
if (!logmanager_register(true))
|
||||
{
|
||||
err = -1;
|
||||
goto return_err;
|
||||
}
|
||||
CHK_LOGMANAGER(lm);
|
||||
|
||||
/**
|
||||
* If particular log is disabled only unregister and return.
|
||||
*/
|
||||
if (!(lm->lm_enabled_logfiles & id)) {
|
||||
err = 1;
|
||||
goto return_unregister;
|
||||
/**
|
||||
* If particular log is disabled in general and it is not enabled for
|
||||
* the current session, then unregister and return.
|
||||
*/
|
||||
if (!LOG_IS_ENABLED(id))
|
||||
{
|
||||
err = 1;
|
||||
goto return_unregister;
|
||||
}
|
||||
/**
|
||||
* Find out the length of log string (to be formatted str).
|
||||
@ -1422,17 +1427,19 @@ int skygw_log_write(
|
||||
va_list valist;
|
||||
size_t len;
|
||||
|
||||
if (!logmanager_register(true)) {
|
||||
//fprintf(stderr, "ERROR: Can't register to logmanager\n");
|
||||
err = -1;
|
||||
goto return_err;
|
||||
if (!logmanager_register(true))
|
||||
{
|
||||
err = -1;
|
||||
goto return_err;
|
||||
}
|
||||
CHK_LOGMANAGER(lm);
|
||||
|
||||
/**
|
||||
* If particular log is disabled only unregister and return.
|
||||
* If particular log is disabled in general and it is not enabled for
|
||||
* the current session, then unregister and return.
|
||||
*/
|
||||
if (!(lm->lm_enabled_logfiles & id)) {
|
||||
if (!LOG_IS_ENABLED(id))
|
||||
{
|
||||
err = 1;
|
||||
goto return_unregister;
|
||||
}
|
||||
|
@ -42,17 +42,55 @@ typedef enum {
|
||||
typedef enum { FILEWRITER_INIT, FILEWRITER_RUN, FILEWRITER_DONE }
|
||||
filewriter_state_t;
|
||||
|
||||
/**
|
||||
* Thread-specific logging information.
|
||||
*/
|
||||
typedef struct log_info_st
|
||||
{
|
||||
size_t li_sesid;
|
||||
int li_enabled_logs;
|
||||
} log_info_t;
|
||||
|
||||
#define LE LOGFILE_ERROR
|
||||
#define LM LOGFILE_MESSAGE
|
||||
#define LT LOGFILE_TRACE
|
||||
#define LD LOGFILE_DEBUG
|
||||
|
||||
/**
|
||||
* Check if specified log type is enabled in general or if it is enabled
|
||||
* for the current session.
|
||||
*/
|
||||
#define LOG_IS_ENABLED(id) (((lm_enabled_logfiles_bitmask & id) || \
|
||||
(log_ses_count[id] > 0 && \
|
||||
tls_log_info.li_enabled_logs & id)) ? true : false)
|
||||
|
||||
|
||||
#define LOG_MAY_BE_ENABLED(id) (((lm_enabled_logfiles_bitmask & id) || \
|
||||
log_ses_count[id] > 0) ? true : false)
|
||||
/**
|
||||
* Execute the given command if specified log is enabled in general or
|
||||
* if there is at least one session for whom the log is enabled.
|
||||
*/
|
||||
#define LOGIF_MAYBE(id,cmd) if (LOG_MAY_BE_ENABLED(id)) \
|
||||
{ \
|
||||
cmd; \
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the given command if specified log is enabled in general or
|
||||
* if the log is enabled for the current session.
|
||||
*/
|
||||
#define LOGIF(id,cmd) if (LOG_IS_ENABLED(id)) \
|
||||
{ \
|
||||
cmd; \
|
||||
}
|
||||
|
||||
#if !defined(LOGIF)
|
||||
#define LOGIF(id,cmd) if (lm_enabled_logfiles_bitmask & id) \
|
||||
{ \
|
||||
cmd; \
|
||||
} \
|
||||
|
||||
#define LOG_IS_ENABLED(id) ((lm_enabled_logfiles_bitmask & id) ? true : false)
|
||||
{ \
|
||||
cmd; \
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* UNINIT means zeroed memory buffer allocated for the struct.
|
||||
|
@ -61,7 +61,9 @@
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
#define QTYPE_LESS_RESTRICTIVE_THAN_WRITE(t) (t<QUERY_TYPE_WRITE ? true : false)
|
||||
|
||||
|
@ -27,7 +27,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* @file adminusers.c - Administration user account management
|
||||
|
@ -47,7 +47,10 @@
|
||||
#include <log_manager.h>
|
||||
#include <errno.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static buffer_object_t* gwbuf_remove_buffer_object(
|
||||
GWBUF* buf,
|
||||
|
@ -58,7 +58,10 @@
|
||||
#include <log_manager.h>
|
||||
#include <mysql.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
extern int setipaddress(struct in_addr *, char *);
|
||||
static int process_config_context(CONFIG_CONTEXT *);
|
||||
|
@ -63,7 +63,10 @@
|
||||
|
||||
#define LOAD_MYSQL_DATABASE_NAMES "SELECT * FROM ( (SELECT COUNT(1) AS ndbs FROM INFORMATION_SCHEMA.SCHEMATA) AS tbl1, (SELECT GRANTEE,PRIVILEGE_TYPE from INFORMATION_SCHEMA.USER_PRIVILEGES WHERE privilege_type='SHOW DATABASES' AND REPLACE(GRANTEE, \"\'\",\"\")=CURRENT_USER()) AS tbl2)"
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static int getUsers(SERVICE *service, USERS *users);
|
||||
static int uh_cmpfun( void* v1, void* v2);
|
||||
|
@ -71,7 +71,10 @@
|
||||
#include <log_manager.h>
|
||||
#include <hashtable.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static DCB *allDCBs = NULL; /* Diagnostics need a list of DCBs */
|
||||
static DCB *zombies = NULL;
|
||||
@ -85,10 +88,10 @@ static bool dcb_set_state_nomutex(
|
||||
dcb_state_t* old_state);
|
||||
static void dcb_call_callback(DCB *dcb, DCB_REASON reason);
|
||||
static DCB* dcb_get_next (DCB* dcb);
|
||||
static int dcb_null_write(DCB *dcb, GWBUF *buf);
|
||||
static int dcb_null_close(DCB *dcb);
|
||||
static int dcb_null_auth(DCB *dcb, SERVER *server, SESSION *session, GWBUF *buf);
|
||||
static int dcb_isvalid_nolock(DCB *dcb);
|
||||
static int dcb_null_write(DCB *dcb, GWBUF *buf);
|
||||
static int dcb_null_close(DCB *dcb);
|
||||
static int dcb_null_auth(DCB *dcb, SERVER *server, SESSION *session, GWBUF *buf);
|
||||
static int dcb_isvalid_nolock(DCB *dcb);
|
||||
|
||||
size_t dcb_get_session_id(
|
||||
DCB* dcb)
|
||||
@ -105,8 +108,45 @@ size_t dcb_get_session_id(
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the pointer to the lsit of zombie DCB's
|
||||
* Read log info from session through DCB and store values to memory locations
|
||||
* passed as parameters.
|
||||
*
|
||||
* @param dcb DCB
|
||||
* @param sesid location where session id is to be copied
|
||||
* @param enabled_logs bit field indicating which log types are enabled for the
|
||||
* session
|
||||
*
|
||||
*@return true if call arguments included memory addresses, false if any of the
|
||||
*parameters was NULL.
|
||||
*/
|
||||
bool dcb_get_ses_log_info(
|
||||
DCB* dcb,
|
||||
size_t* sesid,
|
||||
int* enabled_logs)
|
||||
{
|
||||
bool succp;
|
||||
|
||||
if (dcb == NULL ||
|
||||
dcb->session == NULL ||
|
||||
sesid == NULL ||
|
||||
enabled_logs == NULL)
|
||||
{
|
||||
succp = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
*sesid = dcb->session->ses_id;
|
||||
*enabled_logs = dcb->session->ses_enabled_logs;
|
||||
succp = true;
|
||||
}
|
||||
|
||||
return succp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the pointer to the list of zombie DCB's
|
||||
*
|
||||
* @return Zombies DCB list
|
||||
*/
|
||||
@ -455,6 +495,7 @@ bool succp = false;
|
||||
zombies = tptr;
|
||||
else
|
||||
lptr->memdata.next = tptr;
|
||||
|
||||
LOGIF(LD, (skygw_log_write_flush(
|
||||
LOGFILE_DEBUG,
|
||||
"%lu [dcb_process_zombies] Remove dcb "
|
||||
@ -498,6 +539,7 @@ bool succp = false;
|
||||
while (dcb != NULL) {
|
||||
DCB* dcb_next = NULL;
|
||||
int rc = 0;
|
||||
|
||||
/*<
|
||||
* Close file descriptor and move to clean-up phase.
|
||||
*/
|
||||
@ -532,12 +574,20 @@ bool succp = false;
|
||||
ss_debug(dcb->fd = -1;)
|
||||
}
|
||||
#endif /* SS_DEBUG */
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
|
||||
succp = dcb_set_state(dcb, DCB_STATE_DISCONNECTED, NULL);
|
||||
ss_dassert(succp);
|
||||
dcb_next = dcb->memdata.next;
|
||||
dcb_final_free(dcb);
|
||||
dcb = dcb_next;
|
||||
}
|
||||
/** Reset threads session data */
|
||||
LOGIF(LT, tls_log_info.li_sesid = 0);
|
||||
|
||||
return zombies;
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static SPINLOCK filter_spin = SPINLOCK_INIT; /**< Protects the list of all filters */
|
||||
static FILTER_DEF *allFilters = NULL; /**< The list of all filters */
|
||||
|
@ -85,7 +85,10 @@ extern char *program_invocation_short_name;
|
||||
* Used from log users to check enabled logs prior calling
|
||||
* actual library calls such as skygw_log_write.
|
||||
*/
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/*
|
||||
* Server options are passed to the mysql_server_init. Each gateway must have a unique
|
||||
|
@ -48,7 +48,10 @@
|
||||
|
||||
SPINLOCK tmplock = SPINLOCK_INIT;
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/*
|
||||
* Set IP address in socket structure in_addr
|
||||
|
@ -43,7 +43,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static MODULES *registered = NULL;
|
||||
|
||||
|
@ -40,7 +40,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static MONITOR *allMonitors = NULL;
|
||||
static SPINLOCK monLock = SPINLOCK_INIT;
|
||||
|
@ -39,9 +39,10 @@
|
||||
#include <rdtsc.h>
|
||||
#endif
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
|
||||
extern __thread size_t tls_sesid;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* @file poll.c - Abstraction of the epoll functionality
|
||||
@ -662,24 +663,21 @@ uint32_t ev;
|
||||
|
||||
if (eno == 0) {
|
||||
#if MUTEX_BLOCK
|
||||
simple_mutex_lock(
|
||||
&dcb->dcb_write_lock,
|
||||
true);
|
||||
ss_info_dassert(
|
||||
!dcb->dcb_write_active,
|
||||
"Write already active");
|
||||
simple_mutex_lock(&dcb->dcb_write_lock, true);
|
||||
ss_info_dassert(!dcb->dcb_write_active,
|
||||
"Write already active");
|
||||
dcb->dcb_write_active = TRUE;
|
||||
atomic_add(
|
||||
&pollStats.n_write,
|
||||
1);
|
||||
atomic_add(&pollStats.n_write, 1);
|
||||
dcb->func.write_ready(dcb);
|
||||
dcb->dcb_write_active = FALSE;
|
||||
simple_mutex_unlock(
|
||||
&dcb->dcb_write_lock);
|
||||
simple_mutex_unlock(&dcb->dcb_write_lock);
|
||||
#else
|
||||
atomic_add(&pollStats.n_write,
|
||||
1);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
atomic_add(&pollStats.n_write, 1);
|
||||
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.write_ready(dcb);
|
||||
#endif
|
||||
} else {
|
||||
@ -698,10 +696,8 @@ uint32_t ev;
|
||||
if (ev & EPOLLIN)
|
||||
{
|
||||
#if MUTEX_BLOCK
|
||||
simple_mutex_lock(&dcb->dcb_read_lock,
|
||||
true);
|
||||
ss_info_dassert(!dcb->dcb_read_active,
|
||||
"Read already active");
|
||||
simple_mutex_lock(&dcb->dcb_read_lock, true);
|
||||
ss_info_dassert(!dcb->dcb_read_active, "Read already active");
|
||||
dcb->dcb_read_active = TRUE;
|
||||
#endif
|
||||
|
||||
@ -715,7 +711,10 @@ uint32_t ev;
|
||||
dcb->fd)));
|
||||
atomic_add(
|
||||
&pollStats.n_accept, 1);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.accept(dcb);
|
||||
}
|
||||
else
|
||||
@ -728,7 +727,10 @@ uint32_t ev;
|
||||
dcb,
|
||||
dcb->fd)));
|
||||
atomic_add(&pollStats.n_read, 1);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.read(dcb);
|
||||
}
|
||||
#if MUTEX_BLOCK
|
||||
@ -764,7 +766,10 @@ uint32_t ev;
|
||||
strerror(eno))));
|
||||
}
|
||||
atomic_add(&pollStats.n_error, 1);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.error(dcb);
|
||||
}
|
||||
|
||||
@ -789,7 +794,10 @@ uint32_t ev;
|
||||
{
|
||||
dcb->flags |= DCBF_HUNG;
|
||||
spinlock_release(&dcb->dcb_initlock);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.hangup(dcb);
|
||||
}
|
||||
else
|
||||
@ -818,15 +826,16 @@ uint32_t ev;
|
||||
{
|
||||
dcb->flags |= DCBF_HUNG;
|
||||
spinlock_release(&dcb->dcb_initlock);
|
||||
LOGIF(LT, (tls_sesid = dcb_get_session_id(dcb)));
|
||||
LOGIF_MAYBE(LT, (dcb_get_ses_log_info(
|
||||
dcb,
|
||||
&tls_log_info.li_sesid,
|
||||
&tls_log_info.li_enabled_logs)));
|
||||
dcb->func.hangup(dcb);
|
||||
}
|
||||
else
|
||||
spinlock_release(&dcb->dcb_initlock);
|
||||
}
|
||||
#endif
|
||||
LOGIF(LT, tls_sesid = 0);
|
||||
|
||||
spinlock_acquire(&pollqlock);
|
||||
if (dcb->evq.pending_events == 0)
|
||||
{
|
||||
@ -871,6 +880,7 @@ uint32_t ev;
|
||||
}
|
||||
}
|
||||
dcb->evq.processing = 0;
|
||||
LOGIF(LT, tls_log_info.li_sesid = 0);
|
||||
spinlock_release(&pollqlock);
|
||||
|
||||
return 1;
|
||||
|
@ -23,7 +23,10 @@
|
||||
#include <ctype.h>
|
||||
#include <mysql_client_server_protocol.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
/**
|
||||
* Generate a random printable character
|
||||
*
|
||||
|
@ -45,7 +45,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static SPINLOCK server_spin = SPINLOCK_INIT;
|
||||
static SERVER *allServers = NULL;
|
||||
|
@ -55,7 +55,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/** To be used with configuration type checks */
|
||||
typedef struct typelib_st {
|
||||
|
@ -44,7 +44,10 @@
|
||||
#include <log_manager.h>
|
||||
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/** Global session id; updated safely by holding session_spin */
|
||||
static size_t session_id;
|
||||
|
||||
@ -74,15 +77,14 @@ session_alloc(SERVICE *service, DCB *client_dcb)
|
||||
ss_info_dassert(session != NULL,
|
||||
"Allocating memory for session failed.");
|
||||
|
||||
if (session == NULL) {
|
||||
int eno = errno;
|
||||
errno = 0;
|
||||
if (session == NULL)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
"Error : Failed to allocate memory for "
|
||||
"session object due error %d, %s.",
|
||||
eno,
|
||||
strerror(eno))));
|
||||
errno,
|
||||
strerror(errno))));
|
||||
goto return_session;
|
||||
}
|
||||
#if defined(SS_DEBUG)
|
||||
@ -219,7 +221,8 @@ session_alloc(SERVICE *service, DCB *client_dcb)
|
||||
session->state = SESSION_STATE_ROUTER_READY;
|
||||
spinlock_release(&session->ses_lock);
|
||||
spinlock_acquire(&session_spin);
|
||||
session->ses_id = ++session_id; /*< assign an id and increase */
|
||||
/** Assign a session id and increase */
|
||||
session->ses_id = ++session_id;
|
||||
session->next = allSessions;
|
||||
allSessions = session;
|
||||
spinlock_release(&session_spin);
|
||||
@ -250,6 +253,41 @@ return_session:
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable specified logging for the current session and increase logger
|
||||
* counter.
|
||||
* Generic logging setting has precedence over session-specific setting.
|
||||
*
|
||||
* @param ses session
|
||||
* @param id logfile identifier
|
||||
*/
|
||||
void session_enable_log(
|
||||
SESSION* ses,
|
||||
logfile_id_t id)
|
||||
{
|
||||
ses->ses_enabled_logs |= id;
|
||||
atomic_add((int *)&log_ses_count[id], 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable specified logging for the current session and decrease logger
|
||||
* counter.
|
||||
* Generic logging setting has precedence over session-specific setting.
|
||||
*
|
||||
* @param ses session
|
||||
* @param id logfile identifier
|
||||
*/
|
||||
void session_disable_log(
|
||||
SESSION* ses,
|
||||
logfile_id_t id)
|
||||
{
|
||||
if (ses->ses_enabled_logs & id)
|
||||
{
|
||||
ses->ses_enabled_logs &= ~id;
|
||||
atomic_add((int *)&log_ses_count[id], -1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Link a session to a DCB.
|
||||
*
|
||||
@ -381,6 +419,9 @@ bool session_free(
|
||||
session->service->name,
|
||||
session->ses_id)));
|
||||
|
||||
/** Disable trace and decrease trace logger counter */
|
||||
session_disable_log(session, LT);
|
||||
|
||||
free(session);
|
||||
succp = true;
|
||||
|
||||
|
@ -43,7 +43,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/* used in the hex2bin function */
|
||||
#define char_val(X) (X >= '0' && X <= '9' ? X-'0' :\
|
||||
|
@ -309,7 +309,9 @@ int dcb_isvalid(DCB *); /* Check the DCB is in the linked list */
|
||||
|
||||
bool dcb_set_state(DCB* dcb, dcb_state_t new_state, dcb_state_t* old_state);
|
||||
void dcb_call_foreach (DCB_REASON reason);
|
||||
size_t dcb_get_session_id(DCB* dcb);;
|
||||
size_t dcb_get_session_id(DCB* dcb);
|
||||
bool dcb_get_ses_log_info(DCB* dcb, size_t* sesid, int* enabled_logs);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <buffer.h>
|
||||
#include <spinlock.h>
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
struct dcb;
|
||||
struct service;
|
||||
@ -109,19 +110,20 @@ typedef struct session {
|
||||
skygw_chk_t ses_chk_top;
|
||||
#endif
|
||||
SPINLOCK ses_lock;
|
||||
session_state_t state; /**< Current descriptor state */
|
||||
size_t ses_id; /**< unique session identifier */
|
||||
struct dcb *client; /**< The client connection */
|
||||
void *data; /**< The session data */
|
||||
void *router_session;/**< The router instance data */
|
||||
SESSION_STATS stats; /**< Session statistics */
|
||||
struct service *service; /**< The service this session is using */
|
||||
int n_filters; /**< Number of filter sessions */
|
||||
SESSION_FILTER *filters; /**< The filters in use within this session */
|
||||
DOWNSTREAM head; /**< Head of the filter chain */
|
||||
UPSTREAM tail; /**< The tail of the filter chain */
|
||||
struct session *next; /**< Linked list of all sessions */
|
||||
int refcount; /**< Reference count on the session */
|
||||
session_state_t state; /*< Current descriptor state */
|
||||
size_t ses_id; /*< Unique session identifier */
|
||||
int ses_enabled_logs; /*< Bitfield of enabled logs */
|
||||
struct dcb *client; /*< The client connection */
|
||||
void *data; /*< The session data */
|
||||
void *router_session; /*< The router instance data */
|
||||
SESSION_STATS stats; /*< Session statistics */
|
||||
struct service *service; /*< The service this session is using */
|
||||
int n_filters; /*< Number of filter sessions */
|
||||
SESSION_FILTER *filters; /*< The filters in use within this session */
|
||||
DOWNSTREAM head; /*< Head of the filter chain */
|
||||
UPSTREAM tail; /*< The tail of the filter chain */
|
||||
struct session *next; /*< Linked list of all sessions */
|
||||
int refcount; /*< Reference count on the session */
|
||||
#if defined(SS_DEBUG)
|
||||
skygw_chk_t ses_chk_tail;
|
||||
#endif
|
||||
@ -160,4 +162,7 @@ void dListSessions(struct dcb *);
|
||||
char *session_state(int);
|
||||
bool session_link_dcb(SESSION *, struct dcb *);
|
||||
SESSION* get_session_by_router_ses(void* rses);
|
||||
void session_enable_log(SESSION* ses, logfile_id_t id);
|
||||
void session_disable_log(SESSION* ses, logfile_id_t id);
|
||||
|
||||
#endif
|
||||
|
@ -25,7 +25,10 @@
|
||||
#include <modutil.h>
|
||||
#include <mysqlhint.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* hintparser.c - Find any comment in the SQL packet and look for MAXSCALE
|
||||
|
@ -51,7 +51,10 @@
|
||||
#include <regex.h>
|
||||
#include <string.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
MODULE_INFO info = {
|
||||
MODULE_API_FILTER,
|
||||
|
@ -24,7 +24,10 @@
|
||||
#include <string.h>
|
||||
#include <regex.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* @file regexfilter.c - a very simple regular expression rewrite filter.
|
||||
|
@ -58,7 +58,10 @@
|
||||
#include <router.h>
|
||||
#include <dcb.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
MODULE_INFO info = {
|
||||
MODULE_API_FILTER,
|
||||
|
@ -48,7 +48,10 @@
|
||||
#include <sys/time.h>
|
||||
#include <regex.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
MODULE_INFO info = {
|
||||
MODULE_API_FILTER,
|
||||
|
@ -50,7 +50,10 @@
|
||||
#include <dcb.h>
|
||||
#include <modinfo.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static void monitorMain(void *);
|
||||
|
||||
|
@ -64,7 +64,10 @@
|
||||
#include <dcb.h>
|
||||
#include <modinfo.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static void monitorMain(void *);
|
||||
|
||||
|
@ -42,7 +42,10 @@
|
||||
#include <dcb.h>
|
||||
#include <modinfo.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static void monitorMain(void *);
|
||||
|
||||
|
@ -49,7 +49,10 @@ MODULE_INFO info = {
|
||||
"An experimental HTTPD implementation for use in admnistration"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
#define ISspace(x) isspace((int)(x))
|
||||
#define HTTP_SERVER_STRING "MaxScale(c) v.1.0.0"
|
||||
|
@ -45,7 +45,10 @@ MODULE_INFO info = {
|
||||
"A maxscale protocol for the administration interface"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* @file maxscaled.c - MaxScale administration protocol
|
||||
|
@ -56,7 +56,10 @@ MODULE_INFO info = {
|
||||
"The MySQL to backend server protocol"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static char *version_str = "V2.0.0";
|
||||
static int gw_create_backend_connection(DCB *backend, SERVER *server, SESSION *in_session);
|
||||
|
@ -54,7 +54,10 @@ MODULE_INFO info = {
|
||||
"The client to MaxScale MySQL protocol implementation"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static char *version_str = "V1.0.0";
|
||||
|
||||
|
@ -45,7 +45,10 @@
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
extern int gw_read_backend_event(DCB* dcb);
|
||||
extern int gw_write_backend_event(DCB *dcb);
|
||||
|
@ -45,7 +45,10 @@ MODULE_INFO info = {
|
||||
"A telnet deamon protocol for simple administration interface"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
/**
|
||||
* @file telnetd.c - telnet daemon protocol module
|
||||
|
@ -53,7 +53,10 @@ MODULE_INFO info = {
|
||||
"The admin user interface"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static char *version_str = "V1.0.0";
|
||||
|
||||
|
@ -52,7 +52,10 @@ MODULE_INFO info = {
|
||||
"The debug user interface"
|
||||
};
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
static char *version_str = "V1.1.1";
|
||||
|
||||
|
@ -89,7 +89,10 @@
|
||||
|
||||
#include <mysql_client_server_protocol.h>
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
|
||||
MODULE_INFO info = {
|
||||
MODULE_API_ROUTER,
|
||||
|
@ -45,9 +45,10 @@ MODULE_INFO info = {
|
||||
# include <mysql_client_server_protocol.h>
|
||||
#endif
|
||||
|
||||
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
|
||||
/** Defined in log_manager.cc */
|
||||
extern int lm_enabled_logfiles_bitmask;
|
||||
extern size_t log_ses_count[];
|
||||
extern __thread log_info_t tls_log_info;
|
||||
/**
|
||||
* @file readwritesplit.c The entry points for the read/write query splitting
|
||||
* router module.
|
||||
@ -1946,7 +1947,7 @@ static int routeQuery(
|
||||
char* contentstr = strndup(data, len);
|
||||
char* qtypestr = skygw_get_qtype_str(qtype);
|
||||
|
||||
LOGIF(LT, (skygw_log_write(
|
||||
skygw_log_write(
|
||||
LOGFILE_TRACE,
|
||||
"> Autocommit: %s, trx is %s, cmd: %s, type: %s, "
|
||||
"stmt: %s%s %s",
|
||||
@ -1956,7 +1957,7 @@ static int routeQuery(
|
||||
(qtypestr==NULL ? "N/A" : qtypestr),
|
||||
contentstr,
|
||||
(querybuf->hint == NULL ? "" : ", Hint:"),
|
||||
(querybuf->hint == NULL ? "" : STRHINTTYPE(querybuf->hint->type)))));
|
||||
(querybuf->hint == NULL ? "" : STRHINTTYPE(querybuf->hint->type)));
|
||||
|
||||
free(contentstr);
|
||||
free(qtypestr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user