Commit 33fc4f51 authored by Kentoku SHIBA's avatar Kentoku SHIBA

add sendsql to error log

parent 9ef11967
...@@ -1523,16 +1523,19 @@ int spider_db_mysql::exec_query( ...@@ -1523,16 +1523,19 @@ int spider_db_mysql::exec_query(
int quick_mode int quick_mode
) { ) {
int error_num; int error_num;
uint log_result_errors = spider_param_log_result_errors();
DBUG_ENTER("spider_db_mysql::exec_query"); DBUG_ENTER("spider_db_mysql::exec_query");
DBUG_PRINT("info",("spider this=%p", this)); DBUG_PRINT("info",("spider this=%p", this));
if (spider_param_general_log()) if (spider_param_general_log())
{ {
const char *tgt_str = conn->tgt_host; const char *tgt_str = conn->tgt_host;
uint32 tgt_len = conn->tgt_host_length; uint32 tgt_len = conn->tgt_host_length;
spider_string tmp_query_str(length + conn->tgt_wrapper_length + spider_string tmp_query_str;
tgt_len + (SPIDER_SQL_SPACE_LEN * 2));
tmp_query_str.init_calc_mem(230); tmp_query_str.init_calc_mem(230);
tmp_query_str.length(0); if (tmp_query_str.reserve(
length + conn->tgt_wrapper_length +
tgt_len + (SPIDER_SQL_SPACE_LEN * 2)))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
tmp_query_str.q_append(conn->tgt_wrapper, conn->tgt_wrapper_length); tmp_query_str.q_append(conn->tgt_wrapper, conn->tgt_wrapper_length);
tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
tmp_query_str.q_append(tgt_str, tgt_len); tmp_query_str.q_append(tgt_str, tgt_len);
...@@ -1542,34 +1545,82 @@ int spider_db_mysql::exec_query( ...@@ -1542,34 +1545,82 @@ int spider_db_mysql::exec_query(
tmp_query_str.length()); tmp_query_str.length());
} }
error_num = mysql_real_query(db_conn, query, length); error_num = mysql_real_query(db_conn, query, length);
if (spider_param_log_result_errors() >= 2 && db_conn->warning_count > 0) if (
{ (error_num && log_result_errors >= 1) ||
time_t cur_time = (time_t) time((time_t*) 0); (log_result_errors >= 2 && db_conn->warning_count > 0) ||
struct tm lt; (log_result_errors >= 4)
struct tm *l_time = localtime_r(&cur_time, &lt); ) {
fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] " THD *thd = current_thd;
"from [%s] %ld to %ld: " uint log_result_error_with_sql = spider_param_log_result_error_with_sql();
"affected_rows: %llu id: %llu status: %u warning_count: %u\n", if (log_result_error_with_sql)
l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday, {
l_time->tm_hour, l_time->tm_min, l_time->tm_sec, time_t cur_time = (time_t) time((time_t*) 0);
conn->tgt_host, db_conn->thread_id, current_thd->thread_id, struct tm lt;
db_conn->affected_rows, db_conn->insert_id, struct tm *l_time = localtime_r(&cur_time, &lt);
db_conn->server_status, db_conn->warning_count); spider_string tmp_query_str;
if (spider_param_log_result_errors() >= 3) tmp_query_str.init_calc_mem(243);
print_warnings(l_time); uint query_length = thd->query_length();
} else if (spider_param_log_result_errors() >= 4) if ((log_result_error_with_sql & 2) && query_length)
{ {
time_t cur_time = (time_t) time((time_t*) 0); Security_context *security_ctx = thd->security_ctx;
struct tm lt; tmp_query_str.length(0);
struct tm *l_time = localtime_r(&cur_time, &lt); if (tmp_query_str.reserve(query_length + 1))
fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [INFO SPIDER RESULT] " DBUG_RETURN(HA_ERR_OUT_OF_MEM);
"from [%s] %ld to %ld: " tmp_query_str.q_append(thd->query(), query_length);
"affected_rows: %llu id: %llu status: %u warning_count: %u\n", fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [RECV SPIDER SQL] "
l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday, "from [%s][%s] to %ld: "
l_time->tm_hour, l_time->tm_min, l_time->tm_sec, "sql: %s\n",
conn->tgt_host, db_conn->thread_id, current_thd->thread_id, l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
db_conn->affected_rows, db_conn->insert_id, l_time->tm_hour, l_time->tm_min, l_time->tm_sec,
db_conn->server_status, db_conn->warning_count); security_ctx->user ? security_ctx->user : "system user",
security_ctx->host_or_ip,
thd->thread_id,
tmp_query_str.c_ptr_safe());
}
if (log_result_error_with_sql & 1)
{
tmp_query_str.length(0);
if (tmp_query_str.reserve(length + 1))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
tmp_query_str.q_append(query, length);
fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [SEND SPIDER SQL] "
"from %ld to [%s] %ld: "
"sql: %s\n",
l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
l_time->tm_hour, l_time->tm_min, l_time->tm_sec,
thd->thread_id, conn->tgt_host, db_conn->thread_id,
tmp_query_str.c_ptr_safe());
}
}
if (log_result_errors >= 2 && db_conn->warning_count > 0)
{
time_t cur_time = (time_t) time((time_t*) 0);
struct tm lt;
struct tm *l_time = localtime_r(&cur_time, &lt);
fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] "
"from [%s] %ld to %ld: "
"affected_rows: %llu id: %llu status: %u warning_count: %u\n",
l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
l_time->tm_hour, l_time->tm_min, l_time->tm_sec,
conn->tgt_host, db_conn->thread_id, thd->thread_id,
db_conn->affected_rows, db_conn->insert_id,
db_conn->server_status, db_conn->warning_count);
if (spider_param_log_result_errors() >= 3)
print_warnings(l_time);
} else if (log_result_errors >= 4)
{
time_t cur_time = (time_t) time((time_t*) 0);
struct tm lt;
struct tm *l_time = localtime_r(&cur_time, &lt);
fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [INFO SPIDER RESULT] "
"from [%s] %ld to %ld: "
"affected_rows: %llu id: %llu status: %u warning_count: %u\n",
l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
l_time->tm_hour, l_time->tm_min, l_time->tm_sec,
conn->tgt_host, db_conn->thread_id, thd->thread_id,
db_conn->affected_rows, db_conn->insert_id,
db_conn->server_status, db_conn->warning_count);
}
} }
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
} }
......
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
#define SPIDER_TMP_SHARE_LONG_COUNT 15 #define SPIDER_TMP_SHARE_LONG_COUNT 15
#define SPIDER_TMP_SHARE_LONGLONG_COUNT 3 #define SPIDER_TMP_SHARE_LONGLONG_COUNT 3
#define SPIDER_MEM_CALC_LIST_NUM 243 #define SPIDER_MEM_CALC_LIST_NUM 244
#define SPIDER_BACKUP_DASTATUS \ #define SPIDER_BACKUP_DASTATUS \
bool da_status; if (thd) da_status = thd->is_error(); else da_status = FALSE; bool da_status; if (thd) da_status = thd->is_error(); else da_status = FALSE;
......
...@@ -2827,6 +2827,32 @@ uint spider_param_log_result_errors() ...@@ -2827,6 +2827,32 @@ uint spider_param_log_result_errors()
DBUG_RETURN(spider_log_result_errors); DBUG_RETURN(spider_log_result_errors);
} }
static uint spider_log_result_error_with_sql;
/*
0: no log
1: log spider sql at logging result errors
2: log user sql at logging result errors
3: log both sql at logging result errors
*/
static MYSQL_SYSVAR_UINT(
log_result_error_with_sql,
spider_log_result_error_with_sql,
PLUGIN_VAR_RQCMDARG,
"Log sql at logging result errors",
NULL,
NULL,
0,
0,
3,
0
);
uint spider_param_log_result_error_with_sql()
{
DBUG_ENTER("spider_param_log_result_error_with_sql");
DBUG_RETURN(spider_log_result_error_with_sql);
}
static char *spider_version = (char *) SPIDER_DETAIL_VERSION; static char *spider_version = (char *) SPIDER_DETAIL_VERSION;
static MYSQL_SYSVAR_STR( static MYSQL_SYSVAR_STR(
version, version,
...@@ -2988,6 +3014,7 @@ static struct st_mysql_sys_var* spider_system_variables[] = { ...@@ -2988,6 +3014,7 @@ static struct st_mysql_sys_var* spider_system_variables[] = {
#endif #endif
MYSQL_SYSVAR(general_log), MYSQL_SYSVAR(general_log),
MYSQL_SYSVAR(log_result_errors), MYSQL_SYSVAR(log_result_errors),
MYSQL_SYSVAR(log_result_error_with_sql),
MYSQL_SYSVAR(version), MYSQL_SYSVAR(version),
MYSQL_SYSVAR(internal_xa_id_type), MYSQL_SYSVAR(internal_xa_id_type),
NULL NULL
......
...@@ -370,6 +370,7 @@ int spider_param_udf_ds_use_real_table( ...@@ -370,6 +370,7 @@ int spider_param_udf_ds_use_real_table(
#endif #endif
my_bool spider_param_general_log(); my_bool spider_param_general_log();
uint spider_param_log_result_errors(); uint spider_param_log_result_errors();
uint spider_param_log_result_error_with_sql();
uint spider_param_internal_xa_id_type( uint spider_param_internal_xa_id_type(
THD *thd THD *thd
); );
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment