mariadb/storage/spider/spd_conn.h
Kentoku SHIBA 94861b83f4 prepare for adding new connectors for Spider
Conflicts:
	storage/spider/spd_conn.cc
2020-06-05 17:30:00 +09:00

422 lines
7.4 KiB
C

/* Copyright (C) 2008-2020 Kentoku Shiba
Copyright (C) 2019-2020 MariaDB corp
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#define SPIDER_LOCK_MODE_NO_LOCK 0
#define SPIDER_LOCK_MODE_SHARED 1
#define SPIDER_LOCK_MODE_EXCLUSIVE 2
#define SPIDER_SIMPLE_NO_ACTION 0
#define SPIDER_SIMPLE_CONNECT 1
#define SPIDER_SIMPLE_DISCONNECT 2
#define SPIDER_SIMPLE_RECORDS 3
#ifdef HA_HAS_CHECKSUM_EXTENDED
#define SPIDER_SIMPLE_CHECKSUM_TABLE 4
#endif
#define SPIDER_LOP_CHK_QUEUED (1 << 0)
#define SPIDER_LOP_CHK_MERAGED (1 << 1)
#define SPIDER_LOP_CHK_IGNORED (1 << 2)
typedef struct st_spider_conn_loop_check
{
uint flag;
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
my_hash_value_type hash_value_to;
my_hash_value_type hash_value_full;
#endif
LEX_CSTRING from_name;
LEX_CSTRING cur_name;
LEX_CSTRING to_name;
LEX_CSTRING full_name;
LEX_CSTRING from_value;
LEX_CSTRING merged_value;
st_spider_conn_loop_check *next;
} SPIDER_CONN_LOOP_CHECK;
uchar *spider_conn_get_key(
SPIDER_CONN *conn,
size_t *length,
my_bool not_used __attribute__ ((unused))
);
uchar *spider_ipport_conn_get_key(
SPIDER_IP_PORT_CONN *ip_port,
size_t *length,
my_bool not_used __attribute__ ((unused))
);
int spider_conn_init(
SPIDER_CONN *conn
);
void spider_conn_done(
SPIDER_CONN *conn
);
int spider_reset_conn_setted_parameter(
SPIDER_CONN *conn,
THD *thd
);
int spider_free_conn_alloc(
SPIDER_CONN *conn
);
void spider_free_conn_from_trx(
SPIDER_TRX *trx,
SPIDER_CONN *conn,
bool another,
bool trx_free,
int *roop_count
);
SPIDER_CONN *spider_create_conn(
SPIDER_SHARE *share,
ha_spider *spider,
int link_id,
int base_link_id,
uint conn_kind,
int *error_num
);
SPIDER_CONN *spider_get_conn(
SPIDER_SHARE *share,
int link_idx,
char *conn_key,
SPIDER_TRX *trx,
ha_spider *spider,
bool another,
bool thd_chg,
uint conn_kind,
int *error_num
);
int spider_free_conn(
SPIDER_CONN *conn
);
int spider_check_and_get_casual_read_conn(
THD *thd,
ha_spider *spider,
int link_idx
);
int spider_check_and_init_casual_read(
THD *thd,
ha_spider *spider,
int link_idx
);
void spider_conn_queue_connect(
SPIDER_SHARE *share,
SPIDER_CONN *conn,
int link_idx
);
void spider_conn_queue_connect_rewrite(
SPIDER_SHARE *share,
SPIDER_CONN *conn,
int link_idx
);
void spider_conn_queue_ping(
ha_spider *spider,
SPIDER_CONN *conn,
int link_idx
);
void spider_conn_queue_ping_rewrite(
ha_spider *spider,
SPIDER_CONN *conn,
int link_idx
);
void spider_conn_queue_trx_isolation(
SPIDER_CONN *conn,
int trx_isolation
);
void spider_conn_queue_semi_trx_isolation(
SPIDER_CONN *conn,
int trx_isolation
);
void spider_conn_queue_autocommit(
SPIDER_CONN *conn,
bool autocommit
);
void spider_conn_queue_sql_log_off(
SPIDER_CONN *conn,
bool sql_log_off
);
void spider_conn_queue_wait_timeout(
SPIDER_CONN *conn,
int wait_timeout
);
void spider_conn_queue_sql_mode(
SPIDER_CONN *conn,
sql_mode_t sql_mode
);
void spider_conn_queue_time_zone(
SPIDER_CONN *conn,
Time_zone *time_zone
);
void spider_conn_queue_UTC_time_zone(
SPIDER_CONN *conn
);
int spider_conn_queue_and_merge_loop_check(
SPIDER_CONN *conn,
SPIDER_CONN_LOOP_CHECK *lcptr
);
int spider_conn_reset_queue_loop_check(
SPIDER_CONN *conn
);
int spider_conn_queue_loop_check(
SPIDER_CONN *conn,
ha_spider *spider,
int link_idx
);
void spider_conn_queue_start_transaction(
SPIDER_CONN *conn
);
void spider_conn_queue_xa_start(
SPIDER_CONN *conn,
XID *xid
);
void spider_conn_clear_queue(
SPIDER_CONN *conn
);
void spider_conn_clear_queue_at_commit(
SPIDER_CONN *conn
);
void spider_conn_set_timeout(
SPIDER_CONN *conn,
uint net_read_timeout,
uint net_write_timeout
);
void spider_conn_set_timeout_from_share(
SPIDER_CONN *conn,
int link_idx,
THD *thd,
SPIDER_SHARE *share
);
void spider_conn_set_timeout_from_direct_sql(
SPIDER_CONN *conn,
THD *thd,
SPIDER_DIRECT_SQL *direct_sql
);
void spider_tree_insert(
SPIDER_CONN *top,
SPIDER_CONN *conn
);
SPIDER_CONN *spider_tree_first(
SPIDER_CONN *top
);
SPIDER_CONN *spider_tree_last(
SPIDER_CONN *top
);
SPIDER_CONN *spider_tree_next(
SPIDER_CONN *current
);
SPIDER_CONN *spider_tree_delete(
SPIDER_CONN *conn,
SPIDER_CONN *top
);
#ifndef WITHOUT_SPIDER_BG_SEARCH
int spider_set_conn_bg_param(
ha_spider *spider
);
int spider_create_conn_thread(
SPIDER_CONN *conn
);
void spider_free_conn_thread(
SPIDER_CONN *conn
);
void spider_bg_conn_wait(
SPIDER_CONN *conn
);
void spider_bg_all_conn_wait(
ha_spider *spider
);
int spider_bg_all_conn_pre_next(
ha_spider *spider,
int link_idx
);
void spider_bg_conn_break(
SPIDER_CONN *conn,
ha_spider *spider
);
void spider_bg_all_conn_break(
ha_spider *spider
);
bool spider_bg_conn_get_job(
SPIDER_CONN *conn
);
int spider_bg_conn_search(
ha_spider *spider,
int link_idx,
int first_link_idx,
bool first,
bool pre_next,
bool discard_result
);
void spider_bg_conn_simple_action(
SPIDER_CONN *conn,
uint simple_action,
bool caller_wait,
void *target,
uint link_idx,
int *error_num
);
void *spider_bg_conn_action(
void *arg
);
int spider_create_sts_thread(
SPIDER_SHARE *share
);
void spider_free_sts_thread(
SPIDER_SHARE *share
);
void *spider_bg_sts_action(
void *arg
);
int spider_create_crd_thread(
SPIDER_SHARE *share
);
void spider_free_crd_thread(
SPIDER_SHARE *share
);
void *spider_bg_crd_action(
void *arg
);
int spider_create_mon_threads(
SPIDER_TRX *trx,
SPIDER_SHARE *share
);
void spider_free_mon_threads(
SPIDER_SHARE *share
);
void *spider_bg_mon_action(
void *arg
);
#endif
int spider_conn_first_link_idx(
THD *thd,
long *link_statuses,
long *access_balances,
uint *conn_link_idx,
int link_count,
int link_status
);
int spider_conn_next_link_idx(
THD *thd,
long *link_statuses,
long *access_balances,
uint *conn_link_idx,
int link_idx,
int link_count,
int link_status
);
int spider_conn_link_idx_next(
long *link_statuses,
uint *conn_link_idx,
int link_idx,
int link_count,
int link_status
);
int spider_conn_get_link_status(
long *link_statuses,
uint *conn_link_idx,
int link_idx
);
int spider_conn_lock_mode(
ha_spider *spider
);
bool spider_conn_check_recovery_link(
SPIDER_SHARE *share
);
bool spider_conn_use_handler(
ha_spider *spider,
int lock_mode,
int link_idx
);
bool spider_conn_need_open_handler(
ha_spider *spider,
uint idx,
int link_idx
);
SPIDER_IP_PORT_CONN *spider_create_ipport_conn(SPIDER_CONN *conn);
SPIDER_CONN* spider_get_conn_from_idle_connection
(
SPIDER_SHARE *share,
int link_idx,
char *conn_key,
ha_spider *spider,
uint conn_kind,
int base_link_idx,
int *error_num
);
void spider_free_ipport_conn(void *info);