CUBRID Engine
latest
|
#include "shard_parser.h"
#include "broker_config.h"
#include "shard_proxy_queue.h"
#include "cas_protocol.h"
Go to the source code of this file.
Classes | |
struct | t_shard_stmt |
struct | t_shard_stmt_global |
Macros | |
#define | SHARD_STMT_INVALID_HANDLE_ID (-1) |
#define | SHARD_STMT_MAX_NUM_ALLOC (8192) |
Typedefs | |
typedef struct t_shard_stmt | T_SHARD_STMT |
typedef struct t_shard_stmt_global | T_SHARD_STMT_GLOBAL |
Enumerations | |
enum | { SHARD_STMT_STATUS_UNUSED = 0, SHARD_STMT_STATUS_IN_PROGRESS = 1, SHARD_STMT_STATUS_COMPLETE = 2, SHARD_STMT_STATUS_INVALID = 3 } |
enum | { SHARD_STMT_TYPE_PREPARED = 0, SHARD_STMT_TYPE_SCHEMA_INFO = 1, SHARD_STMT_TYPE_EXCLUSIVE = 2 } |
Functions | |
T_SHARD_STMT * | shard_stmt_find_by_sql (char *sql_stmt, const char *db_user, T_BROKER_VERSION client_version) |
T_SHARD_STMT * | shard_stmt_find_by_stmt_h_id (int stmt_h_id) |
int | shard_stmt_pin (T_SHARD_STMT *stmt_p) |
int | shard_stmt_unpin (T_SHARD_STMT *stmt_p) |
void | shard_stmt_check_waiter_and_wakeup (T_SHARD_STMT *stmt_p) |
T_SHARD_STMT * | shard_stmt_new_prepared_stmt (char *sql_stmt, int ctx_cid, unsigned int ctx_uid, T_BROKER_VERSION client_version) |
T_SHARD_STMT * | shard_stmt_new_schema_info (int ctx_cid, unsigned int ctx_uid) |
T_SHARD_STMT * | shard_stmt_new_exclusive (char *sql_stmt, int ctx_cid, unsigned int ctx_uid, T_BROKER_VERSION client_version) |
void | shard_stmt_free (T_SHARD_STMT *stmt_p) |
void | shard_stmt_destroy (void) |
int | shard_stmt_find_srv_h_id_for_shard_cas (int stmt_h_id, int shard_id, int cas_id) |
int | shard_stmt_add_srv_h_id_for_shard_cas (int stmt_h_id, int shard_id, int cas_id, int srv_h_id) |
void | shard_stmt_del_srv_h_id_for_shard_cas (int stmt_h_id, int shard_id, int cas_id) |
void | shard_stmt_del_all_srv_h_id_for_shard_cas (int shard_id, int cas_id) |
int | shard_stmt_set_hint_list (T_SHARD_STMT *stmt_p) |
int | shard_stmt_get_hint_type (T_SHARD_STMT *stmt_p) |
int | shard_stmt_save_prepare_request (T_SHARD_STMT *stmt_p, bool has_shard_val_hint, char **prepare_req, int *prepare_req_len, char *argv_sql_stmt, char *argv_remainder, char *orgzd_sql) |
char * | shard_str_stmt (T_SHARD_STMT *stmt_p) |
int | shard_stmt_initialize (int initial_size) |
char * | shard_stmt_rewrite_sql (bool *has_shard_val_hint, char *sql_stmt, char appl_server) |
void | shard_statement_wait_timer (void) |
void | shard_stmt_set_status_invalid (int stmt_h_id) |
void | shard_stmt_set_status_complete (int stmt_h_id) |
#define SHARD_STMT_INVALID_HANDLE_ID (-1) |
Definition at line 35 of file shard_statement.h.
Referenced by fn_proxy_cas_prepare_and_execute(), proxy_cas_execute_internal(), proxy_context_clear(), proxy_context_timeout(), proxy_handler_process_cas_response(), shard_stmt_del_all_srv_h_id_for_shard_cas(), shard_stmt_del_srv_h_id_for_shard_cas(), shard_stmt_destroy(), shard_stmt_find_srv_h_id_for_shard_cas(), shard_stmt_free(), shard_stmt_initialize(), and shard_stmt_new_internal().
#define SHARD_STMT_MAX_NUM_ALLOC (8192) |
Definition at line 36 of file shard_statement.h.
typedef struct t_shard_stmt T_SHARD_STMT |
Definition at line 53 of file shard_statement.h.
typedef struct t_shard_stmt_global T_SHARD_STMT_GLOBAL |
Definition at line 87 of file shard_statement.h.
anonymous enum |
Enumerator | |
---|---|
SHARD_STMT_STATUS_UNUSED | |
SHARD_STMT_STATUS_IN_PROGRESS | |
SHARD_STMT_STATUS_COMPLETE | |
SHARD_STMT_STATUS_INVALID |
Definition at line 38 of file shard_statement.h.
anonymous enum |
Enumerator | |
---|---|
SHARD_STMT_TYPE_PREPARED | |
SHARD_STMT_TYPE_SCHEMA_INFO | |
SHARD_STMT_TYPE_EXCLUSIVE |
Definition at line 46 of file shard_statement.h.
void shard_statement_wait_timer | ( | void | ) |
Definition at line 1404 of file shard_statement.c.
References i, t_shard_stmt_global::max_num_stmt, NULL, proxy_waiter_timeout(), SHARD_STMT_STATUS_UNUSED, t_shard_stmt::status, t_shard_stmt_global::stmt_ent, t_proxy_info::stmt_waiter_count, and t_shard_stmt::waitq.
Referenced by proxy_timer_process().
int shard_stmt_add_srv_h_id_for_shard_cas | ( | int | stmt_h_id, |
int | shard_id, | ||
int | cas_id, | ||
int | srv_h_id | ||
) |
Definition at line 715 of file shard_statement.c.
References error(), NULL, PROXY_DEBUG_LOG, PROXY_LOG, PROXY_LOG_MODE_ERROR, shard_stmt_check_waiter_and_wakeup(), shard_stmt_find_by_stmt_h_id(), shard_stmt_set_srv_h_id(), shard_stmt_set_status_complete(), SHARD_STMT_STATUS_IN_PROGRESS, shard_str_stmt(), and t_shard_stmt::status.
Referenced by fn_proxy_cas_prepare(), fn_proxy_cas_prepare_and_execute(), and fn_proxy_cas_schema_info().
void shard_stmt_check_waiter_and_wakeup | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 368 of file shard_statement.c.
References assert, t_shard_stmt::ctx_cid, t_wait_context::ctx_cid, t_shard_stmt::ctx_uid, t_wait_context::ctx_uid, ENTER_FUNC, error(), EXIT_FUNC, FREE_MEM, NULL, PROXY_DEBUG_LOG, PROXY_INVALID_CONTEXT, PROXY_LOG, PROXY_LOG_MODE_ERROR, proxy_wakeup_context_by_statement(), shard_queue_dequeue(), SHARD_STMT_TYPE_PREPARED, shard_str_stmt(), t_shard_stmt::stmt_type, t_proxy_info::stmt_waiter_count, and t_shard_stmt::waitq.
Referenced by fn_proxy_cas_prepare(), fn_proxy_cas_schema_info(), fn_proxy_client_prepare(), fn_proxy_client_prepare_and_execute(), proxy_context_clear(), proxy_context_timeout(), and shard_stmt_add_srv_h_id_for_shard_cas().
void shard_stmt_del_all_srv_h_id_for_shard_cas | ( | int | shard_id, |
int | cas_id | ||
) |
Definition at line 777 of file shard_statement.c.
References ENTER_FUNC, EXIT_FUNC, i, t_shard_stmt_global::max_num_stmt, NULL, SHARD_STMT_INVALID_HANDLE_ID, shard_stmt_pos_srv_h_id(), SHARD_STMT_STATUS_UNUSED, t_shard_stmt::status, and t_shard_stmt_global::stmt_ent.
Referenced by proxy_cas_io_free(), proxy_cas_io_free_by_ctx(), and proxy_set_conn_info().
void shard_stmt_del_srv_h_id_for_shard_cas | ( | int | stmt_h_id, |
int | shard_id, | ||
int | cas_id | ||
) |
Definition at line 752 of file shard_statement.c.
References ENTER_FUNC, EXIT_FUNC, NULL, PROXY_LOG, PROXY_LOG_MODE_ERROR, shard_stmt_find_by_stmt_h_id(), SHARD_STMT_INVALID_HANDLE_ID, and shard_stmt_pos_srv_h_id().
Referenced by fn_proxy_client_close_req_handle(), and proxy_cas_execute_internal().
void shard_stmt_destroy | ( | void | ) |
Definition at line 557 of file shard_statement.c.
References t_shard_stmt::ctx_cid, t_shard_stmt::ctx_uid, FREE_MEM, i, t_shard_stmt_global::lru, t_shard_stmt::lru_next, t_shard_stmt::lru_prev, t_shard_stmt_global::max_num_shard, t_shard_stmt_global::max_num_stmt, mht_destroy(), NULL, t_shard_stmt_global::num_cas_per_shard, t_shard_stmt::num_pinned, t_shard_stmt::parser, PROXY_DEBUG_LOG, PROXY_INVALID_CONTEXT, t_shard_stmt::reply_buffer, t_shard_stmt::reply_buffer_length, t_shard_stmt::request_buffer, t_shard_stmt::request_buffer_length, shard_queue_destroy(), SHARD_STMT_INVALID_HANDLE_ID, shard_stmt_lru_delete(), SHARD_STMT_STATUS_UNUSED, shard_str_stmt(), sp_destroy_parser(), t_shard_stmt::srv_h_id_ent, t_shard_stmt::status, t_shard_stmt_global::stmt_ent, t_shard_stmt::stmt_h_id, t_shard_stmt_global::stmt_map, and t_shard_stmt::waitq.
Referenced by proxy_term().
T_SHARD_STMT* shard_stmt_find_by_sql | ( | char * | sql_stmt, |
const char * | db_user, | ||
T_BROKER_VERSION | client_version | ||
) |
Definition at line 222 of file shard_statement.c.
References t_proxy_info::appl_server, APPL_SERVER_CAS_MYSQL, assert, t_shard_stmt::client_version, t_shard_stmt::database_user, t_shard_stmt::hash_next, mht_get(), NULL, t_shard_stmt::parser, shard_stmt_make_protocol_version(), SHARD_STMT_STATUS_INVALID, SHARD_STMT_STATUS_UNUSED, SHARD_STMT_TYPE_PREPARED, sp_get_sql_stmt(), t_shard_stmt::status, t_shard_stmt_global::stmt_map, and t_shard_stmt::stmt_type.
Referenced by fn_proxy_client_prepare(), and shard_stmt_new_internal().
T_SHARD_STMT* shard_stmt_find_by_stmt_h_id | ( | int | stmt_h_id | ) |
Definition at line 272 of file shard_statement.c.
References t_shard_stmt_global::max_num_stmt, NULL, SHARD_STMT_STATUS_UNUSED, t_shard_stmt::status, t_shard_stmt_global::stmt_ent, and t_shard_stmt::stmt_h_id.
Referenced by proxy_client_execute_internal(), proxy_context_free_stmt(), shard_stmt_add_srv_h_id_for_shard_cas(), shard_stmt_del_srv_h_id_for_shard_cas(), shard_stmt_find_srv_h_id_for_shard_cas(), and shard_stmt_set_status().
int shard_stmt_find_srv_h_id_for_shard_cas | ( | int | stmt_h_id, |
int | shard_id, | ||
int | cas_id | ||
) |
Definition at line 686 of file shard_statement.c.
References NULL, PROXY_LOG, PROXY_LOG_MODE_ERROR, PROXY_LOG_MODE_SHARD_DETAIL, shard_stmt_find_by_stmt_h_id(), shard_stmt_find_srv_h_id(), SHARD_STMT_INVALID_HANDLE_ID, and shard_str_stmt().
Referenced by fn_proxy_client_close_req_handle(), fn_proxy_client_cursor(), fn_proxy_client_cursor_close(), fn_proxy_client_fetch(), proxy_client_execute_internal(), and proxy_send_request_to_cas_with_new_event().
void shard_stmt_free | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 618 of file shard_statement.c.
References assert, t_shard_stmt::client_version, t_shard_stmt::ctx_cid, t_shard_stmt::ctx_uid, t_shard_stmt::database_user, ENTER_FUNC, EXIT_FUNC, FREE_MEM, t_shard_stmt::hash_next, t_shard_stmt::hash_prev, i, t_shard_stmt_global::lru, t_shard_stmt::lru_next, t_shard_stmt::lru_prev, t_shard_stmt_global::max_num_shard, NULL, t_shard_stmt_global::num_cas_per_shard, t_shard_stmt::num_pinned, t_shard_stmt::parser, PROXY_DEBUG_LOG, PROXY_INVALID_CONTEXT, t_shard_stmt::reply_buffer, t_shard_stmt::reply_buffer_length, t_shard_stmt::request_buffer, t_shard_stmt::request_buffer_length, shard_queue_destroy(), shard_stmt_del_statement_from_map(), SHARD_STMT_INVALID_HANDLE_ID, shard_stmt_lru_delete(), SHARD_STMT_STATUS_UNUSED, SHARD_STMT_TYPE_PREPARED, shard_str_stmt(), sp_destroy_parser(), t_shard_stmt::srv_h_id_ent, t_shard_stmt::status, t_shard_stmt::stmt_h_id, t_shard_stmt::stmt_type, and t_shard_stmt::waitq.
Referenced by fn_proxy_cas_prepare(), fn_proxy_cas_prepare_and_execute(), fn_proxy_cas_schema_info(), fn_proxy_client_prepare(), fn_proxy_client_prepare_and_execute(), fn_proxy_client_schema_info(), proxy_context_clear(), proxy_context_free_stmt(), proxy_context_timeout(), and shard_stmt_new_internal().
int shard_stmt_get_hint_type | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 854 of file shard_statement.c.
References assert, sp_parser_hint::hint_type, HT_INVAL, HT_NONE, NULL, t_shard_stmt::parser, PROXY_LOG, PROXY_LOG_MODE_ERROR, SHARD_STMT_TYPE_PREPARED, SHARD_STMT_TYPE_SCHEMA_INFO, sp_get_first_hint(), and t_shard_stmt::stmt_type.
Referenced by fn_proxy_client_prepare_and_execute(), and proxy_client_execute_internal().
int shard_stmt_initialize | ( | int | initial_size | ) |
Definition at line 1051 of file shard_statement.c.
References t_shard_stmt::client_version, t_shard_stmt::ctx_cid, t_shard_stmt::ctx_uid, t_shard_stmt::database_user, i, t_shard_stmt::index, t_shard_stmt_global::lru, t_shard_info::max_appl_server, t_shard_stmt_global::max_num_shard, t_shard_stmt_global::max_num_stmt, t_proxy_info::max_shard, mht_1strhash(), mht_compare_strings_are_equal(), mht_create(), t_shard_stmt_global::mru, NULL, t_shard_stmt_global::num_cas_per_shard, PROXY_INVALID_CONTEXT, PROXY_LOG, PROXY_LOG_MODE_ERROR, shard_shm_find_shard_info(), SHARD_STMT_INVALID_HANDLE_ID, shard_Stmt_max_num_alloc, t_shard_stmt::srv_h_id_ent, t_shard_stmt_global::stmt_ent, and t_shard_stmt_global::stmt_map.
Referenced by main().
T_SHARD_STMT* shard_stmt_new_exclusive | ( | char * | sql_stmt, |
int | ctx_cid, | ||
unsigned int | ctx_uid, | ||
T_BROKER_VERSION | client_version | ||
) |
Definition at line 548 of file shard_statement.c.
References NULL, shard_stmt_new_internal(), and SHARD_STMT_TYPE_EXCLUSIVE.
Referenced by fn_proxy_client_prepare(), and fn_proxy_client_prepare_and_execute().
T_SHARD_STMT* shard_stmt_new_prepared_stmt | ( | char * | sql_stmt, |
int | ctx_cid, | ||
unsigned int | ctx_uid, | ||
T_BROKER_VERSION | client_version | ||
) |
Definition at line 530 of file shard_statement.c.
References NULL, shard_stmt_new_internal(), and SHARD_STMT_TYPE_PREPARED.
Referenced by fn_proxy_client_prepare().
T_SHARD_STMT* shard_stmt_new_schema_info | ( | int | ctx_cid, |
unsigned int | ctx_uid | ||
) |
Definition at line 539 of file shard_statement.c.
References NULL, shard_stmt_new_internal(), and SHARD_STMT_TYPE_SCHEMA_INFO.
Referenced by fn_proxy_client_schema_info().
int shard_stmt_pin | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 309 of file shard_statement.c.
References assert, error(), t_shard_stmt_global::lru, t_shard_stmt::lru_next, t_shard_stmt::lru_prev, t_shard_stmt::num_pinned, PROXY_DEBUG_LOG, PROXY_LOG, PROXY_LOG_MODE_ERROR, shard_stmt_lru_delete(), SHARD_STMT_STATUS_UNUSED, shard_str_stmt(), and t_shard_stmt::status.
Referenced by proxy_context_add_stmt().
char* shard_stmt_rewrite_sql | ( | bool * | has_shard_val_hint, |
char * | sql_stmt, | ||
char | appl_server | ||
) |
The 'shard_val(n)' is changed to 'shard_id(N)'. a minimum number of chipers of n is 1; a maximum number of chipers of N is 3; so length of organized sql can be larger than length of original sql.
Definition at line 1133 of file shard_statement.c.
References error(), HT_NONE, HT_VAL, NO_ERROR, NULL, p, shard_stmt_change_shard_val_to_id(), shard_stmt_write_buf_to_sql(), sp_get_hint_type(), sp_get_token_type(), sp_is_exist_pair_token(), sp_is_pair_token(), strlen, TT_CPP_COMMENT, TT_CSQL_COMMENT, TT_DOUBLE_QUOTED, TT_HINT, TT_NEWLINE, TT_NONE, TT_SINGLE_QUOTED, and TT_WHITESPACE.
Referenced by fn_proxy_client_prepare().
int shard_stmt_save_prepare_request | ( | T_SHARD_STMT * | stmt_p, |
bool | has_shard_val_hint, | ||
char ** | prepare_req, | ||
int * | prepare_req_len, | ||
char * | argv_sql_stmt, | ||
char * | argv_remainder, | ||
char * | orgzd_sql | ||
) |
Definition at line 888 of file shard_statement.c.
References assert, FREE_MEM, get_msg_length(), htonl(), i, t_shard_stmt::index, t_shard_stmt::lru_next, t_shard_stmt::lru_prev, t_shard_stmt_global::max_num_shard, t_shard_stmt_global::max_num_stmt, MSG_HEADER_SIZE, net_arg_get_str(), NET_SIZE_INT, NULL, t_shard_stmt::num_alloc, t_shard_stmt_global::num_cas_per_shard, t_shard_stmt::num_pinned, proxy_dup_msg(), PROXY_LOG, PROXY_LOG_MODE_ERROR, t_shard_stmt::request_buffer, t_shard_stmt::request_buffer_length, set_data_length(), t_shard_stmt::status, t_shard_stmt_global::stmt_ent, t_shard_stmt::stmt_h_id, and strlen.
Referenced by fn_proxy_client_prepare().
int shard_stmt_set_hint_list | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 806 of file shard_statement.c.
References assert, sp_parser_hint::hint_type, HT_ID, HT_KEY, HT_NONE, NULL, t_shard_stmt::parser, PROXY_LOG, PROXY_LOG_MODE_ERROR, SHARD_STMT_TYPE_PREPARED, SHARD_STMT_TYPE_SCHEMA_INFO, shard_str_stmt(), sp_get_first_hint(), sp_get_next_hint(), sp_parse_sql(), and t_shard_stmt::stmt_type.
Referenced by fn_proxy_client_prepare(), and fn_proxy_client_prepare_and_execute().
void shard_stmt_set_status_complete | ( | int | stmt_h_id | ) |
Definition at line 1432 of file shard_statement.c.
References shard_stmt_set_status(), and SHARD_STMT_STATUS_COMPLETE.
Referenced by shard_stmt_add_srv_h_id_for_shard_cas().
void shard_stmt_set_status_invalid | ( | int | stmt_h_id | ) |
Definition at line 1426 of file shard_statement.c.
References shard_stmt_set_status(), and SHARD_STMT_STATUS_INVALID.
Referenced by fn_proxy_cas_prepare(), and proxy_cas_execute_internal().
int shard_stmt_unpin | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 338 of file shard_statement.c.
References assert, error(), t_shard_stmt::num_pinned, PROXY_LOG, PROXY_LOG_MODE_ERROR, shard_stmt_lru_insert(), SHARD_STMT_STATUS_UNUSED, shard_str_stmt(), and t_shard_stmt::status.
Referenced by proxy_context_free_stmt().
char* shard_str_stmt | ( | T_SHARD_STMT * | stmt_p | ) |
Definition at line 1030 of file shard_statement.c.
References t_shard_stmt::ctx_cid, t_shard_stmt::ctx_uid, t_shard_stmt::database_user, t_shard_stmt::hash_next, t_shard_stmt::hash_prev, t_shard_stmt::index, t_shard_stmt::lru_next, t_shard_stmt::lru_prev, NULL, t_shard_stmt::num_alloc, t_shard_stmt::num_pinned, t_shard_stmt::parser, shard_str_sqls(), sp_parser_ctx::sql_stmt, t_shard_stmt::status, t_shard_stmt::stmt_h_id, and t_shard_stmt::stmt_type.
Referenced by fn_proxy_cas_prepare(), fn_proxy_cas_prepare_and_execute(), fn_proxy_cas_schema_info(), fn_proxy_client_prepare(), fn_proxy_client_prepare_and_execute(), fn_proxy_client_schema_info(), proxy_client_execute_internal(), proxy_context_add_stmt(), proxy_context_free_stmt(), shard_stmt_add_srv_h_id_for_shard_cas(), shard_stmt_check_waiter_and_wakeup(), shard_stmt_destroy(), shard_stmt_find_srv_h_id_for_shard_cas(), shard_stmt_free(), shard_stmt_lru_delete(), shard_stmt_lru_insert(), shard_stmt_new_internal(), shard_stmt_pin(), shard_stmt_pos_srv_h_id(), shard_stmt_put_statement_to_map(), shard_stmt_set_hint_list(), and shard_stmt_unpin().