CUBRID Engine  latest
shard_proxy_function.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include "porting.h"
#include "shard_proxy.h"
#include "shard_proxy_handler.h"
#include "shard_proxy_function.h"
#include "shard_statement.h"
#include "shard_parser.h"
#include "shard_key_func.h"
#include "system_parameter.h"
#include "dbtype.h"
Include dependency graph for shard_proxy_function.c:

Go to the source code of this file.

Functions

int make_net_buf (T_NET_BUF *net_buf, int size)
 
int make_header_info (T_NET_BUF *net_buf, MSG_HEADER *client_msg_header)
 
static void proxy_set_wait_timeout (T_PROXY_CONTEXT *ctx_p, int query_timeout)
 
static int proxy_get_shard_id (T_SHARD_STMT *stmt_p, void **argv, T_SHARD_KEY_RANGE **range_p_out)
 
static T_SHARD_KEY_RANGEproxy_get_range_by_param (SP_PARSER_HINT *hint_p, void **argv)
 
static void proxy_update_shard_stats (T_SHARD_STMT *stmt_p, T_SHARD_KEY_RANGE *range_p)
 
static void proxy_update_shard_stats_without_hint (int shard_id)
 
static int proxy_client_execute_internal (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv, char _func_code, int query_timeout, int bind_value_index)
 
static int proxy_cas_execute_internal (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
static bool proxy_is_invalid_statement (int error_ind, int error_code, char *driver_info, T_BROKER_VERSION client_version)
 
static bool proxy_has_different_column_info (const char *r1, size_t r1_len, const char *r2, size_t r2_len)
 
int proxy_check_cas_error (char *read_msg)
 
int proxy_get_cas_error_code (char *read_msg, T_BROKER_VERSION client_version)
 
int proxy_send_request_to_cas (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int func_code)
 
static int proxy_send_request_to_cas_with_new_event (T_PROXY_CONTEXT *ctx_p, unsigned int type, int from, T_PROXY_EVENT_FUNC req_func)
 
int proxy_send_response_to_client (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int proxy_send_response_to_client_with_new_event (T_PROXY_CONTEXT *ctx_p, unsigned int type, int from, T_PROXY_EVENT_FUNC resp_func)
 
static int proxy_send_prepared_stmt_to_client (T_PROXY_CONTEXT *ctx_p, T_SHARD_STMT *stmt_p)
 
int fn_proxy_client_end_tran (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_prepare (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_execute (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_set_db_parameter (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_get_db_parameter (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_close_req_handle (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_cursor (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_fetch (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_schema_info (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_check_cas (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_con_close (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_get_db_version (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_cursor_close (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_execute_array (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_get_shard_info (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_prepare_and_execute (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_client_not_supported (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p, int argc, char **argv)
 
int fn_proxy_cas_end_tran (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_prepare (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_execute (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_execute_array (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_fetch (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_schema_info (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_prepare_and_execute (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_check_cas (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_cas_relay_only (T_PROXY_CONTEXT *ctx_p, T_PROXY_EVENT *event_p)
 
int fn_proxy_client_conn_error (T_PROXY_CONTEXT *ctx_p)
 
int fn_proxy_cas_conn_error (T_PROXY_CONTEXT *ctx_p)
 

Variables

T_SHM_SHARD_KEYshm_key_p
 
T_PROXY_INFOproxy_info_p
 
T_PROXY_HANDLER proxy_Handler
 
T_PROXY_CONTEXT proxy_Context
 

Function Documentation

int fn_proxy_cas_conn_error ( T_PROXY_CONTEXT ctx_p)

Definition at line 3912 of file shard_proxy_function.c.

int fn_proxy_cas_execute ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p 
)

Definition at line 3279 of file shard_proxy_function.c.

References proxy_cas_execute_internal().

int fn_proxy_cas_execute_array ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p 
)

Definition at line 3402 of file shard_proxy_function.c.

References proxy_cas_execute_internal().

int fn_proxy_client_execute_array ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p,
int  argc,
char **  argv 
)
int fn_proxy_client_not_supported ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p,
int  argc,
char **  argv 
)
int fn_proxy_client_prepare ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p,
int  argc,
char **  argv 
)

this statement has been used previously. if we use it, we will get the corrupted result of statement.

Definition at line 891 of file shard_proxy_function.c.

References t_proxy_info::appl_server, argc, assert, t_proxy_event::buffer, CAS_ER_ARGS, CAS_ER_INTERNAL, CAS_ERROR_INDICATOR, CAS_FC_PREPARE, t_cas_io::cas_id, t_proxy_context::cas_id, CAS_MAKE_PROTO_VER, t_proxy_context::cid, t_proxy_context::client_id, t_shard_stmt::ctx_cid, t_shard_stmt::ctx_uid, t_io_buffer::data, t_proxy_context::database_user, ENTER_FUNC, error(), EXIT_FUNC, FALSE, t_proxy_context::free_context, FREE_MEM, t_proxy_context::func_code, i, t_proxy_info::ignore_shard_hint, t_shard_stmt::index, t_proxy_context::is_client_in_tran, t_proxy_context::is_in_tran, t_proxy_context::is_prepare_for_execute, t_io_buffer::length, net_arg_get_char, net_arg_get_int(), net_arg_get_str(), NULL, t_proxy_info::num_request_stmt, t_proxy_info::num_request_stmt_in_pool, OFF, t_shard_stmt::parser, t_proxy_context::prepared_stmt, proxy_cas_alloc_by_ctx(), proxy_cas_io_write(), proxy_context_add_stmt(), proxy_context_find_stmt(), proxy_context_set_error(), proxy_context_set_in_tran(), PROXY_DEBUG_LOG, proxy_event_dup(), proxy_event_free(), proxy_get_driver_info_by_ctx(), proxy_get_shard_id(), PROXY_INVALID_SHARD, PROXY_LOG, PROXY_LOG_MODE_ERROR, proxy_send_prepared_stmt_to_client(), proxy_set_force_out_tran(), proxy_str_context(), proxy_waiter_comp_fn(), proxy_waiter_free(), proxy_waiter_new(), t_cas_io::shard_id, t_proxy_context::shard_id, shard_queue_ordered_enqueue(), shard_stmt_check_waiter_and_wakeup(), shard_stmt_find_by_sql(), shard_stmt_free(), shard_stmt_new_exclusive(), shard_stmt_new_prepared_stmt(), shard_stmt_rewrite_sql(), shard_stmt_save_prepare_request(), shard_stmt_set_hint_list(), SHARD_STMT_STATUS_COMPLETE, SHARD_STMT_STATUS_IN_PROGRESS, SHARD_STMT_TYPE_PREPARED, shard_str_sqls(), shard_str_stmt(), SHARD_TEMPORARY_UNAVAILABLE, sp_is_hint_static(), t_shard_stmt::status, t_shard_stmt::stmt_h_id, t_shard_stmt::stmt_type, t_proxy_info::stmt_waiter_count, t_proxy_context::uid, t_proxy_context::wait_timeout, t_proxy_context::waiting_dummy_prepare, t_proxy_context::waiting_event, and t_shard_stmt::waitq.

int fn_proxy_client_prepare_and_execute ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p,
int  argc,
char **  argv 
)

Definition at line 2616 of file shard_proxy_function.c.

References assert, t_proxy_event::buffer, CAS_ER_ARGS, CAS_ER_INTERNAL, CAS_ERROR_INDICATOR, CAS_FC_PREPARE_AND_EXECUTE, t_cas_io::cas_id, t_proxy_context::cas_id, CAS_MAKE_PROTO_VER, CAS_PROTO_MAKE_VER, t_proxy_context::cid, t_proxy_context::client_id, t_io_buffer::data, DOES_CLIENT_UNDERSTAND_THE_PROTOCOL, error(), EXIT_FUNC, FALSE, t_proxy_context::free_context, t_proxy_context::func_code, HT_EOF, HT_INVAL, i, t_proxy_info::ignore_shard_hint, t_proxy_context::is_client_in_tran, net_arg_get_char, net_arg_get_int(), net_arg_get_str(), NULL, OFF, t_proxy_context::prepared_stmt, PROTOCOL_V1, PROTOCOL_V2, proxy_cas_alloc_by_ctx(), proxy_cas_io_write(), proxy_context_add_stmt(), proxy_context_set_error(), proxy_context_set_in_tran(), PROXY_DEBUG_LOG, proxy_event_dup(), proxy_event_free(), proxy_get_driver_info_by_ctx(), proxy_get_shard_id(), PROXY_INVALID_SHARD, PROXY_LOG, PROXY_LOG_MODE_ERROR, proxy_set_wait_timeout(), proxy_str_context(), proxy_update_shard_stats(), proxy_update_shard_stats_without_hint(), query_timeout, t_cas_io::shard_id, t_proxy_context::shard_id, shard_stmt_check_waiter_and_wakeup(), shard_stmt_free(), shard_stmt_get_hint_type(), shard_stmt_new_exclusive(), shard_stmt_set_hint_list(), SHARD_STMT_TYPE_EXCLUSIVE, SHARD_STMT_TYPE_SCHEMA_INFO, shard_str_sqls(), shard_str_stmt(), SHARD_TEMPORARY_UNAVAILABLE, t_shard_stmt::stmt_h_id, t_proxy_context::stmt_h_id, t_proxy_context::stmt_hint_type, t_shard_stmt::stmt_type, t_proxy_context::uid, t_proxy_context::wait_timeout, and t_proxy_context::waiting_event.

int make_header_info ( T_NET_BUF net_buf,
MSG_HEADER client_msg_header 
)
int make_net_buf ( T_NET_BUF net_buf,
int  size 
)
int proxy_check_cas_error ( char *  read_msg)
static int proxy_client_execute_internal ( T_PROXY_CONTEXT ctx_p,
T_PROXY_EVENT event_p,
int  argc,
char **  argv,
char  _func_code,
int  query_timeout,
int  bind_value_index 
)
static

Definition at line 1335 of file shard_proxy_function.c.

References argc, assert, sp_parser_ctx::bind_count, t_proxy_event::buffer, CAS_ER_ARGS, CAS_ER_INTERNAL, CAS_ER_STMT_POOLING, CAS_ERROR_INDICATOR, CAS_FC_EXECUTE_ARRAY, CAS_FC_PREPARE, t_cas_io::cas_id, t_proxy_context::cas_id, t_proxy_context::cid, t_proxy_context::client_id, t_io_buffer::data, ENTER_FUNC, error(), EXIT_FUNC, t_proxy_context::free_context, FREE_MEM, t_proxy_context::func_code, get_msg_length(), HT_EOF, HT_NONE, i, t_proxy_info::ignore_shard_hint, t_proxy_context::is_prepare_for_execute, net_arg_get_int(), net_arg_put_int(), NULL, OFF, t_shard_stmt::parser, t_proxy_context::prepared_stmt, proxy_cas_alloc_by_ctx(), proxy_cas_io_write(), proxy_context_add_stmt(), proxy_context_set_error(), proxy_context_set_in_tran(), proxy_dup_msg(), proxy_event_dup(), proxy_event_free(), PROXY_EVENT_FROM_CAS, PROXY_EVENT_IO_WRITE, proxy_event_new(), proxy_event_set_buffer(), proxy_get_shard_id(), PROXY_INVALID_SHARD, PROXY_LOG, PROXY_LOG_MODE_ERROR, PROXY_LOG_MODE_SHARD_DETAIL, proxy_set_wait_timeout(), proxy_str_cas_io(), proxy_str_context(), proxy_unset_force_out_tran(), proxy_update_shard_stats(), proxy_update_shard_stats_without_hint(), t_shard_stmt::request_buffer, t_cas_io::shard_id, t_proxy_context::shard_id, shard_stmt_find_by_stmt_h_id(), shard_stmt_find_srv_h_id_for_shard_cas(), shard_stmt_get_hint_type(), SHARD_STMT_STATUS_COMPLETE, SHARD_STMT_STATUS_INVALID, shard_str_stmt(), SHARD_TEMPORARY_UNAVAILABLE, t_shard_stmt::status, t_proxy_context::stmt_h_id, t_proxy_context::stmt_hint_type, t_proxy_context::uid, t_proxy_context::wait_timeout, and t_proxy_context::waiting_event.

Referenced by fn_proxy_client_execute(), and fn_proxy_client_execute_array().

Here is the caller graph for this function:

int proxy_get_cas_error_code ( char *  read_msg,
T_BROKER_VERSION  client_version 
)
static bool proxy_has_different_column_info ( const char *  r1,
size_t  r1_len,
const char *  r2,
size_t  r2_len 
)
static

Definition at line 3938 of file shard_proxy_function.c.

References MSG_HEADER_SIZE, and NET_SIZE_INT.

Referenced by fn_proxy_cas_prepare().

Here is the caller graph for this function:

static bool proxy_is_invalid_statement ( int  error_ind,
int  error_code,
char *  driver_info,
T_BROKER_VERSION  client_version 
)
static

Definition at line 3919 of file shard_proxy_function.c.

References CAS_ER_STMT_POOLING, CAS_ERROR_INDICATOR, CAS_MAKE_VER, PROXY_CONV_ERR_TO_NEW, and proxy_convert_error_code().

Referenced by proxy_cas_execute_internal().

Here is the caller graph for this function:

void proxy_set_wait_timeout ( T_PROXY_CONTEXT ctx_p,
int  query_timeout 
)
static

Definition at line 65 of file shard_proxy_function.c.

References t_proxy_context::wait_timeout.

Referenced by fn_proxy_client_prepare_and_execute(), and proxy_client_execute_internal().

Here is the caller graph for this function:

static void proxy_update_shard_stats_without_hint ( int  shard_id)
static

Variable Documentation

T_PROXY_CONTEXT proxy_Context

Definition at line 55 of file shard_proxy_handler.c.

T_PROXY_HANDLER proxy_Handler

Definition at line 54 of file shard_proxy_handler.c.

T_PROXY_INFO* proxy_info_p

Definition at line 48 of file shard_proxy.c.

T_SHM_SHARD_KEY* shm_key_p

Definition at line 51 of file shard_proxy.c.