diff options
author | Kentoku SHIBA <kentokushiba@gmail.com> | 2014-03-25 05:05:04 +0900 |
---|---|---|
committer | Kentoku SHIBA <kentokushiba@gmail.com> | 2014-03-25 05:05:04 +0900 |
commit | 33fc4f5192c12fba72f3beb0f863210871433474 (patch) | |
tree | e90376ecb9474bce20631587ee529b372cc2117f /storage/spider | |
parent | 9ef119679dfe73c50503b7845c63d6814ec1dc79 (diff) | |
download | mariadb-git-33fc4f5192c12fba72f3beb0f863210871433474.tar.gz |
add sendsql to error log
Diffstat (limited to 'storage/spider')
-rw-r--r-- | storage/spider/spd_db_mysql.cc | 113 | ||||
-rw-r--r-- | storage/spider/spd_include.h | 2 | ||||
-rw-r--r-- | storage/spider/spd_param.cc | 27 | ||||
-rw-r--r-- | storage/spider/spd_param.h | 1 |
4 files changed, 111 insertions, 32 deletions
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 56cfa3cbd6a..44f48495a67 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -1523,16 +1523,19 @@ int spider_db_mysql::exec_query( int quick_mode ) { int error_num; + uint log_result_errors = spider_param_log_result_errors(); DBUG_ENTER("spider_db_mysql::exec_query"); DBUG_PRINT("info",("spider this=%p", this)); if (spider_param_general_log()) { const char *tgt_str = conn->tgt_host; uint32 tgt_len = conn->tgt_host_length; - spider_string tmp_query_str(length + conn->tgt_wrapper_length + - tgt_len + (SPIDER_SQL_SPACE_LEN * 2)); + spider_string tmp_query_str; 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(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); tmp_query_str.q_append(tgt_str, tgt_len); @@ -1542,34 +1545,82 @@ int spider_db_mysql::exec_query( tmp_query_str.length()); } error_num = mysql_real_query(db_conn, query, length); - if (spider_param_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, <); - 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, current_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 (spider_param_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, <); - 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, current_thd->thread_id, - db_conn->affected_rows, db_conn->insert_id, - db_conn->server_status, db_conn->warning_count); + if ( + (error_num && log_result_errors >= 1) || + (log_result_errors >= 2 && db_conn->warning_count > 0) || + (log_result_errors >= 4) + ) { + THD *thd = current_thd; + uint log_result_error_with_sql = spider_param_log_result_error_with_sql(); + if (log_result_error_with_sql) + { + time_t cur_time = (time_t) time((time_t*) 0); + struct tm lt; + struct tm *l_time = localtime_r(&cur_time, <); + spider_string tmp_query_str; + tmp_query_str.init_calc_mem(243); + uint query_length = thd->query_length(); + if ((log_result_error_with_sql & 2) && query_length) + { + Security_context *security_ctx = thd->security_ctx; + tmp_query_str.length(0); + if (tmp_query_str.reserve(query_length + 1)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + tmp_query_str.q_append(thd->query(), query_length); + fprintf(stderr, "%04d%02d%02d %02d:%02d:%02d [RECV SPIDER SQL] " + "from [%s][%s] to %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, + 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, <); + 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, <); + 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); } diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h index 21ee22b805f..d02c75d2e7b 100644 --- a/storage/spider/spd_include.h +++ b/storage/spider/spd_include.h @@ -121,7 +121,7 @@ #define SPIDER_TMP_SHARE_LONG_COUNT 15 #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 \ bool da_status; if (thd) da_status = thd->is_error(); else da_status = FALSE; diff --git a/storage/spider/spd_param.cc b/storage/spider/spd_param.cc index a23ff93fcdb..2bb03c35bee 100644 --- a/storage/spider/spd_param.cc +++ b/storage/spider/spd_param.cc @@ -2827,6 +2827,32 @@ uint spider_param_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 MYSQL_SYSVAR_STR( version, @@ -2988,6 +3014,7 @@ static struct st_mysql_sys_var* spider_system_variables[] = { #endif MYSQL_SYSVAR(general_log), MYSQL_SYSVAR(log_result_errors), + MYSQL_SYSVAR(log_result_error_with_sql), MYSQL_SYSVAR(version), MYSQL_SYSVAR(internal_xa_id_type), NULL diff --git a/storage/spider/spd_param.h b/storage/spider/spd_param.h index ff8de079a26..82e919eb377 100644 --- a/storage/spider/spd_param.h +++ b/storage/spider/spd_param.h @@ -370,6 +370,7 @@ int spider_param_udf_ds_use_real_table( #endif my_bool spider_param_general_log(); uint spider_param_log_result_errors(); +uint spider_param_log_result_error_with_sql(); uint spider_param_internal_xa_id_type( THD *thd ); |