diff options
author | Kentoku SHIBA <kentokushiba@gmail.com> | 2013-08-24 14:42:40 +0900 |
---|---|---|
committer | Kentoku SHIBA <kentokushiba@gmail.com> | 2013-08-24 14:42:40 +0900 |
commit | 49a4bbe1e7e4e3a1abbc26740d45482de4b4b609 (patch) | |
tree | a77e5875bb7fdecd23535dac9cbffd5e03303b00 /storage/spider | |
parent | e1fc2f4d280584d67e2b04967e55d9b685bb0dba (diff) | |
download | mariadb-git-49a4bbe1e7e4e3a1abbc26740d45482de4b4b609.tar.gz |
Add spider_general_log and spider_log_result_errors feature.
Diffstat (limited to 'storage/spider')
-rw-r--r-- | storage/spider/hs_client/hstcpcli.cpp | 2 | ||||
-rw-r--r-- | storage/spider/hs_client/hstcpcli.hpp | 2 | ||||
-rw-r--r-- | storage/spider/spd_db_conn.cc | 34 | ||||
-rw-r--r-- | storage/spider/spd_db_handlersocket.cc | 18 | ||||
-rw-r--r-- | storage/spider/spd_db_mysql.cc | 47 | ||||
-rw-r--r-- | storage/spider/spd_db_oracle.cc | 16 | ||||
-rw-r--r-- | storage/spider/spd_include.h | 2 | ||||
-rw-r--r-- | storage/spider/spd_param.cc | 46 | ||||
-rw-r--r-- | storage/spider/spd_param.h | 2 |
9 files changed, 167 insertions, 2 deletions
diff --git a/storage/spider/hs_client/hstcpcli.cpp b/storage/spider/hs_client/hstcpcli.cpp index 6ff9ed84a81..6aa83e60a27 100644 --- a/storage/spider/hs_client/hstcpcli.cpp +++ b/storage/spider/hs_client/hstcpcli.cpp @@ -77,6 +77,8 @@ struct hstcpcli : public hstcpcli_i, private noncopyable { virtual size_t get_response_end_offset() { return response_end_offset; } virtual const char *get_readbuf_begin() { return readbuf.begin(); } virtual const char *get_readbuf_end() { return readbuf.end(); } + virtual const char *get_writebuf_begin() { return writebuf.begin(); } + virtual size_t get_writebuf_size() { return writebuf.size(); } virtual void write_error_to_log(const char *func_name, const char *file_name, ulong line_no); private: diff --git a/storage/spider/hs_client/hstcpcli.hpp b/storage/spider/hs_client/hstcpcli.hpp index 2c43f4230c4..d153b19cf9b 100644 --- a/storage/spider/hs_client/hstcpcli.hpp +++ b/storage/spider/hs_client/hstcpcli.hpp @@ -82,6 +82,8 @@ struct hstcpcli_i { virtual size_t get_response_end_offset() = 0; virtual const char *get_readbuf_begin() = 0; virtual const char *get_readbuf_end() = 0; + virtual const char *get_writebuf_begin() = 0; + virtual size_t get_writebuf_size() = 0; virtual void write_error_to_log(const char *func_name, const char *file_name, ulong line_no) = 0; static hstcpcli_ptr create(const socket_args& args); diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc index fe6fe844ce5..26adf14e311 100644 --- a/storage/spider/spd_db_conn.cc +++ b/storage/spider/spd_db_conn.cc @@ -682,6 +682,17 @@ int spider_db_errorno( ) { push_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, error_num, conn->db_conn->get_error()); + if (spider_param_log_result_errors() >= 3) + { + 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] " + "to %ld: %d %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, + current_thd->thread_id, error_num, conn->db_conn->get_error()); + } if (!conn->mta_conn_mutex_unlock_later) { SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); @@ -691,6 +702,17 @@ int spider_db_errorno( } *conn->need_mon = error_num; my_message(error_num, conn->db_conn->get_error(), MYF(0)); + if (spider_param_log_result_errors() >= 1) + { + 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 [ERROR SPIDER RESULT] " + "to %ld: %d %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, + current_thd->thread_id, error_num, conn->db_conn->get_error()); + } if (!conn->mta_conn_mutex_unlock_later) { SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); @@ -725,6 +747,18 @@ int spider_db_errorno( } my_printf_error(ER_SPIDER_HS_NUM, ER_SPIDER_HS_STR, MYF(0), conn->db_conn->get_errno(), conn->db_conn->get_error()); + if (spider_param_log_result_errors() >= 1) + { + 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 [ERROR SPIDER RESULT] " + "to %ld: %d %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, + current_thd->thread_id, conn->db_conn->get_errno(), + conn->db_conn->get_error()); + } *conn->need_mon = ER_SPIDER_HS_NUM; if (!conn->mta_conn_mutex_unlock_later) { diff --git a/storage/spider/spd_db_handlersocket.cc b/storage/spider/spd_db_handlersocket.cc index 1dd6eb655bd..096cf0befa9 100644 --- a/storage/spider/spd_db_handlersocket.cc +++ b/storage/spider/spd_db_handlersocket.cc @@ -1061,6 +1061,24 @@ int spider_db_handlersocket::exec_query( (*hs_conn_p)->get_num_req_rcvd()));
DBUG_PRINT("info",("spider hs response_end_offset=%zu",
(*hs_conn_p)->get_response_end_offset()));
+ if (spider_param_general_log())
+ {
+ const char *tgt_str = conn->hs_sock ? conn->hs_sock : conn->tgt_host;
+ uint32 tgt_len = strlen(tgt_str);
+ spider_string tmp_query_str((*hs_conn_p)->get_writebuf_size() +
+ conn->tgt_wrapper_length +
+ tgt_len + (SPIDER_SQL_SPACE_LEN * 2));
+ tmp_query_str.init_calc_mem(231);
+ tmp_query_str.length(0);
+ 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);
+ tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ tmp_query_str.q_append((*hs_conn_p)->get_writebuf_begin(),
+ (*hs_conn_p)->get_writebuf_size());
+ general_log_write(current_thd, COM_QUERY, tmp_query_str.ptr(),
+ tmp_query_str.length());
+ }
if ((*hs_conn_p)->request_send() < 0)
{
DBUG_PRINT("info",("spider hs num_req_bufd=%zu",
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index fd61b9f966d..cfaba822934 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -1475,9 +1475,54 @@ int spider_db_mysql::exec_query( uint length,
int quick_mode
) {
+ int error_num;
DBUG_ENTER("spider_db_mysql::exec_query");
DBUG_PRINT("info",("spider this=%p", this));
- DBUG_RETURN(mysql_real_query(db_conn, query, length));
+ 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));
+ tmp_query_str.init_calc_mem(230);
+ tmp_query_str.length(0);
+ 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);
+ tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ tmp_query_str.q_append(query, length);
+ general_log_write(current_thd, COM_QUERY, tmp_query_str.ptr(),
+ 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);
+ } 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);
+ }
+ DBUG_RETURN(error_num);
}
int spider_db_mysql::get_errno()
diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc index 6c12ec49b6a..e9915898b1a 100644 --- a/storage/spider/spd_db_oracle.cc +++ b/storage/spider/spd_db_oracle.cc @@ -1403,6 +1403,22 @@ int spider_db_oracle::exec_query( int error_num;
DBUG_ENTER("spider_db_oracle::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));
+ tmp_query_str.init_calc_mem(232);
+ tmp_query_str.length(0);
+ 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);
+ tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
+ tmp_query_str.q_append(query, length);
+ general_log_write(current_thd, COM_QUERY, tmp_query_str.ptr(),
+ tmp_query_str.length());
+ }
stored_error_num = 0;
if (table_lock_mode && !conn->in_before_query)
{
diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h index 88f8aa1726f..20125c50a7e 100644 --- a/storage/spider/spd_include.h +++ b/storage/spider/spd_include.h @@ -86,7 +86,7 @@ #define SPIDER_TMP_SHARE_LONG_COUNT 15 #define SPIDER_TMP_SHARE_LONGLONG_COUNT 3 -#define SPIDER_MEM_CALC_LIST_NUM 230 +#define SPIDER_MEM_CALC_LIST_NUM 233 #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 22b15d41b95..eab043bd1f0 100644 --- a/storage/spider/spd_param.cc +++ b/storage/spider/spd_param.cc @@ -2783,6 +2783,50 @@ int spider_param_udf_ds_use_real_table( } #endif +static my_bool spider_general_log; +static MYSQL_SYSVAR_BOOL( + general_log, + spider_general_log, + PLUGIN_VAR_OPCMDARG, + "Log query to remote server in general log", + NULL, + NULL, + FALSE +); + +my_bool spider_param_general_log() +{ + DBUG_ENTER("spider_param_general_log"); + DBUG_RETURN(spider_general_log); +} + +static uint spider_log_result_errors; +/* + 0: no log + 1: log error + 2: log warning summary + 3: log warning + 4: log info + */ +static MYSQL_SYSVAR_UINT( + log_result_errors, + spider_log_result_errors, + PLUGIN_VAR_RQCMDARG, + "Log error from remote server in error log", + NULL, + NULL, + 0, + 0, + 4, + 0 +); + +uint spider_param_log_result_errors() +{ + DBUG_ENTER("spider_param_log_result_errors"); + DBUG_RETURN(spider_log_result_errors); +} + static struct st_mysql_storage_engine spider_storage_engine = { MYSQL_HANDLERTON_INTERFACE_VERSION }; @@ -2908,6 +2952,8 @@ static struct st_mysql_sys_var* spider_system_variables[] = { #else MYSQL_SYSVAR(udf_ds_use_real_table), #endif + MYSQL_SYSVAR(general_log), + MYSQL_SYSVAR(log_result_errors), NULL }; diff --git a/storage/spider/spd_param.h b/storage/spider/spd_param.h index a3e1576cdf1..2274743ba41 100644 --- a/storage/spider/spd_param.h +++ b/storage/spider/spd_param.h @@ -368,3 +368,5 @@ int spider_param_udf_ds_use_real_table( int udf_ds_use_real_table ); #endif +my_bool spider_param_general_log(); +uint spider_param_log_result_errors(); |