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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
245ab473
Commit
245ab473
authored
Dec 17, 2013
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-5363: Make parallel replication waits killable
Add another test case.
parent
0bf95a0c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
228 additions
and
0 deletions
+228
-0
mysql-test/suite/rpl/r/rpl_parallel.result
mysql-test/suite/rpl/r/rpl_parallel.result
+87
-0
mysql-test/suite/rpl/t/rpl_parallel.test
mysql-test/suite/rpl/t/rpl_parallel.test
+141
-0
No files found.
mysql-test/suite/rpl/r/rpl_parallel.result
View file @
245ab473
...
...
@@ -428,6 +428,93 @@ SET GLOBAL binlog_format=@old_format;
SET GLOBAL slave_parallel_threads=0;
SET GLOBAL slave_parallel_threads=10;
include/start_slave.inc
*** 3. Same as (2), but not using gtid mode ***
include/stop_slave.inc
CHANGE MASTER TO master_use_gtid=no;
include/start_slave.inc
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
SET binlog_format=statement;
INSERT INTO t3 VALUES (51, foo(51,
'commit_before_prepare_ordered WAIT_FOR t2_waiting',
'commit_after_prepare_ordered SIGNAL t1_ready WAIT_FOR t1_cont'));
SET debug_sync='now WAIT_FOR master_queued1';
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
SET binlog_format=statement;
BEGIN;
INSERT INTO t3 VALUES (52, foo(52,
'ha_write_row_end SIGNAL t2_query WAIT_FOR t2_cont',
''));
INSERT INTO t3 VALUES (53, foo(53,
'group_commit_waiting_for_prior SIGNAL t2_waiting',
'group_commit_waiting_for_prior_killed SIGNAL t2_killed'));
COMMIT;
SET debug_sync='now WAIT_FOR master_queued2';
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
SET binlog_format=statement;
INSERT INTO t3 VALUES (54, foo(54,
'',
''));
SET debug_sync='now WAIT_FOR master_queued3';
SET debug_sync='now SIGNAL master_cont1';
SELECT * FROM t3 WHERE a >= 50 ORDER BY a;
a b
51 51
52 52
53 53
54 54
SET debug_sync='now WAIT_FOR t2_query';
SET debug_sync='now SIGNAL t2_cont';
SET debug_sync='now WAIT_FOR t1_ready';
KILL THD_ID;
SET debug_sync='now WAIT_FOR t2_killed';
SET debug_sync='now SIGNAL t1_cont';
include/wait_for_slave_sql_error.inc [errno=1317,1963]
SELECT * FROM t3 WHERE a >= 50 ORDER BY a;
a b
51 51
SET GLOBAL slave_parallel_threads=0;
SET GLOBAL slave_parallel_threads=10;
SET sql_log_bin=0;
DROP FUNCTION foo;
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
RETURNS INT DETERMINISTIC
BEGIN
RETURN x;
END
||
SET sql_log_bin=1;
INSERT INTO t3 VALUES (59,0);
START SLAVE SQL_THREAD;
SELECT * FROM t3 WHERE a >= 50 ORDER BY a;
a b
51 51
52 52
53 53
54 54
59 0
SET sql_log_bin=0;
DROP FUNCTION foo;
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
RETURNS INT DETERMINISTIC
BEGIN
IF d1 != '' THEN
SET debug_sync = d1;
END IF;
IF d2 != '' THEN
SET debug_sync = d2;
END IF;
RETURN x;
END
||
SET sql_log_bin=1;
include/stop_slave.inc
CHANGE MASTER TO master_use_gtid=slave_pos;
include/start_slave.inc
include/stop_slave.inc
SET GLOBAL binlog_format=@old_format;
SET GLOBAL slave_parallel_threads=0;
SET GLOBAL slave_parallel_threads=10;
include/start_slave.inc
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
include/start_slave.inc
...
...
mysql-test/suite/rpl/t/rpl_parallel.test
View file @
245ab473
...
...
@@ -604,6 +604,147 @@ CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
SET
sql_log_bin
=
1
;
--
connection
server_2
# Respawn all worker threads to clear any left-over debug_sync or other stuff.
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
binlog_format
=@
old_format
;
SET
GLOBAL
slave_parallel_threads
=
0
;
SET
GLOBAL
slave_parallel_threads
=
10
;
--
source
include
/
start_slave
.
inc
--
echo
***
3.
Same
as
(
2
),
but
not
using
gtid
mode
***
--
connection
server_2
--
source
include
/
stop_slave
.
inc
CHANGE
MASTER
TO
master_use_gtid
=
no
;
--
source
include
/
start_slave
.
inc
--
connection
server_1
# Set up three transactions on the master that will be group-committed
# together so they can be replicated in parallel on the slave.
--
connection
con_temp3
SET
debug_sync
=
'commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1'
;
SET
binlog_format
=
statement
;
send
INSERT
INTO
t3
VALUES
(
51
,
foo
(
51
,
'commit_before_prepare_ordered WAIT_FOR t2_waiting'
,
'commit_after_prepare_ordered SIGNAL t1_ready WAIT_FOR t1_cont'
));
--
connection
server_1
SET
debug_sync
=
'now WAIT_FOR master_queued1'
;
--
connection
con_temp4
SET
debug_sync
=
'commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2'
;
SET
binlog_format
=
statement
;
BEGIN
;
# This insert is just so we can get T2 to wait while a query is running that we
# can see in SHOW PROCESSLIST so we can get its thread_id to kill later.
INSERT
INTO
t3
VALUES
(
52
,
foo
(
52
,
'ha_write_row_end SIGNAL t2_query WAIT_FOR t2_cont'
,
''
));
# This insert sets up debug_sync points so that T2 will tell when it is at its
# wait point where we want to kill it - and when it has been killed.
INSERT
INTO
t3
VALUES
(
53
,
foo
(
53
,
'group_commit_waiting_for_prior SIGNAL t2_waiting'
,
'group_commit_waiting_for_prior_killed SIGNAL t2_killed'
));
send
COMMIT
;
--
connection
server_1
SET
debug_sync
=
'now WAIT_FOR master_queued2'
;
--
connection
con_temp5
SET
debug_sync
=
'commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3'
;
SET
binlog_format
=
statement
;
send
INSERT
INTO
t3
VALUES
(
54
,
foo
(
54
,
''
,
''
));
--
connection
server_1
SET
debug_sync
=
'now WAIT_FOR master_queued3'
;
SET
debug_sync
=
'now SIGNAL master_cont1'
;
--
connection
con_temp3
REAP
;
--
connection
con_temp4
REAP
;
--
connection
con_temp5
REAP
;
--
connection
server_1
SELECT
*
FROM
t3
WHERE
a
>=
50
ORDER
BY
a
;
--
connection
server_2
# Wait until T2 is inside executing its insert of 52, then find it in SHOW
# PROCESSLIST to know its thread id for KILL later.
SET
debug_sync
=
'now WAIT_FOR t2_query'
;
--
let
$thd_id
=
`SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE '%foo(52%' AND INFO NOT LIKE '%LIKE%'`
SET
debug_sync
=
'now SIGNAL t2_cont'
;
# Wait until T2 has entered its wait for T1 to commit, and T1 has
# progressed into its commit phase.
SET
debug_sync
=
'now WAIT_FOR t1_ready'
;
# Now kill the transaction T2.
--
replace_result
$thd_id
THD_ID
eval
KILL
$thd_id
;
# Wait until T2 has reacted on the kill.
SET
debug_sync
=
'now WAIT_FOR t2_killed'
;
# Now we can allow T1 to proceed.
SET
debug_sync
=
'now SIGNAL t1_cont'
;
--
let
$slave_sql_errno
=
1317
,
1963
--
source
include
/
wait_for_slave_sql_error
.
inc
SELECT
*
FROM
t3
WHERE
a
>=
50
ORDER
BY
a
;
# Now we have to disable the debug_sync statements, so they do not trigger
# when the events are retried.
SET
GLOBAL
slave_parallel_threads
=
0
;
SET
GLOBAL
slave_parallel_threads
=
10
;
SET
sql_log_bin
=
0
;
DROP
FUNCTION
foo
;
--
delimiter
||
CREATE
FUNCTION
foo
(
x
INT
,
d1
VARCHAR
(
500
),
d2
VARCHAR
(
500
))
RETURNS
INT
DETERMINISTIC
BEGIN
RETURN
x
;
END
||
--
delimiter
;
SET
sql_log_bin
=
1
;
--
connection
server_1
INSERT
INTO
t3
VALUES
(
59
,
0
);
--
save_master_pos
--
connection
server_2
START
SLAVE
SQL_THREAD
;
--
sync_with_master
SELECT
*
FROM
t3
WHERE
a
>=
50
ORDER
BY
a
;
# Restore the foo() function.
SET
sql_log_bin
=
0
;
DROP
FUNCTION
foo
;
--
delimiter
||
CREATE
FUNCTION
foo
(
x
INT
,
d1
VARCHAR
(
500
),
d2
VARCHAR
(
500
))
RETURNS
INT
DETERMINISTIC
BEGIN
IF
d1
!=
''
THEN
SET
debug_sync
=
d1
;
END
IF
;
IF
d2
!=
''
THEN
SET
debug_sync
=
d2
;
END
IF
;
RETURN
x
;
END
||
--
delimiter
;
SET
sql_log_bin
=
1
;
--
source
include
/
stop_slave
.
inc
CHANGE
MASTER
TO
master_use_gtid
=
slave_pos
;
--
source
include
/
start_slave
.
inc
--
connection
server_2
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
binlog_format
=@
old_format
;
...
...
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