diff --git a/storage/tianchi/ha_tse.cc b/storage/tianchi/ha_tse.cc index 59b211e097be1981f6fa3e2852958a240b9a6943..cb5fcd22a624cacc14da29b6155aa0a2d1d62b91 100644 --- a/storage/tianchi/ha_tse.cc +++ b/storage/tianchi/ha_tse.cc @@ -1621,7 +1621,7 @@ static int tse_commit(handlerton *hton, THD *thd, bool commit_trx) { thd_sess_ctx_s *sess_ctx = (thd_sess_ctx_s *)thd_get_ha_data(thd, hton); assert(sess_ctx != nullptr); - if (will_commit && (sess_ctx->is_tse_trx_begin || is_ddl_sql_cmd(thd->lex->sql_command))) { + if (will_commit) { commit_preprocess(thd, &tch); attachable_trx_update_pre_addr(tse_hton, thd, &tch, true); @@ -1691,7 +1691,7 @@ static int tse_rollback(handlerton *hton, THD *thd, bool rollback_trx) { thd_sess_ctx_s *sess_ctx = (thd_sess_ctx_s *)thd_get_ha_data(thd, hton); assert(sess_ctx != nullptr); - if (will_rollback && (sess_ctx->is_tse_trx_begin || is_ddl_sql_cmd(thd->lex->sql_command))) { + if (will_rollback) { int32_t total_csize = sess_ctx->cursors_map->size(); if (sess_ctx->invalid_cursors != nullptr) { total_csize += sess_ctx->invalid_cursors->size(); @@ -1748,16 +1748,7 @@ static int tse_close_connect(handlerton *hton, THD *thd) { local_tch.thd_id = tch.thd_id; local_tch.is_broadcast = tch.is_broadcast; - assert(sess_ctx != nullptr); - int32 total_csize = sess_ctx->cursors_map->size(); - if (sess_ctx->invalid_cursors != nullptr) { - total_csize += sess_ctx->invalid_cursors->size(); - } - uint64_t *cursors = (uint64_t *)tse_alloc_buf(&tch, sizeof(uint64_t) * total_csize); - assert((total_csize == 0) ^ (cursors != nullptr)); - ctc_copy_cursors_to_free(sess_ctx, cursors, 0); - int ret = tse_close_session(&local_tch, cursors, total_csize); - tse_free_buf(&tch, (uint8_t *)cursors); + int ret = tse_close_session(&local_tch); release_sess_ctx(sess_ctx, hton, thd); return convert_tse_error_code_to_mysql((ct_errno_t)ret); } @@ -4125,21 +4116,25 @@ int ha_tse::start_stmt(THD *thd, thr_lock_type) { return 0; } + uint32_t lock_wait_timeout = THDVAR(thd, lock_wait_timeout); uint32_t autocommit = !thd->in_multi_stmt_transaction_mode(); - if (!(m_select_lock != lock_mode::EXCLUSIVE_LOCK && tse_command_type_read(thd->query_plan.get_command()))) { - uint32_t lock_wait_timeout = THDVAR(thd, lock_wait_timeout); - int isolation_level = isolation_level_to_cantian(thd_get_trx_isolation(thd)); - tianchi_trx_context_t trx_context = {isolation_level, autocommit, lock_wait_timeout, m_select_lock == lock_mode::EXCLUSIVE_LOCK}; - bool is_mysql_local = user_var_set(thd, "ctc_ddl_local_enabled"); - ct_errno_t ret = (ct_errno_t)tse_trx_begin(&m_tch, trx_context, is_mysql_local); - check_error_code_to_mysql(ha_thd(), &ret); - update_sess_ctx_by_tch(m_tch, tse_hton, thd); - if (ret != CT_SUCCESS) { - tse_log_error("start trx failed with error code: %d", ret); - return convert_tse_error_code_to_mysql(ret); - } - sess_ctx->is_tse_trx_begin = 1; + int isolation_level = isolation_level_to_cantian(thd_get_trx_isolation(thd)); + + tianchi_trx_context_t trx_context = {isolation_level, autocommit, lock_wait_timeout, m_select_lock == lock_mode::EXCLUSIVE_LOCK}; + + bool is_mysql_local = user_var_set(thd, "ctc_ddl_local_enabled"); + ct_errno_t ret = (ct_errno_t)tse_trx_begin(&m_tch, trx_context, is_mysql_local); + + check_error_code_to_mysql(ha_thd(), &ret); + + update_sess_ctx_by_tch(m_tch, tse_hton, thd); + + if (ret != CT_SUCCESS) { + tse_log_error("start trx failed with error code: %d", ret); + return convert_tse_error_code_to_mysql(ret); } + + sess_ctx->is_tse_trx_begin = 1; if (!autocommit) { trans_register_ha(thd, true, ht, nullptr); } diff --git a/storage/tianchi/srv_mq_msg.h b/storage/tianchi/srv_mq_msg.h index a405187422c1305f13df7a2488b2236389150565..95d5e0e92769597140ddf226d103c32373001d58 100644 --- a/storage/tianchi/srv_mq_msg.h +++ b/storage/tianchi/srv_mq_msg.h @@ -46,8 +46,6 @@ struct register_instance_request { struct close_session_request { tianchi_handler_t tch; int result; - int32_t csize; - uint64_t *cursors; }; struct open_table_request { diff --git a/storage/tianchi/tse_srv.h b/storage/tianchi/tse_srv.h index 4657030795c06ddbcb386d7a1957411b01fd946a..eb8ec85f0ab43a2427a9314922503851a188a7c1 100644 --- a/storage/tianchi/tse_srv.h +++ b/storage/tianchi/tse_srv.h @@ -515,7 +515,7 @@ int tse_release_inst_id(uint32_t inst_id); int tse_open_table(tianchi_handler_t *tch, const char *table_name, const char *user_name); int tse_close_table(tianchi_handler_t *tch); -int tse_close_session(tianchi_handler_t *tch, uint64_t *cursors, int32_t csize); +int tse_close_session(tianchi_handler_t *tch); void tse_kill_session(tianchi_handler_t *tch); uint8_t *tse_alloc_buf(tianchi_handler_t *tch, uint32_t buf_size); diff --git a/storage/tianchi/tse_srv_mq_stub.cc b/storage/tianchi/tse_srv_mq_stub.cc index 7f93844f0f493bd4cab1159b6314a09a9da3967e..56a3bb44e8858c1c343a4a44349ed1f2158a4c84 100644 --- a/storage/tianchi/tse_srv_mq_stub.cc +++ b/storage/tianchi/tse_srv_mq_stub.cc @@ -70,7 +70,7 @@ int tse_open_table(tianchi_handler_t *tch, const char *table_name, const char *u return result; } -int tse_close_session(tianchi_handler_t *tch, uint64_t *cursors, int32_t csize) { +int tse_close_session(tianchi_handler_t *tch) { tse_log_note("close session"); void *shm_inst = get_one_shm_inst(tch); close_session_request *req = (close_session_request*)alloc_share_mem(shm_inst, sizeof(close_session_request)); @@ -79,8 +79,7 @@ int tse_close_session(tianchi_handler_t *tch, uint64_t *cursors, int32_t csize) return ERR_ALLOC_MEMORY; } req->tch = *tch; - req->csize = csize; - req->cursors = cursors; + int result = ERR_CONNECTION_FAILED; int ret = tse_mq_deal_func(shm_inst, TSE_FUNC_TYPE_CLOSE_SESSION, req, tch->msg_buf); *tch = req->tch; diff --git a/storage/tianchi/tse_util.cc b/storage/tianchi/tse_util.cc index 6733a03d266ecc62165ee07e2eb8b1982a0df6a8..2c1eb38e1433b0b83cc91150038aa65e3e0d6980 100644 --- a/storage/tianchi/tse_util.cc +++ b/storage/tianchi/tse_util.cc @@ -707,34 +707,4 @@ int tse_check_unlock_instance(MYSQL_THD thd) { tse_unlock_instance(&is_mysqld_starting, &tch); tse_log_system("[TSE_UNLOCK_INSTANCE]: SUCCESS. tse_inst:%u, conn_id:%u", tch.inst_id, tch.thd_id); return 0; -} - -bool tse_command_type_read(enum_sql_command cmd) { - switch (cmd) { - case SQLCOM_SELECT: - case SQLCOM_CHECK: - case SQLCOM_SHOW_DATABASES: - case SQLCOM_SHOW_TABLES: - case SQLCOM_SHOW_FIELDS: - case SQLCOM_SHOW_KEYS: - case SQLCOM_SHOW_VARIABLES: - case SQLCOM_SHOW_STATUS: - case SQLCOM_SHOW_CREATE: - case SQLCOM_SHOW_CHARSETS: - case SQLCOM_SHOW_COLLATIONS: - case SQLCOM_SHOW_CREATE_DB: - case SQLCOM_SHOW_TABLE_STATUS: - case SQLCOM_SHOW_TRIGGERS: - case SQLCOM_SHOW_CREATE_PROC: - case SQLCOM_SHOW_CREATE_FUNC: - case SQLCOM_SHOW_STATUS_PROC: - case SQLCOM_SHOW_STATUS_FUNC: - case SQLCOM_SHOW_CREATE_EVENT: - case SQLCOM_SHOW_EVENTS: - case SQLCOM_SHOW_CREATE_TRIGGER: - case SQLCOM_SHOW_CREATE_USER: - return CT_TRUE; - default: - return CT_FALSE; - } } \ No newline at end of file diff --git a/storage/tianchi/tse_util.h b/storage/tianchi/tse_util.h index e3e1d00859d84fe486ab95def9b85b9b52b1b2a9..3cad7f24e1ba35b9b7e59abdc7b58c0dfde72745 100644 --- a/storage/tianchi/tse_util.h +++ b/storage/tianchi/tse_util.h @@ -36,7 +36,6 @@ static unordered_set mysql_system_db{"information_schema", "mysql", "per #define TSE_GET_THD_DB_NAME(thd) (thd->db().str == NULL) ? nullptr : const_cast(thd->db().str) -bool tse_command_type_read(enum_sql_command cmd); void tse_split_normalized_name(const char *file_name, char db[], size_t db_buf_len, char name[], size_t name_buf_len, bool *is_tmp_table); void tse_copy_name(char to_name[], const char from_name[], size_t to_buf_len);