mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 20:36:16 +01:00 
			
		
		
		
	The conn_kind, which stands for "connection kind", is no longer useful because the HandlerSocket support is deleted and Spider now has only one connection kind, SPIDER_CONN_KIND_MYSQL. Remove conn_kind and related code. Signed-off-by: Yuchen Pei <yuchen.pei@mariadb.com> Reviewed-by: Nayuta Yanagisawa <nayuta.yanagisawa@mariadb.com>
		
			
				
	
	
		
			463 lines
		
	
	
	
		
			8.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
	
		
			8.7 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
 | 
						|
#define SPIDER_SIMPLE_CHECKSUM_TABLE      4
 | 
						|
 | 
						|
struct TABLE;
 | 
						|
 | 
						|
/*
 | 
						|
  The SPIDER_CONN_LOOP_CHECK has been added to the loop_check queue to
 | 
						|
  check for self-reference.
 | 
						|
*/
 | 
						|
#define SPIDER_LOP_CHK_QUEUED             (1 << 0)
 | 
						|
/*
 | 
						|
  The SPIDER_CONN_LOOP_CHECK is a merge of multiple
 | 
						|
  SPIDER_CONN_LOOP_CHECKs with the same data node table
 | 
						|
*/
 | 
						|
#define SPIDER_LOP_CHK_MERAGED            (1 << 1)
 | 
						|
/*
 | 
						|
  The SPIDER_CONN_LOOP_CHECK has been ignored because it has already
 | 
						|
  been marked as checked
 | 
						|
*/
 | 
						|
#define SPIDER_LOP_CHK_IGNORED            (1 << 2)
 | 
						|
 | 
						|
/* Used for self-reference check. */
 | 
						|
typedef struct st_spider_conn_loop_check
 | 
						|
{
 | 
						|
  /*
 | 
						|
    Could be 0, SPIDER_LOP_CHK_QUEUED, SPIDER_LOP_CHK_MERAGED, or
 | 
						|
    SPIDER_LOP_CHK_IGNORED
 | 
						|
  */
 | 
						|
  uint               flag;
 | 
						|
  /* hash value of to_name, used for the hash conn->loop_checked */
 | 
						|
  my_hash_value_type hash_value_to;
 | 
						|
  /*
 | 
						|
    The fully qualified name of the current spider table, which will
 | 
						|
    also be used to construct the user var name to set in the data
 | 
						|
    node
 | 
						|
  */
 | 
						|
  LEX_CSTRING        cur_name;
 | 
						|
  /*
 | 
						|
    The fully qualified data node table name, also used as key in
 | 
						|
    conn->loop_check_queue
 | 
						|
  */
 | 
						|
  LEX_CSTRING        to_name;
 | 
						|
  /*
 | 
						|
    A concatenation of from_value, cur_name and to_name, used as key
 | 
						|
    in hash conn->loop_checked
 | 
						|
  */
 | 
						|
  LEX_CSTRING        full_name;
 | 
						|
  /*
 | 
						|
    The first component of the uservar value on the current server,
 | 
						|
    consisting of information of a table that uses the current spider
 | 
						|
    table as a data node
 | 
						|
  */
 | 
						|
  LEX_CSTRING        from_value;
 | 
						|
  /*
 | 
						|
    The uservar value to set in the data node, a concatenation of info
 | 
						|
    of tables, mac addresses and process ids of tables that use the
 | 
						|
    current spider table as the data node
 | 
						|
  */
 | 
						|
  LEX_CSTRING        merged_value;
 | 
						|
} SPIDER_CONN_LOOP_CHECK;
 | 
						|
 | 
						|
const uchar *spider_conn_get_key(
 | 
						|
  const void *conn,
 | 
						|
  size_t *length,
 | 
						|
  my_bool
 | 
						|
);
 | 
						|
 | 
						|
const uchar *spider_ipport_conn_get_key(
 | 
						|
  const void *ip_port,
 | 
						|
  size_t *length,
 | 
						|
  my_bool
 | 
						|
);
 | 
						|
 | 
						|
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,
 | 
						|
  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,
 | 
						|
  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,
 | 
						|
 int base_link_idx,
 | 
						|
 int *error_num
 | 
						|
 );
 | 
						|
void spider_free_ipport_conn(void *info);
 | 
						|
 | 
						|
void spider_lock_before_query(SPIDER_CONN *conn, int *need_mon);
 | 
						|
 | 
						|
int spider_unlock_after_query(SPIDER_CONN *conn, int ret);
 | 
						|
 | 
						|
int spider_unlock_after_query_1(SPIDER_CONN *conn);
 | 
						|
 | 
						|
int spider_unlock_after_query_2(SPIDER_CONN *conn, ha_spider *spider, int link_idx, TABLE *table);
 |