Commit 2cc9e456 authored by Kentoku SHIBA's avatar Kentoku SHIBA

MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to...

MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to unlock mutex conn->mta_conn_mutex that wasn't locked at storage/spider/spd_db_conn.cc, line 671
parent d25f806d
This diff is collapsed.
...@@ -3230,6 +3230,7 @@ void *spider_bg_conn_action( ...@@ -3230,6 +3230,7 @@ void *spider_bg_conn_action(
sql_type = SPIDER_SQL_TYPE_SELECT_HS; sql_type = SPIDER_SQL_TYPE_SELECT_HS;
} }
#endif #endif
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_handler->need_lock_before_set_sql_for_exec(sql_type)) if (dbton_handler->need_lock_before_set_sql_for_exec(sql_type))
{ {
pthread_mutex_lock(&conn->mta_conn_mutex); pthread_mutex_lock(&conn->mta_conn_mutex);
...@@ -3270,6 +3271,8 @@ void *spider_bg_conn_action( ...@@ -3270,6 +3271,8 @@ void *spider_bg_conn_action(
if (!result_list->bgs_error) if (!result_list->bgs_error)
{ {
conn->need_mon = &spider->need_mons[conn->link_idx]; conn->need_mon = &spider->need_mons[conn->link_idx];
DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = TRUE; conn->mta_conn_mutex_lock_already = TRUE;
conn->mta_conn_mutex_unlock_later = TRUE; conn->mta_conn_mutex_unlock_later = TRUE;
#ifdef HA_CAN_BULK_ACCESS #ifdef HA_CAN_BULK_ACCESS
...@@ -3347,6 +3350,8 @@ void *spider_bg_conn_action( ...@@ -3347,6 +3350,8 @@ void *spider_bg_conn_action(
#ifdef HA_CAN_BULK_ACCESS #ifdef HA_CAN_BULK_ACCESS
} }
#endif #endif
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
...@@ -3357,11 +3362,14 @@ void *spider_bg_conn_action( ...@@ -3357,11 +3362,14 @@ void *spider_bg_conn_action(
} }
} else { } else {
spider->connection_ids[conn->link_idx] = conn->connection_id; spider->connection_ids[conn->link_idx] = conn->connection_id;
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_unlock_later = TRUE; conn->mta_conn_mutex_unlock_later = TRUE;
result_list->bgs_error = result_list->bgs_error =
spider_db_store_result(spider, conn->link_idx, result_list->table); spider_db_store_result(spider, conn->link_idx, result_list->table);
if ((result_list->bgs_error_with_message = thd->is_error())) if ((result_list->bgs_error_with_message = thd->is_error()))
strmov(result_list->bgs_error_msg, spider_stmt_da_message(thd)); strmov(result_list->bgs_error_msg, spider_stmt_da_message(thd));
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
} }
conn->bg_search = FALSE; conn->bg_search = FALSE;
...@@ -3425,12 +3433,26 @@ void *spider_bg_conn_action( ...@@ -3425,12 +3433,26 @@ void *spider_bg_conn_action(
{ {
DBUG_PRINT("info",("spider bg exec sql start")); DBUG_PRINT("info",("spider bg exec sql start"));
spider = (ha_spider*) conn->bg_target; spider = (ha_spider*) conn->bg_target;
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
pthread_mutex_lock(&conn->mta_conn_mutex);
SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
conn->need_mon = &spider->need_mons[conn->link_idx];
DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = TRUE;
conn->mta_conn_mutex_unlock_later = TRUE;
*conn->bg_error_num = spider_db_query_with_set_names( *conn->bg_error_num = spider_db_query_with_set_names(
conn->bg_sql_type, conn->bg_sql_type,
spider, spider,
conn, conn,
conn->link_idx conn->link_idx
); );
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE;
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
pthread_mutex_unlock(&conn->mta_conn_mutex);
conn->bg_exec_sql = FALSE; conn->bg_exec_sql = FALSE;
continue; continue;
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -1411,6 +1411,7 @@ int spider_group_by_handler::init_scan() ...@@ -1411,6 +1411,7 @@ int spider_group_by_handler::init_scan()
} }
} else { } else {
#endif #endif
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec( if (dbton_hdl->need_lock_before_set_sql_for_exec(
SPIDER_SQL_TYPE_SELECT_SQL)) SPIDER_SQL_TYPE_SELECT_SQL))
{ {
...@@ -1421,6 +1422,12 @@ int spider_group_by_handler::init_scan() ...@@ -1421,6 +1422,12 @@ int spider_group_by_handler::init_scan()
dbton_hdl->set_sql_for_exec(SPIDER_SQL_TYPE_SELECT_SQL, link_idx, dbton_hdl->set_sql_for_exec(SPIDER_SQL_TYPE_SELECT_SQL, link_idx,
link_idx_chain))) link_idx_chain)))
{ {
if (dbton_hdl->need_lock_before_set_sql_for_exec(
SPIDER_SQL_TYPE_SELECT_SQL))
{
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
pthread_mutex_unlock(&conn->mta_conn_mutex);
}
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
} }
if (!dbton_hdl->need_lock_before_set_sql_for_exec( if (!dbton_hdl->need_lock_before_set_sql_for_exec(
...@@ -1430,11 +1437,15 @@ int spider_group_by_handler::init_scan() ...@@ -1430,11 +1437,15 @@ int spider_group_by_handler::init_scan()
SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
} }
conn->need_mon = &spider->need_mons[link_idx]; conn->need_mon = &spider->need_mons[link_idx];
DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = TRUE; conn->mta_conn_mutex_lock_already = TRUE;
conn->mta_conn_mutex_unlock_later = TRUE; conn->mta_conn_mutex_unlock_later = TRUE;
if ((error_num = spider_db_set_names(spider, conn, if ((error_num = spider_db_set_names(spider, conn,
link_idx))) link_idx)))
{ {
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
...@@ -1459,6 +1470,8 @@ int spider_group_by_handler::init_scan() ...@@ -1459,6 +1470,8 @@ int spider_group_by_handler::init_scan()
spider->result_list.quick_mode, spider->result_list.quick_mode,
&spider->need_mons[link_idx]) &spider->need_mons[link_idx])
) { ) {
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
error_num = spider_db_errorno(conn); error_num = spider_db_errorno(conn);
...@@ -1475,6 +1488,8 @@ int spider_group_by_handler::init_scan() ...@@ -1475,6 +1488,8 @@ int spider_group_by_handler::init_scan()
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
} }
spider->connection_ids[link_idx] = conn->connection_id; spider->connection_ids[link_idx] = conn->connection_id;
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
if (fields->is_first_link_ok_chain(link_idx_chain)) if (fields->is_first_link_ok_chain(link_idx_chain))
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#if MYSQL_VERSION_ID < 50500 #if MYSQL_VERSION_ID < 50500
#define spider_my_free(A,B) my_free(A,B) #define spider_my_free(A,B) my_free(A,B)
#define pthread_mutex_assert_owner(A)
#define pthread_mutex_assert_not_owner(A)
#else #else
#define spider_my_free(A,B) my_free(A) #define spider_my_free(A,B) my_free(A)
#ifdef pthread_mutex_t #ifdef pthread_mutex_t
...@@ -41,6 +43,8 @@ ...@@ -41,6 +43,8 @@
#undef pthread_mutex_destroy #undef pthread_mutex_destroy
#endif #endif
#define pthread_mutex_destroy mysql_mutex_destroy #define pthread_mutex_destroy mysql_mutex_destroy
#define pthread_mutex_assert_owner(A) mysql_mutex_assert_owner(A)
#define pthread_mutex_assert_not_owner(A) mysql_mutex_assert_not_owner(A)
#ifdef pthread_cond_t #ifdef pthread_cond_t
#undef pthread_cond_t #undef pthread_cond_t
#endif #endif
......
...@@ -6698,13 +6698,18 @@ int spider_open_all_tables( ...@@ -6698,13 +6698,18 @@ int spider_open_all_tables(
} }
conn->error_mode &= spider_param_error_read_mode(thd, 0); conn->error_mode &= spider_param_error_read_mode(thd, 0);
conn->error_mode &= spider_param_error_write_mode(thd, 0); conn->error_mode &= spider_param_error_write_mode(thd, 0);
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
pthread_mutex_lock(&conn->mta_conn_mutex); pthread_mutex_lock(&conn->mta_conn_mutex);
SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
conn->need_mon = &mon_val; conn->need_mon = &mon_val;
DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = TRUE; conn->mta_conn_mutex_lock_already = TRUE;
conn->mta_conn_mutex_unlock_later = TRUE; conn->mta_conn_mutex_unlock_later = TRUE;
if ((error_num = spider_db_before_query(conn, &mon_val))) if ((error_num = spider_db_before_query(conn, &mon_val)))
{ {
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
...@@ -6717,6 +6722,8 @@ int spider_open_all_tables( ...@@ -6717,6 +6722,8 @@ int spider_open_all_tables(
free_root(&mem_root, MYF(0)); free_root(&mem_root, MYF(0));
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
} }
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE; conn->mta_conn_mutex_lock_already = FALSE;
conn->mta_conn_mutex_unlock_later = FALSE; conn->mta_conn_mutex_unlock_later = FALSE;
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos); SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
......
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