Commit 3b5cecba authored by Yuchen Pei's avatar Yuchen Pei

MDEV-29502 Clean up spider_db_seek_next() a bit

Also moved spider_conn_before_query() and spider_conn_after_query() to
be used by more places

And clean up other functions in the same file (spd_db_conn.cc).
parent 6dfe8d11
...@@ -217,6 +217,24 @@ void spider_conn_done( ...@@ -217,6 +217,24 @@ void spider_conn_done(
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
void spider_conn_before_query(ha_spider *spider, SPIDER_CONN *conn, int link_idx)
{
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
spider_conn_mutex_lock(conn);
conn->need_mon = &spider->need_mons[link_idx];
spider_conn_mutex_locked(conn);
conn->disable_connect_retry= TRUE;
}
int spider_conn_after_query(SPIDER_CONN *conn, int error_num, bool unlock)
{
conn->disable_connect_retry= FALSE;
spider_conn_mutex_unlocking(conn);
if (unlock)
spider_conn_mutex_unlock(conn);
return error_num;
}
int spider_reset_conn_setted_parameter( int spider_reset_conn_setted_parameter(
SPIDER_CONN *conn, SPIDER_CONN *conn,
THD *thd THD *thd
......
...@@ -62,6 +62,39 @@ void spider_conn_done( ...@@ -62,6 +62,39 @@ void spider_conn_done(
SPIDER_CONN *conn SPIDER_CONN *conn
); );
inline void spider_conn_mutex_lock(SPIDER_CONN *conn)
{
pthread_mutex_lock(&conn->mta_conn_mutex);
SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
}
inline void spider_conn_mutex_unlock(SPIDER_CONN *conn)
{
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
pthread_mutex_unlock(&conn->mta_conn_mutex);
}
inline void spider_conn_mutex_locked(SPIDER_CONN *conn)
{
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;
}
inline void spider_conn_mutex_unlocking(SPIDER_CONN *conn)
{
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;
}
void spider_conn_before_query(ha_spider *spider, SPIDER_CONN *conn,
int link_idx);
int spider_conn_after_query(SPIDER_CONN *conn, int error_num, bool clear);
int spider_reset_conn_setted_parameter( int spider_reset_conn_setted_parameter(
SPIDER_CONN *conn, SPIDER_CONN *conn,
THD *thd THD *thd
......
This diff is collapsed.
...@@ -13539,35 +13539,6 @@ int spider_db_mbase::reset_lock_wait_timeout() ...@@ -13539,35 +13539,6 @@ int spider_db_mbase::reset_lock_wait_timeout()
DBUG_RETURN(0); DBUG_RETURN(0);
} }
/** FIXME: refactor more functions to use spider_setup_for_query() and
spider_teardown_after_query(). */
void spider_setup_for_query(ha_spider *spider, SPIDER_CONN *conn, int link_idx)
{
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[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->disable_connect_retry= TRUE;
}
int spider_teardown_after_query(SPIDER_CONN *conn, int error_num, bool clear)
{
conn->disable_connect_retry= FALSE;
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;
if (clear)
{
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
pthread_mutex_unlock(&conn->mta_conn_mutex);
}
return error_num;
}
/** /**
Executes show table status query and stores results in share->stat Executes show table status query and stores results in share->stat
*/ */
...@@ -13586,7 +13557,7 @@ int spider_mbase_handler::show_table_status( ...@@ -13586,7 +13557,7 @@ int spider_mbase_handler::show_table_status(
DBUG_ENTER("spider_mbase_handler::show_table_status"); DBUG_ENTER("spider_mbase_handler::show_table_status");
DBUG_PRINT("info",("spider sts_mode=%d", sts_mode)); DBUG_PRINT("info",("spider sts_mode=%d", sts_mode));
spider_setup_for_query(spider, conn, link_idx); spider_conn_before_query(spider, conn, link_idx);
spider_conn_set_timeout_from_share( spider_conn_set_timeout_from_share(
conn, link_idx, spider->wide_handler->trx->thd, share); conn, link_idx, spider->wide_handler->trx->thd, share);
...@@ -13607,15 +13578,15 @@ int spider_mbase_handler::show_table_status( ...@@ -13607,15 +13578,15 @@ int spider_mbase_handler::show_table_status(
{ {
/* retry */ /* retry */
if ((error_num = spider_db_ping(spider, conn, link_idx))) if ((error_num = spider_db_ping(spider, conn, link_idx)))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
if ((error_num = spider_db_set_names(spider, conn, link_idx))) if ((error_num = spider_db_set_names(spider, conn, link_idx)))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
spider_conn_set_timeout_from_share(conn, link_idx, spider_conn_set_timeout_from_share(conn, link_idx,
spider->wide_handler->trx->thd, spider->wide_handler->trx->thd,
share); share);
if ((error_num = if ((error_num =
spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx]))) spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx])))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
if (spider_db_query( if (spider_db_query(
conn, conn,
mysql_share->show_table_status[pos].ptr(), mysql_share->show_table_status[pos].ptr(),
...@@ -13623,24 +13594,24 @@ int spider_mbase_handler::show_table_status( ...@@ -13623,24 +13594,24 @@ int spider_mbase_handler::show_table_status(
-1, -1,
&spider->need_mons[link_idx]) &spider->need_mons[link_idx])
) { ) {
spider_teardown_after_query(conn, 0, false); spider_conn_after_query(conn, 0, false);
DBUG_RETURN(spider_db_errorno(conn)); DBUG_RETURN(spider_db_errorno(conn));
} }
} else } else
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
} }
st_spider_db_request_key request_key = { st_spider_db_request_key request_key = {
spider->wide_handler->trx->spider_thread_id, spider->wide_handler->trx->spider_thread_id,
spider->wide_handler->trx->thd->query_id, spider, 1, NULL}; spider->wide_handler->trx->thd->query_id, spider, 1, NULL};
if (spider_param_dry_access()) if (spider_param_dry_access())
DBUG_RETURN(spider_teardown_after_query(conn, 0, true)); DBUG_RETURN(spider_conn_after_query(conn, 0, true));
if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num)))
{ {
if (sts_mode == 1) /* get from status table */ if (sts_mode == 1) /* get from status table */
{ {
if (error_num) if (error_num)
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
spider_teardown_after_query(conn, 0, false); spider_conn_after_query(conn, 0, false);
if ((error_num = spider_db_errorno(conn))) if ((error_num = spider_db_errorno(conn)))
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
else else
...@@ -13654,14 +13625,14 @@ int spider_mbase_handler::show_table_status( ...@@ -13654,14 +13625,14 @@ int spider_mbase_handler::show_table_status(
} }
} else /* get from information schema */ } else /* get from information schema */
{ {
spider_teardown_after_query(conn, error_num, false); spider_conn_after_query(conn, error_num, false);
if (error_num || (error_num= spider_db_errorno(conn))) if (error_num || (error_num= spider_db_errorno(conn)))
DBUG_RETURN(error_num); DBUG_RETURN(error_num);
else else
DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE); DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE);
} }
} }
spider_teardown_after_query(conn, 0, true); spider_conn_after_query(conn, 0, true);
/* Fetches query results into share->stat. */ /* Fetches query results into share->stat. */
error_num = res->fetch_table_status(sts_mode, share->stat); error_num = res->fetch_table_status(sts_mode, share->stat);
auto_increment_value = share->stat.auto_increment_value; auto_increment_value = share->stat.auto_increment_value;
...@@ -13743,7 +13714,7 @@ int spider_mbase_handler::show_index( ...@@ -13743,7 +13714,7 @@ int spider_mbase_handler::show_index(
(crd_mode == 1 ? 0 : 1); (crd_mode == 1 ? 0 : 1);
DBUG_ENTER("spider_mbase_handler::show_index"); DBUG_ENTER("spider_mbase_handler::show_index");
DBUG_PRINT("info",("spider crd_mode=%d", crd_mode)); DBUG_PRINT("info",("spider crd_mode=%d", crd_mode));
spider_setup_for_query(spider, conn, link_idx); spider_conn_before_query(spider, conn, link_idx);
spider_conn_set_timeout_from_share(conn, link_idx, spider_conn_set_timeout_from_share(conn, link_idx,
spider->wide_handler->trx->thd, share); spider->wide_handler->trx->thd, share);
if ((error_num = spider_db_set_names(spider, conn, link_idx)) || if ((error_num = spider_db_set_names(spider, conn, link_idx)) ||
...@@ -13762,15 +13733,15 @@ int spider_mbase_handler::show_index( ...@@ -13762,15 +13733,15 @@ int spider_mbase_handler::show_index(
{ {
/* retry */ /* retry */
if ((error_num = spider_db_ping(spider, conn, link_idx))) if ((error_num = spider_db_ping(spider, conn, link_idx)))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
if ((error_num = spider_db_set_names(spider, conn, link_idx))) if ((error_num = spider_db_set_names(spider, conn, link_idx)))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
spider_conn_set_timeout_from_share(conn, link_idx, spider_conn_set_timeout_from_share(conn, link_idx,
spider->wide_handler->trx->thd, spider->wide_handler->trx->thd,
share); share);
if ((error_num = if ((error_num =
spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx]))) spider_set_lock_wait_timeout(1, conn, &spider->need_mons[link_idx])))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
if (spider_db_query( if (spider_db_query(
conn, conn,
mysql_share->show_index[pos].ptr(), mysql_share->show_index[pos].ptr(),
...@@ -13778,11 +13749,11 @@ int spider_mbase_handler::show_index( ...@@ -13778,11 +13749,11 @@ int spider_mbase_handler::show_index(
-1, -1,
&spider->need_mons[link_idx])) &spider->need_mons[link_idx]))
{ {
spider_teardown_after_query(conn, 0, false); spider_conn_after_query(conn, 0, false);
DBUG_RETURN(spider_db_errorno(conn)); DBUG_RETURN(spider_db_errorno(conn));
} }
} else } else
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
} }
st_spider_db_request_key request_key = { st_spider_db_request_key request_key = {
spider->wide_handler->trx->spider_thread_id, spider->wide_handler->trx->spider_thread_id,
...@@ -13790,8 +13761,8 @@ int spider_mbase_handler::show_index( ...@@ -13790,8 +13761,8 @@ int spider_mbase_handler::show_index(
/* no record is ok */ /* no record is ok */
if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num)) && if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num)) &&
(error_num || (error_num = spider_db_errorno(conn)))) (error_num || (error_num = spider_db_errorno(conn))))
DBUG_RETURN(spider_teardown_after_query(conn, error_num, true)); DBUG_RETURN(spider_conn_after_query(conn, error_num, true));
spider_teardown_after_query(conn, 0, true); spider_conn_after_query(conn, 0, true);
if (res) if (res)
error_num = res->fetch_table_cardinality( error_num = res->fetch_table_cardinality(
crd_mode, table, share->cardinality, share->cardinality_upd, crd_mode, table, share->cardinality, share->cardinality_upd,
......
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