summaryrefslogtreecommitdiff
path: root/storage/spider
diff options
context:
space:
mode:
authorKentoku SHIBA <kentokushiba@gmail.com>2013-08-24 14:42:40 +0900
committerKentoku SHIBA <kentokushiba@gmail.com>2013-08-24 14:42:40 +0900
commit49a4bbe1e7e4e3a1abbc26740d45482de4b4b609 (patch)
treea77e5875bb7fdecd23535dac9cbffd5e03303b00 /storage/spider
parente1fc2f4d280584d67e2b04967e55d9b685bb0dba (diff)
downloadmariadb-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.cpp2
-rw-r--r--storage/spider/hs_client/hstcpcli.hpp2
-rw-r--r--storage/spider/spd_db_conn.cc34
-rw-r--r--storage/spider/spd_db_handlersocket.cc18
-rw-r--r--storage/spider/spd_db_mysql.cc47
-rw-r--r--storage/spider/spd_db_oracle.cc16
-rw-r--r--storage/spider/spd_include.h2
-rw-r--r--storage/spider/spd_param.cc46
-rw-r--r--storage/spider/spd_param.h2
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, &lt);
+ 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, &lt);
+ 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, &lt);
+ 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, &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, 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, &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, 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();