Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
e95e9a22
Commit
e95e9a22
authored
Sep 15, 2023
by
Yuchen Pei
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '10.4' into 10.5
parents
81e60f1a
96760d3a
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
278 additions
and
588 deletions
+278
-588
mysql-test/include/rpl_change_topology.inc
mysql-test/include/rpl_change_topology.inc
+21
-13
mysql-test/include/rpl_connect.inc
mysql-test/include/rpl_connect.inc
+1
-1
mysql-test/include/rpl_end.inc
mysql-test/include/rpl_end.inc
+0
-2
mysql-test/include/rpl_for_each_slave.inc
mysql-test/include/rpl_for_each_slave.inc
+15
-1
mysql-test/include/rpl_init.inc
mysql-test/include/rpl_init.inc
+24
-16
mysql-test/include/rpl_reconnect.inc
mysql-test/include/rpl_reconnect.inc
+0
-11
mysql-test/include/rpl_start_slaves.inc
mysql-test/include/rpl_start_slaves.inc
+1
-1
mysql-test/include/wait_for_slave_io_to_start.inc
mysql-test/include/wait_for_slave_io_to_start.inc
+5
-4
mysql-test/include/wait_for_slave_sql_to_start.inc
mysql-test/include/wait_for_slave_sql_to_start.inc
+2
-1
mysql-test/include/wait_for_slave_to_start.inc
mysql-test/include/wait_for_slave_to_start.inc
+1
-0
mysql-test/suite/rpl/my.cnf
mysql-test/suite/rpl/my.cnf
+5
-5
storage/spider/ha_spider.cc
storage/spider/ha_spider.cc
+24
-186
storage/spider/mysql-test/spider/bugfix/r/mdev_26151.result
storage/spider/mysql-test/spider/bugfix/r/mdev_26151.result
+34
-0
storage/spider/mysql-test/spider/bugfix/t/mdev_26151.test
storage/spider/mysql-test/spider/bugfix/t/mdev_26151.test
+54
-0
storage/spider/spd_conn.cc
storage/spider/spd_conn.cc
+57
-41
storage/spider/spd_db_conn.cc
storage/spider/spd_db_conn.cc
+30
-243
storage/spider/spd_db_include.h
storage/spider/spd_db_include.h
+0
-3
storage/spider/spd_db_mysql.cc
storage/spider/spd_db_mysql.cc
+0
-8
storage/spider/spd_db_mysql.h
storage/spider/spd_db_mysql.h
+0
-3
storage/spider/spd_group_by_handler.cc
storage/spider/spd_group_by_handler.cc
+2
-18
storage/spider/spd_trx.cc
storage/spider/spd_trx.cc
+2
-31
No files found.
mysql-test/include/rpl_change_topology.inc
View file @
e95e9a22
...
...
@@ -5,15 +5,15 @@
# need to change topology after they have sourced include/rpl_init.inc
#
# This file sets up variables needed by include/rpl_sync.inc and many
# other replication scripts in the include/ directory.
It also issues
# other replication scripts in the include/ directory. It also issues
# CHANGE MASTER on all servers where the configuration changes from
# what it was before.
It does not issue START SLAVE (use
# what it was before. It does not issue START SLAVE (use
# include/rpl_start_slaves.inc for that).
#
# Note: it is not currently possible to change the number of servers
# after the rpl_init.inc, without first calling rpl_end.inc. So the
# test has to set $rpl_server_count to the total number of servers
# that the test uses, before it sources include/rpl_init.inc.
After
# that the test uses, before it sources include/rpl_init.inc. After
# that, $rpl_server_count must not change until after next time the
# test sources include/rpl_end.inc.
#
...
...
@@ -37,7 +37,7 @@
# By default, CHANGE MASTER is executed with MASTER_LOG_FILE set
# to the name of the last binlog file on the master (retrieved by
# executing SHOW MASTER STATUS). This variable can be set to
# specify another filename.
This variable should be a
# specify another filename. This variable should be a
# comma-separated list of the following form:
#
# SERVER_NUMBER_1:FILE_NAME_1,SERVER_NUMBER_2:FILE_NAME_2,...
...
...
@@ -45,7 +45,7 @@
# Before CHANGE MASTER is executed on server N, this script checks
# if $rpl_master_log_file contains the text N:FILE_NAME. If it
# does, then MASTER_LOG_FILE is set to FILE_NAME. Otherwise,
# MASTER_LOG_FILE is set to the last binlog on the master.
For
# MASTER_LOG_FILE is set to the last binlog on the master. For
# example, to specify that server_1 should start replicate from
# master-bin.000007 and server_5 should start replicate from
# master-bin.012345, do:
...
...
@@ -53,9 +53,9 @@
#
# $rpl_master_log_pos
# By default, CHANGE MASTER is executed without specifying the
# MASTER_LOG_POS parameter.
This variable can be set to set a
# specific position.
It has the same form as $rpl_master_log_file
# (see above).
For example, to specify that server_3 should start
# MASTER_LOG_POS parameter. This variable can be set to set a
# specific position. It has the same form as $rpl_master_log_file
# (see above). For example, to specify that server_3 should start
# replicate from position 4711 of its master, do:
# --let $rpl_master_log_pos= 3:4711
#
...
...
@@ -72,7 +72,7 @@
# include/rpl_stop_slaves.inc
# include/rpl_end.inc
#
# $rpl_server_count_length
:
# $rpl_server_count_length
# Set to LENGTH($rpl_server_count). So if $rpl_server_count < 10,
# then $rpl_server_count_length = 1; if 10 <= $rpl_server_count <
# 100, then $rpl_server_count_length = 2, etc.
...
...
@@ -83,12 +83,12 @@
# server N is a slave, then the N'th number is the master of server
# N. If server N is not a slave, then the N'th number is just spaces
# (so in fact it is not a number). For example, if $rpl_topology is
# '1->2,2->3,3->1,2->4,5->6', then $rpl_master_list is '3122
6
'.
# '1->2,2->3,3->1,2->4,5->6', then $rpl_master_list is '3122
5
'.
#
# $rpl_sync_chain_dirty
# This variable is set to 1.
This tells include/rpl_sync.inc to
# This variable is set to 1. This tells include/rpl_sync.inc to
# compute a new value for $rpl_sync_chain next time that
# include/rpl_sync.inc is sourced.
See
# include/rpl_sync.inc is sourced. See
# include/rpl_generate_sync_chain.inc and include/rpl_sync.inc for
# details.
...
...
@@ -124,7 +124,7 @@ if ($rpl_master_list == '')
if
(
$rpl_debug
)
{
--
echo
\
$rpl_server_count
=
'$rpl_server_count'
--
echo
\
$rpl_server_count_length
=
'$rpl_server_count_length'
--
echo
old
\
$rpl_server_count_length
=
'$rpl_server_count_length'
--
echo
new
\
$rpl_topology
=
'$_rpl_topology'
--
echo
old
\
$rpl_master_list
=
'$rpl_master_list'
--
echo
old
\
$rpl_sync_chain
=
'$rpl_sync_chain'
...
...
@@ -210,6 +210,10 @@ if (!$rpl_skip_change_master)
--
let
$rpl_connection_name
=
server_
$_rpl_master
--
source
include
/
rpl_connection
.
inc
--
let
$_rpl_master_log_file
=
query_get_value
(
SHOW
MASTER
STATUS
,
File
,
1
)
if
(
$rpl_debug
)
{
--
echo
"
\$
rpl_master_log_file parameter not set for the master:
$_rpl_master
, use the latest binlog file by executing SHOW MASTER STATUS."
}
}
# Change connection.
--
let
$rpl_connection_name
=
server_
$_rpl_server
...
...
@@ -224,6 +228,10 @@ if (!$rpl_skip_change_master)
if
(
!
$_rpl_master_log_pos_index
)
{
--
let
$_rpl_master_log_pos
=
if
(
$rpl_debug
)
{
--
echo
"
\$
rpl_master_log_pos parameter not set for the master:
$_rpl_master
. Set log position to empty."
}
}
eval
CHANGE
MASTER
TO
MASTER_HOST
=
'127.0.0.1'
,
MASTER_PORT
=
$_rpl_port
,
MASTER_USER
=
'root'
,
MASTER_LOG_FILE
=
'$_rpl_master_log_file'
$_rpl_master_log_pos
,
MASTER_CONNECT_RETRY
=
1
;
}
...
...
mysql-test/include/rpl_connect.inc
View file @
e95e9a22
...
...
@@ -5,7 +5,7 @@
# This script is normally used internally by rpl_init.inc and
# master-slave.inc, but it can also be used in test cases that need to
# create more connections or re-create connections after disconnect.
#
#
Default ports SERVER_MYPORT_[1,2] are set by rpl_init.inc.
#
# ==== Usage ====
#
...
...
mysql-test/include/rpl_end.inc
View file @
e95e9a22
...
...
@@ -103,11 +103,9 @@ while ($_rpl_server)
--
connection
default
--
let
$_rpl_server
=
$rpl_server_count
--
let
$_rpl_one
=
_1
while
(
$_rpl_server
)
{
--
disconnect
server_
$_rpl_server
--
disconnect
server_
$_rpl_server$_rpl_one
--
dec
$_rpl_server
}
...
...
mysql-test/include/rpl_for_each_slave.inc
View file @
e95e9a22
# ==== Purpose ====
#
# Execute a .inc file once for each server that was configured as a
# slave by rpl_init.inc
# slave by rpl_init.inc
, for example start_slave.inc or stop_slave.inc file.
#
#
# ==== Usage ====
...
...
@@ -14,6 +14,20 @@
# $rpl_source_file
# The file that will be sourced.
#
# $rpl_server_count
# The number of servers to configure. If this is not set, the largest
# number in $rpl_topology will be used.
# This parameter is obtained from rpl_init.inc.
#
# $rpl_master_list
# This parameter is calculated from within rpl_init.inc.
#
# $rpl_server_count_length
# Set to LENGTH($rpl_server_count). So if $rpl_server_count < 10,
# then $rpl_server_count_length = 1; if 10 <= $rpl_server_count <
# 100, then $rpl_server_count_length = 2, etc.
# This parameter is calculated from within rpl_change_topology.inc.
#
# $rpl_debug
# See include/rpl_init.inc
...
...
mysql-test/include/rpl_init.inc
View file @
e95e9a22
...
...
@@ -3,18 +3,16 @@
# Set up replication on several servers in a specified topology.
#
# By default, this script does the following:
# - Creates the connections server_1, server_2, ..., server_N, as
# well as extra connections server_1_1, server_2_1, ...,
# server_N_1. server_I and server_I_1 are connections to the same
# server.
# - Verifies that @@server_id of all servers are different.
# - Creates the connections server_1, server_2, ..., server_N.
# - Calls RESET MASTER, RESET SLAVE, USE test, CHANGE MASTER, START SLAVE.
# - Sets the connection to server_1 before exiting.
# With $rpl_check_server_ids parameter, the script does the following:
# - Verifies that @@server_id of all servers are different.
#
# ==== Usage ====
#
# 1. If you are going to use more than two servers, create
# rpl_test.c
fg
with the following contents:
# rpl_test.c
nf
with the following contents:
#
# !include ../my.cnf
# [mysqld.1]
...
...
@@ -34,8 +32,9 @@
#
# (It is allowed, but not required, to configure SERVER_MYPORT_1
# and SERVER_MYPORT_2 too. If these variables are not set, the
# variables MASTER_MYPORT and SLAVE_MYPORT, configured in the
# default my.cnf used by the rpl suite, are used instead.)
# variables MASTER_MYPORT and SLAVE_MYPORT are used instead.
# These variables are configured in the rpl_1slave_base.cnf,
# that is used in the default my.cnf, which is used by the rpl suite.)
#
# 2. Execute the following near the top of the test:
#
...
...
@@ -147,18 +146,15 @@ if (!$rpl_debug)
}
# Create
two connections to each
server; reset master/slave, select
# Create
connection to the
server; reset master/slave, select
# database, set autoinc variables.
--
let
$_rpl_server
=
$rpl_server_count
--
let
$_rpl_one
=
_1
while
(
$_rpl_server
)
{
# Connect.
--
let
$rpl_server_number
=
$_rpl_server
--
let
$rpl_connection_name
=
server_
$_rpl_server
--
source
include
/
rpl_connect
.
inc
--
let
$rpl_connection_name
=
server_
$_rpl_server$_rpl_one
--
source
include
/
rpl_connect
.
inc
# Configure server.
--
let
$rpl_connection_name
=
server_
$_rpl_server
...
...
@@ -203,7 +199,7 @@ if ($rpl_check_server_ids)
while
(
$_rpl_server2
)
{
--
let
$assert_text
=
Servers
$_rpl_server
and
$_rpl_server2
should
have
different
@@
server_id
--
let
$assert_cond
ition
=
[
$_rpl_server
:
SELECT
@@
server_id
AS
i
,
i
,
1
]
!=
[
$_rpl_server2
:
SELECT
@@
server_id
AS
i
,
i
,
1
]
--
let
$assert_cond
=
[
SELECT
@@
server_id
AS
i
,
i
,
1
]
!=
$_rpl_server
--
source
include
/
assert
.
inc
--
dec
$_rpl_server2
...
...
@@ -212,18 +208,30 @@ if ($rpl_check_server_ids)
}
}
# $rpl_master_list must be set so that include/rpl_change_topology.inc
# knows which servers are initialized and not.
if
(
$rpl_debug
)
{
--
echo
----
Check
the
topology
and
call
CHANGE
MASTER
----
}
# $rpl_master_list must be set so that include/rpl_change_topology.inc and later
# include/rpl_for_each_slave.inc knows which servers are initialized and not.
--
let
$rpl_master_list
=
`SELECT REPEAT('x', $rpl_server_count * LENGTH($rpl_server_count))`
--
source
include
/
rpl_change_topology
.
inc
if
(
!
$rpl_skip_start_slave
)
{
if
(
$rpl_debug
)
{
--
echo
----
Start
slaves
----
}
--
source
include
/
rpl_start_slaves
.
inc
}
if
(
$rpl_debug
)
{
--
echo
----
Set
connection
to
the
server_1
----
}
--
let
$rpl_connection_name
=
server_1
--
source
include
/
rpl_connection
.
inc
...
...
mysql-test/include/rpl_reconnect.inc
View file @
e95e9a22
...
...
@@ -72,11 +72,6 @@ if (!$_rpl_server_number)
--
source
include
/
rpl_connection
.
inc
--
enable_reconnect
--
let
$_rpl_one
=
_1
--
let
$rpl_connection_name
=
server_
$rpl_server_number$_rpl_one
--
source
include
/
rpl_connection
.
inc
--
enable_reconnect
if
(
$rpl_debug
)
{
--
echo
----
Wait
for
reconnect
and
disable
reconnect
on
all
connections
----
...
...
@@ -122,11 +117,5 @@ if (!$_rpl_server_number)
--
source
include
/
wait_until_connected_again
.
inc
--
disable_reconnect
--
let
$rpl_connection_name
=
server_
$rpl_server_number$_rpl_one
--
source
include
/
rpl_connection
.
inc
--
source
include
/
wait_until_connected_again
.
inc
--
disable_reconnect
--
let
$include_filename
=
rpl_reconnect
.
inc
--
source
include
/
end_include_file
.
inc
mysql-test/include/rpl_start_slaves.inc
View file @
e95e9a22
...
...
@@ -19,7 +19,7 @@
#
# $slave_timeout
# Set the timeout when waiting for slave threads to stop and
# start, respectively.
See include/wait_for_slave_param.inc
# start, respectively. See include/wait_for_slave_param.inc
--
let
$include_filename
=
rpl_start_slaves
.
inc
...
...
mysql-test/include/wait_for_slave_io_to_start.inc
View file @
e95e9a22
...
...
@@ -14,13 +14,14 @@
#
# Parameters:
# $slave_timeout
# See include/wait_for_slave_param.inc
# Timeout used when waiting for the slave IO thread to start.
# See include/wait_for_slave_param.inc.
#
# $rpl_allow_error
# By default, this file fails if there is an error in the IO
# thread.
However, the IO thread can recover and reconnect after
# certain errors.
If such an error is expected, can set
# $rpl_allow_error=1.
This will prevent this file from failing if
# thread. However, the IO thread can recover and reconnect after
# certain errors. If such an error is expected, can set
# $rpl_allow_error=1. This will prevent this file from failing if
# there is an error in the IO thread.
#
# $rpl_debug
...
...
mysql-test/include/wait_for_slave_sql_to_start.inc
View file @
e95e9a22
...
...
@@ -11,6 +11,7 @@
#
# Parameters:
# $slave_timeout
# Timeout used when waiting for the slave SQL thread to start.
# See include/wait_for_slave_param.inc
#
# $rpl_debug
...
...
@@ -25,7 +26,7 @@ let $slave_param= Slave_SQL_Running;
let
$slave_param_value
=
Yes
;
# Unfortunately, the slave sql thread sets Slave_SQL_Running=Yes
# *before* it clears Last_SQL_Errno.
So we have to allow errors in
# *before* it clears Last_SQL_Errno. So we have to allow errors in
# the SQL thread here.
#--let $slave_error_param= Last_SQL_Errno
...
...
mysql-test/include/wait_for_slave_to_start.inc
View file @
e95e9a22
...
...
@@ -12,6 +12,7 @@
#
# Parameters:
# $slave_timeout
# Timeout used when waiting for the slave threads to start.
# See include/wait_for_slave_param.inc
#
# $rpl_debug
...
...
mysql-test/suite/rpl/my.cnf
View file @
e95e9a22
# Use settings from rpl_1slave_base.cnf
# add setting to connect the slave to the master by default
!include rpl_1slave_base.cnf
!include include/default_client.cnf
[mysqld.2]
# Override specific server settings using [mariadb-x.y] option group
# from `test.cnf` file right after including this file.
# E.g. after !include ../my.cnf, in your `test.cnf`, specify your configuration
# in option group e.g [mysqld.x], so that number `x` corresponds to the number
# in the rpl server topology.
storage/spider/ha_spider.cc
View file @
e95e9a22
This diff is collapsed.
Click to expand it.
storage/spider/mysql-test/spider/bugfix/r/mdev_26151.result
0 → 100644
View file @
e95e9a22
MDEV-26151 MDEV-31787
for master_1
for child2
for child3
set @old_spider_bgs_mode= @@spider_bgs_mode;
set session spider_bgs_mode=1;
CREATE SERVER $srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
create table td (a int, PRIMARY KEY (a));
create table ts (a int, PRIMARY KEY (a)) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv_mdev_26151",TABLE "td", casual_read "3"';
insert into td values (11), (42);
select max(a) from ts;
max(a)
42
drop table td, ts;
create table td (a int, PRIMARY KEY (a));
create table ts (a int, PRIMARY KEY (a)) ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv_mdev_26151",TABLE "td", casual_read "1"';
insert into td values (11), (42);
select max(a) from ts;
max(a)
42
select min(a) from ts;
min(a)
11
drop table td, ts;
drop server srv_mdev_26151;
set session spider_bgs_mode=@old_spider_bgs_mode;
for master_1
for child2
for child3
end of test
storage/spider/mysql-test/spider/bugfix/t/mdev_26151.test
0 → 100644
View file @
e95e9a22
--
echo
--
echo
MDEV
-
26151
MDEV
-
31787
--
echo
# This test exercises the code path where a nonzero casual_read takes
# effect.
--
disable_query_log
--
disable_result_log
--
source
../../
t
/
test_init
.
inc
--
enable_result_log
--
enable_query_log
--
let
$srv
=
srv_mdev_26151
set
@
old_spider_bgs_mode
=
@@
spider_bgs_mode
;
set
session
spider_bgs_mode
=
1
;
evalp
CREATE
SERVER
$srv
FOREIGN
DATA
WRAPPER
MYSQL
OPTIONS
(
SOCKET
"
$MASTER_1_MYSOCK
"
,
DATABASE
'test'
,
user
'root'
);
# casual_read != 0 && casual_read != 1
create
table
td
(
a
int
,
PRIMARY
KEY
(
a
));
eval
create
table
ts
(
a
int
,
PRIMARY
KEY
(
a
))
ENGINE
=
Spider
COMMENT
=
'WRAPPER "mysql", srv "$srv",TABLE "td", casual_read "3"'
;
insert
into
td
values
(
11
),
(
42
);
select
max
(
a
)
from
ts
;
drop
table
td
,
ts
;
create
table
td
(
a
int
,
PRIMARY
KEY
(
a
));
# casual_read = 1
eval
create
table
ts
(
a
int
,
PRIMARY
KEY
(
a
))
ENGINE
=
Spider
COMMENT
=
'WRAPPER "mysql", srv "$srv",TABLE "td", casual_read "1"'
;
insert
into
td
values
(
11
),
(
42
);
select
max
(
a
)
from
ts
;
select
min
(
a
)
from
ts
;
drop
table
td
,
ts
;
eval
drop
server
$srv
;
set
session
spider_bgs_mode
=@
old_spider_bgs_mode
;
--
disable_query_log
--
disable_result_log
--
source
../../
t
/
test_deinit
.
inc
--
enable_result_log
--
enable_query_log
--
echo
--
echo
end
of
test
--
echo
storage/spider/spd_conn.cc
View file @
e95e9a22
...
...
@@ -1412,6 +1412,30 @@ int spider_free_conn(
DBUG_RETURN
(
0
);
}
/**
May get or create a connection spawning a background thread
For each link (data node, formally representable as the tuple
(spider, link_idx)), there is an associated casual read value
(`spider->result_list.casual_read[link_idx]').
If the CRV is 0, do nothing. Otherwise, An casual read id
(`conn->casual_read_current_id`) is associated with the link and
query id. The CRI starts from 2, and is used only when CRV is 1, to
update the CRV (see below). The updated CRV is then used to
construct the connection key used for get or create a connection
that spawns a background thread to execute queries.
If the CRV is 1, it is assigned CRI. The latter is then incremented
by 1. The CRI will only go up to 63, before "wrapping" back to 2.
If 2 <= CRV <= 63, it is left alone.
Note that this function relies on the assumption that the CRV is
reset (e.g. using `spider_param_casual_read()') between consecutive
calls of this function for the CRV == 1 case to auto-increment as
expected.
*/
int
spider_check_and_get_casual_read_conn
(
THD
*
thd
,
ha_spider
*
spider
,
...
...
@@ -1419,41 +1443,35 @@ int spider_check_and_get_casual_read_conn(
)
{
int
error_num
;
DBUG_ENTER
(
"spider_check_and_get_casual_read_conn"
);
if
(
spider
->
result_list
.
casual_read
[
link_idx
])
if
(
!
spider
->
result_list
.
casual_read
[
link_idx
])
DBUG_RETURN
(
0
);
SPIDER_CONN
*
conn
=
spider
->
conns
[
link_idx
];
if
(
conn
->
casual_read_query_id
!=
thd
->
query_id
)
{
SPIDER_CONN
*
conn
=
spider
->
conns
[
link_idx
];
if
(
conn
->
casual_read_query_id
!=
thd
->
query_id
)
{
conn
->
casual_read_query_id
=
thd
->
query_id
;
conn
->
casual_read_query_id
=
thd
->
query_id
;
conn
->
casual_read_current_id
=
2
;
}
if
(
spider
->
result_list
.
casual_read
[
link_idx
]
==
1
)
{
spider
->
result_list
.
casual_read
[
link_idx
]
=
conn
->
casual_read_current_id
;
++
conn
->
casual_read_current_id
;
if
(
conn
->
casual_read_current_id
>
63
)
conn
->
casual_read_current_id
=
2
;
}
if
(
spider
->
result_list
.
casual_read
[
link_idx
]
==
1
)
{
spider
->
result_list
.
casual_read
[
link_idx
]
=
conn
->
casual_read_current_id
;
++
conn
->
casual_read_current_id
;
if
(
conn
->
casual_read_current_id
>
63
)
{
conn
->
casual_read_current_id
=
2
;
}
}
char
first_byte_bak
=
*
spider
->
conn_keys
[
link_idx
];
*
spider
->
conn_keys
[
link_idx
]
=
'0'
+
spider
->
result_list
.
casual_read
[
link_idx
];
if
(
!
(
spider
->
conns
[
link_idx
]
=
spider_get_conn
(
spider
->
share
,
link_idx
,
spider
->
conn_keys
[
link_idx
],
spider
->
wide_handler
->
trx
,
spider
,
FALSE
,
TRUE
,
SPIDER_CONN_KIND_MYSQL
,
&
error_num
))
)
{
*
spider
->
conn_keys
[
link_idx
]
=
first_byte_bak
;
DBUG_RETURN
(
error_num
);
}
}
char
first_byte_bak
=
*
spider
->
conn_keys
[
link_idx
];
*
spider
->
conn_keys
[
link_idx
]
=
'0'
+
spider
->
result_list
.
casual_read
[
link_idx
];
if
(
!
(
spider
->
conns
[
link_idx
]
=
spider_get_conn
(
spider
->
share
,
link_idx
,
spider
->
conn_keys
[
link_idx
],
spider
->
wide_handler
->
trx
,
spider
,
FALSE
,
TRUE
,
SPIDER_CONN_KIND_MYSQL
,
&
error_num
)))
{
*
spider
->
conn_keys
[
link_idx
]
=
first_byte_bak
;
spider
->
conns
[
link_idx
]
->
casual_read_base_conn
=
conn
;
conn
=
spider
->
conns
[
link_idx
];
spider_check_and_set_autocommit
(
thd
,
conn
,
NULL
);
DBUG_RETURN
(
error_num
);
}
*
spider
->
conn_keys
[
link_idx
]
=
first_byte_bak
;
spider
->
conns
[
link_idx
]
->
casual_read_base_conn
=
conn
;
spider_check_and_set_autocommit
(
thd
,
spider
->
conns
[
link_idx
],
NULL
);
DBUG_RETURN
(
0
);
}
...
...
@@ -2409,6 +2427,12 @@ int spider_set_conn_bg_param(
DBUG_RETURN
(
0
);
}
/**
Creates a background thread on `conn' to run `spider_bg_conn_action()'
Does not create when `conn' is NULL or a bg thread has already been
created for `conn'.
*/
int
spider_create_conn_thread
(
SPIDER_CONN
*
conn
)
{
...
...
@@ -3238,11 +3262,6 @@ void *spider_bg_conn_action(
}
#endif
pthread_mutex_assert_not_owner
(
&
conn
->
mta_conn_mutex
);
if
(
dbton_handler
->
need_lock_before_set_sql_for_exec
(
sql_type
))
{
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
}
if
(
spider
->
use_fields
)
{
if
((
error_num
=
dbton_handler
->
set_sql_for_exec
(
sql_type
,
...
...
@@ -3261,11 +3280,8 @@ void *spider_bg_conn_action(
strmov
(
result_list
->
bgs_error_msg
,
spider_stmt_da_message
(
thd
));
}
}
if
(
!
dbton_handler
->
need_lock_before_set_sql_for_exec
(
sql_type
))
{
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
}
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
sql_type
&=
~
SPIDER_SQL_TYPE_TMP_SQL
;
DBUG_PRINT
(
"info"
,(
"spider sql_type=%lu"
,
sql_type
));
#ifdef HA_CAN_BULK_ACCESS
...
...
storage/spider/spd_db_conn.cc
View file @
e95e9a22
This diff is collapsed.
Click to expand it.
storage/spider/spd_db_include.h
View file @
e95e9a22
...
...
@@ -1665,9 +1665,6 @@ class spider_db_handler
SPIDER_HS_STRING_REF
&
info
)
=
0
;
#endif
virtual
bool
need_lock_before_set_sql_for_exec
(
ulong
sql_type
)
=
0
;
#ifdef SPIDER_HAS_GROUP_BY_HANDLER
virtual
int
set_sql_for_exec
(
ulong
sql_type
,
...
...
storage/spider/spd_db_mysql.cc
View file @
e95e9a22
...
...
@@ -13976,14 +13976,6 @@ int spider_mbase_handler::push_back_upds(
}
#endif
bool
spider_mbase_handler
::
need_lock_before_set_sql_for_exec
(
ulong
sql_type
)
{
DBUG_ENTER
(
"spider_mbase_handler::need_lock_before_set_sql_for_exec"
);
DBUG_PRINT
(
"info"
,(
"spider this=%p"
,
this
));
DBUG_RETURN
(
FALSE
);
}
#ifdef SPIDER_HAS_GROUP_BY_HANDLER
int
spider_mbase_handler
::
set_sql_for_exec
(
ulong
sql_type
,
...
...
storage/spider/spd_db_mysql.h
View file @
e95e9a22
...
...
@@ -1487,9 +1487,6 @@ class spider_mbase_handler: public spider_db_handler
SPIDER_HS_STRING_REF
&
info
);
#endif
bool
need_lock_before_set_sql_for_exec
(
ulong
sql_type
);
#ifdef SPIDER_HAS_GROUP_BY_HANDLER
int
set_sql_for_exec
(
ulong
sql_type
,
...
...
storage/spider/spd_group_by_handler.cc
View file @
e95e9a22
...
...
@@ -1412,30 +1412,14 @@ int spider_group_by_handler::init_scan()
}
else
{
#endif
pthread_mutex_assert_not_owner
(
&
conn
->
mta_conn_mutex
);
if
(
dbton_hdl
->
need_lock_before_set_sql_for_exec
(
SPIDER_SQL_TYPE_SELECT_SQL
))
{
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
}
if
((
error_num
=
dbton_hdl
->
set_sql_for_exec
(
SPIDER_SQL_TYPE_SELECT_SQL
,
link_idx
,
link_idx_chain
)))
{
if
(
dbton_hdl
->
need_lock_before_set_sql_for_exec
(
SPIDER_SQL_TYPE_SELECT_SQL
))
{
SPIDER_CLEAR_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
pthread_mutex_unlock
(
&
conn
->
mta_conn_mutex
);
}
DBUG_RETURN
(
error_num
);
}
if
(
!
dbton_hdl
->
need_lock_before_set_sql_for_exec
(
SPIDER_SQL_TYPE_SELECT_SQL
))
{
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
}
pthread_mutex_lock
(
&
conn
->
mta_conn_mutex
);
SPIDER_SET_FILE_POS
(
&
conn
->
mta_conn_mutex_file_pos
);
conn
->
need_mon
=
&
spider
->
need_mons
[
link_idx
];
DBUG_ASSERT
(
!
conn
->
mta_conn_mutex_lock_already
);
DBUG_ASSERT
(
!
conn
->
mta_conn_mutex_unlock_later
);
...
...
storage/spider/spd_trx.cc
View file @
e95e9a22
...
...
@@ -1559,27 +1559,9 @@ int spider_check_and_set_autocommit(
SPIDER_CONN
*
conn
,
int
*
need_mon
)
{
bool
autocommit
;
DBUG_ENTER
(
"spider_check_and_set_autocommit"
);
autocommit
=
!
thd_test_options
(
thd
,
OPTION_NOT_AUTOCOMMIT
);
if
(
autocommit
)
{
spider_conn_queue_autocommit
(
conn
,
TRUE
);
}
else
{
spider_conn_queue_autocommit
(
conn
,
FALSE
);
}
/*
if (autocommit && conn->autocommit != 1)
{
spider_conn_queue_autocommit(conn, TRUE);
conn->autocommit = 1;
} else if (!autocommit && conn->autocommit != 0)
{
spider_conn_queue_autocommit(conn, FALSE);
conn->autocommit = 0;
}
*/
spider_conn_queue_autocommit
(
conn
,
!
thd_test_options
(
thd
,
OPTION_NOT_AUTOCOMMIT
));
DBUG_RETURN
(
0
);
}
...
...
@@ -1601,17 +1583,6 @@ int spider_check_and_set_sql_log_off(
spider_conn_queue_sql_log_off
(
conn
,
FALSE
);
}
}
/*
if (internal_sql_log_off && conn->sql_log_off != 1)
{
spider_conn_queue_sql_log_off(conn, TRUE);
conn->sql_log_off = 1;
} else if (!internal_sql_log_off && conn->sql_log_off != 0)
{
spider_conn_queue_sql_log_off(conn, FALSE);
conn->sql_log_off = 0;
}
*/
DBUG_RETURN
(
0
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment