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
8403d130
Commit
8403d130
authored
Dec 17, 2010
by
Georgi Kodinov
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
f32b50a7
9a8cb738
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
1100 additions
and
92 deletions
+1100
-92
mysql-test/include/io_thd_fault_injection.inc
mysql-test/include/io_thd_fault_injection.inc
+21
-0
mysql-test/include/restart_mysqld.inc
mysql-test/include/restart_mysqld.inc
+4
-2
mysql-test/r/join_outer_innodb.result
mysql-test/r/join_outer_innodb.result
+35
-0
mysql-test/suite/binlog/r/binlog_index.result
mysql-test/suite/binlog/r/binlog_index.result
+35
-1
mysql-test/suite/binlog/r/binlog_max_extension.result
mysql-test/suite/binlog/r/binlog_max_extension.result
+1
-2
mysql-test/suite/binlog/t/binlog_index.test
mysql-test/suite/binlog/t/binlog_index.test
+27
-1
mysql-test/suite/binlog/t/binlog_max_extension.test
mysql-test/suite/binlog/t/binlog_max_extension.test
+2
-1
mysql-test/suite/innodb/r/innodb_bug56947.result
mysql-test/suite/innodb/r/innodb_bug56947.result
+8
-0
mysql-test/suite/innodb/t/innodb_bug56947.test
mysql-test/suite/innodb/t/innodb_bug56947.test
+16
-0
mysql-test/suite/rpl/r/rpl_binlog_errors.result
mysql-test/suite/rpl/r/rpl_binlog_errors.result
+274
-0
mysql-test/suite/rpl/t/rpl_binlog_errors-master.opt
mysql-test/suite/rpl/t/rpl_binlog_errors-master.opt
+1
-0
mysql-test/suite/rpl/t/rpl_binlog_errors.test
mysql-test/suite/rpl/t/rpl_binlog_errors.test
+415
-0
mysql-test/t/join_outer_innodb.test
mysql-test/t/join_outer_innodb.test
+37
-0
sql/handler.cc
sql/handler.cc
+5
-1
sql/log.cc
sql/log.cc
+144
-39
sql/log.h
sql/log.h
+8
-8
sql/mysqld.cc
sql/mysqld.cc
+1
-1
sql/rpl_injector.cc
sql/rpl_injector.cc
+2
-4
sql/slave.cc
sql/slave.cc
+9
-7
sql/slave.h
sql/slave.h
+1
-1
sql/sql_load.cc
sql/sql_load.cc
+7
-0
sql/sql_parse.cc
sql/sql_parse.cc
+22
-9
sql/sql_reload.cc
sql/sql_reload.cc
+15
-6
sql/sql_reload.h
sql/sql_reload.h
+1
-1
sql/sql_repl.cc
sql/sql_repl.cc
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+8
-7
No files found.
mysql-test/include/io_thd_fault_injection.inc
0 → 100644
View file @
8403d130
#
# Takes the flag as an argument:
# -- let $io_thd_injection_fault_flag=+d,fault_injection_new_file_rotate_event
# -- source include/io_thd_fault_injection.inc
#
SET
@
old_debug
=@@
global
.
debug
;
--
disable_warnings
--
source
include
/
stop_slave
.
inc
--
enable_warnings
--
eval
SET
GLOBAL
debug
=
"+d,
$io_thd_injection_fault_flag
"
START
SLAVE
io_thread
;
--
source
include
/
wait_for_slave_io_to_stop
.
inc
--
source
include
/
wait_for_slave_io_error
.
inc
--
eval
SET
GLOBAL
debug
=
"-d,
$io_thd_injection_fault_flag
"
SET
GLOBAL
debug
=@
old_debug
;
# restart because slave is in bad shape
--
source
include
/
restart_mysqld
.
inc
mysql-test/include/restart_mysqld.inc
View file @
8403d130
# Write file to make mysql-test-run.pl expect the "crash", but don't start
# it until it's told to
--
exec
echo
"wait"
>
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
--
let
$_server_id
=
`SELECT @@server_id`
--
let
$_expect_file_name
=
$MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
$_server_id
.
expect
--
exec
echo
"wait"
>
$_expect_file_name
# Send shutdown to the connected server and give
# it 10 seconds to die before zapping it
shutdown_server
10
;
# Write file to make mysql-test-run.pl start up the server again
--
exec
echo
"restart"
>
$
MYSQLTEST_VARDIR
/
tmp
/
mysqld
.
1.
expect
--
exec
echo
"restart"
>
$
_expect_file_name
# Turn on reconnect
--
enable_reconnect
...
...
mysql-test/r/join_outer_innodb.result
View file @
8403d130
...
...
@@ -17,3 +17,38 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using where
DROP TABLE t1,t2;
#
# BUG#58456: Assertion 0 in QUICK_INDEX_MERGE_SELECT::need_sorted_output
# in opt_range.h
#
CREATE TABLE t1 (
col_int INT,
col_int_key INT,
pk INT NOT NULL,
PRIMARY KEY (pk),
KEY col_int_key (col_int_key)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES (NULL,1,1), (6,2,2), (5,3,3), (NULL,4,4);
INSERT INTO t1 VALUES (1,NULL,6), (8,5,7), (NULL,8,8), (8,NULL,5);
CREATE TABLE t2 (
pk INT PRIMARY KEY
) ENGINE=InnoDB;
EXPLAIN SELECT t1.pk
FROM t2 LEFT JOIN t1 ON t2.pk = t1.col_int
WHERE t1.col_int_key BETWEEN 5 AND 6
AND t1.pk IS NULL OR t1.pk IN (5)
ORDER BY pk;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 const PRIMARY,col_int_key PRIMARY 4 const 2 Using where
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.col_int 1 Using index
SELECT t1.pk
FROM t2 LEFT JOIN t1 ON t2.pk = t1.col_int
WHERE t1.col_int_key BETWEEN 5 AND 6
AND t1.pk IS NULL OR t1.pk IN (5)
ORDER BY pk;
pk
DROP TABLE t1,t2;
# End BUG#58456
mysql-test/suite/binlog/r/binlog_index.result
View file @
8403d130
...
...
@@ -2,7 +2,9 @@ call mtr.add_suppression('Attempting backtrace');
call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to process registered files that would be purged.');
call mtr.add_suppression('MSYQL_BIN_LOG::open failed to sync the index file');
call mtr.add_suppression('Turning logging off for the whole duration of the MySQL server process.');
call mtr.add_suppression('Could not open .*');
call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to clean registers before purging logs.');
RESET MASTER;
flush logs;
flush logs;
flush logs;
...
...
@@ -116,11 +118,31 @@ master-bin.000011
# This should put the server in unsafe state and stop
# accepting any command. If we inject a fault at this
# point and continue the execution the server crashes.
# Besides the flush command does not report an error.
#
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
SELECT @index;
@index
master-bin.000006
master-bin.000007
master-bin.000008
master-bin.000009
master-bin.000010
master-bin.000011
# fault_injection_registering_index
SET SESSION debug="+d,fault_injection_registering_index";
flush logs;
ERROR HY000: Can't open file: 'master-bin.000012' (errno: 1)
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
SELECT @index;
@index
master-bin.000006
master-bin.000007
master-bin.000008
master-bin.000009
master-bin.000010
master-bin.000011
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
SELECT @index;
@index
...
...
@@ -135,6 +157,18 @@ master-bin.000012
# fault_injection_updating_index
SET SESSION debug="+d,fault_injection_updating_index";
flush logs;
ERROR HY000: Can't open file: 'master-bin.000013' (errno: 1)
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
SELECT @index;
@index
master-bin.000006
master-bin.000007
master-bin.000008
master-bin.000009
master-bin.000010
master-bin.000011
master-bin.000012
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
SELECT @index;
@index
...
...
mysql-test/suite/binlog/r/binlog_max_extension.result
View file @
8403d130
...
...
@@ -3,6 +3,5 @@ call mtr.add_suppression("Log filename extension number exhausted:");
call mtr.add_suppression("Can't generate a unique log-filename");
RESET MASTER;
FLUSH LOGS;
Warnings:
Warning 1098 Can't generate a unique log-filename master-bin.(1-999)
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
mysql-test/suite/binlog/t/binlog_index.test
View file @
8403d130
...
...
@@ -10,9 +10,12 @@ call mtr.add_suppression('Attempting backtrace');
call
mtr
.
add_suppression
(
'MSYQL_BIN_LOG::purge_logs failed to process registered files that would be purged.'
);
call
mtr
.
add_suppression
(
'MSYQL_BIN_LOG::open failed to sync the index file'
);
call
mtr
.
add_suppression
(
'Turning logging off for the whole duration of the MySQL server process.'
);
call
mtr
.
add_suppression
(
'Could not open .*'
);
call
mtr
.
add_suppression
(
'MSYQL_BIN_LOG::purge_logs failed to clean registers before purging logs.'
);
let
$old
=
`select @@debug`
;
RESET
MASTER
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
let
$INDEX
=
$MYSQLD_DATADIR
/
master
-
bin
.
index
;
...
...
@@ -205,12 +208,26 @@ SELECT @index;
--
echo
# This should put the server in unsafe state and stop
--
echo
# accepting any command. If we inject a fault at this
--
echo
# point and continue the execution the server crashes.
--
echo
# Besides the flush command does not report an error.
--
echo
#
--
chmod
0644
$INDEX
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
--
eval
SET
@
index
=
LOAD_FILE
(
'$index'
)
--
replace_regex
/
\
.
[
\\\
/
]
master
/
master
/
SELECT
@
index
;
--
echo
# fault_injection_registering_index
SET
SESSION
debug
=
"+d,fault_injection_registering_index"
;
--
replace_regex
/
\
.
[
\\\
/
]
master
/
master
/
--
error
ER_CANT_OPEN_FILE
flush
logs
;
--
chmod
0644
$INDEX
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
--
eval
SET
@
index
=
LOAD_FILE
(
'$index'
)
--
replace_regex
/
\
.
[
\\\
/
]
master
/
master
/
SELECT
@
index
;
--
source
include
/
restart_mysqld
.
inc
--
chmod
0644
$INDEX
...
...
@@ -221,7 +238,16 @@ SELECT @index;
--
echo
# fault_injection_updating_index
SET
SESSION
debug
=
"+d,fault_injection_updating_index"
;
--
replace_regex
/
\
.
[
\\\
/
]
master
/
master
/
--
error
ER_CANT_OPEN_FILE
flush
logs
;
--
chmod
0644
$INDEX
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
--
eval
SET
@
index
=
LOAD_FILE
(
'$index'
)
--
replace_regex
/
\
.
[
\\\
/
]
master
/
master
/
SELECT
@
index
;
--
source
include
/
restart_mysqld
.
inc
--
chmod
0644
$INDEX
...
...
mysql-test/suite/binlog/t/binlog_max_extension.test
View file @
8403d130
...
...
@@ -58,7 +58,8 @@ EOF
# Assertion
###########
# assertion: should throw warning
# assertion: should raise error
--
error
ER_NO_UNIQUE_LOGFILE
FLUSH
LOGS
;
##############
...
...
mysql-test/suite/innodb/r/innodb_bug56947.result
0 → 100644
View file @
8403d130
SET @old_innodb_file_per_table=@@innodb_file_per_table;
SET GLOBAL innodb_file_per_table=0;
create table bug56947(a int not null) engine = innodb;
CREATE TABLE `bug56947#1`(a int) ENGINE=InnoDB;
alter table bug56947 add unique index (a);
ERROR HY000: Table 'test.bug56947#1' already exists
drop table `bug56947#1`;
drop table bug56947;
mysql-test/suite/innodb/t/innodb_bug56947.test
0 → 100644
View file @
8403d130
#
# Bug #56947 valgrind reports a memory leak in innodb-plugin.innodb-index
#
--
source
include
/
have_innodb
.
inc
SET
@
old_innodb_file_per_table
=@@
innodb_file_per_table
;
# avoid a message about filed *.ibd file creation in the error log
SET
GLOBAL
innodb_file_per_table
=
0
;
create
table
bug56947
(
a
int
not
null
)
engine
=
innodb
;
CREATE
TABLE
`bug56947#1`
(
a
int
)
ENGINE
=
InnoDB
;
--
error
156
alter
table
bug56947
add
unique
index
(
a
);
drop
table
`bug56947#1`
;
drop
table
bug56947
;
--
disable_query_log
SET
GLOBAL
innodb_file_per_table
=@
old_innodb_file_per_table
;
mysql-test/suite/rpl/r/rpl_binlog_errors.result
0 → 100644
View file @
8403d130
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
#######################################################################
####################### PART 1: MASTER TESTS ##########################
#######################################################################
include/stop_slave.inc
call mtr.add_suppression("Can't generate a unique log-filename");
call mtr.add_suppression("Writing one row to the row-based binary log failed.*");
call mtr.add_suppression("Error writing file .*");
SET @old_debug= @@global.debug;
SELECT repeat('x',8192) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data';
SELECT repeat('x',10) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data';
RESET MASTER;
###################### TEST #1
FLUSH LOGS;
# assert: must show two binlogs
show binary logs;
Log_name File_size
master-bin.000001 #
master-bin.000002 #
###################### TEST #2
RESET MASTER;
SET GLOBAL debug="+d,error_unique_log_filename";
FLUSH LOGS;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# assert: must show one binlog
show binary logs;
Log_name File_size
master-bin.000001 #
SET GLOBAL debug="";
RESET MASTER;
###################### TEST #3
CREATE TABLE t1 (a INT);
CREATE TABLE t2 (a VARCHAR(16384)) Engine=InnoDB;
CREATE TABLE t4 (a VARCHAR(16384));
INSERT INTO t1 VALUES (1);
RESET MASTER;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
# assert: must show two binlog
show binary logs;
Log_name File_size
master-bin.000001 #
master-bin.000002 #
SET GLOBAL debug="-d,error_unique_log_filename";
DELETE FROM t2;
RESET MASTER;
###################### TEST #4
SET GLOBAL debug="+d,error_unique_log_filename";
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# assert: must show one entry
SELECT count(*) FROM t2;
count(*)
1
SET GLOBAL debug="-d,error_unique_log_filename";
DELETE FROM t2;
RESET MASTER;
###################### TEST #5
SET GLOBAL debug="+d,error_unique_log_filename";
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data' INTO TABLE t2;
# assert: must show one entry
SELECT count(*) FROM t2;
count(*)
1
SET GLOBAL debug="-d,error_unique_log_filename";
DELETE FROM t2;
RESET MASTER;
###################### TEST #6
SET GLOBAL debug="+d,error_unique_log_filename";
SET AUTOCOMMIT=0;
INSERT INTO t2 VALUES ('muse');
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
INSERT INTO t2 VALUES ('muse');
COMMIT;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# assert: must show three entries
SELECT count(*) FROM t2;
count(*)
3
SET AUTOCOMMIT= 1;
SET GLOBAL debug="-d,error_unique_log_filename";
DELETE FROM t2;
RESET MASTER;
###################### TEST #7
SET GLOBAL debug="+d,error_unique_log_filename";
SELECT count(*) FROM t4;
count(*)
0
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# assert: must show 1 entry
SELECT count(*) FROM t4;
count(*)
1
### check that the incident event is written to the current log
SET GLOBAL debug="-d,error_unique_log_filename";
FLUSH LOGS;
SHOW BINLOG EVENTS IN 'BINLOG_FILE' FROM <binlog_start> LIMIT 1;
Log_name Pos Event_type Server_id End_log_pos Info
BINLOG_FILE # Incident # # #1 (LOST_EVENTS)
DELETE FROM t4;
RESET MASTER;
###################### TEST #8
SET GLOBAL debug="+d,error_unique_log_filename";
# must show 0 entries
SELECT count(*) FROM t4;
count(*)
0
SELECT count(*) FROM t2;
count(*)
0
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
INSERT INTO t2 VALUES ('aaa'), ('bbb'), ('ccc');
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# INFO: Count(*) Before Offending DELETEs
# assert: must show 1 entry
SELECT count(*) FROM t4;
count(*)
1
# assert: must show 4 entries
SELECT count(*) FROM t2;
count(*)
4
DELETE FROM t4;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
DELETE FROM t2;
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
# INFO: Count(*) After Offending DELETEs
# assert: must show zero entries
SELECT count(*) FROM t4;
count(*)
0
SELECT count(*) FROM t2;
count(*)
0
SET GLOBAL debug="-d,error_unique_log_filename";
###################### TEST #9
SET GLOBAL debug="+d,error_unique_log_filename";
SET SQL_LOG_BIN=0;
INSERT INTO t2 VALUES ('aaa'), ('bbb'), ('ccc'), ('ddd');
INSERT INTO t4 VALUES ('eee'), ('fff'), ('ggg'), ('hhh');
# assert: must show four entries
SELECT count(*) FROM t2;
count(*)
4
SELECT count(*) FROM t4;
count(*)
4
DELETE FROM t2;
DELETE FROM t4;
# assert: must show zero entries
SELECT count(*) FROM t2;
count(*)
0
SELECT count(*) FROM t4;
count(*)
0
SET SQL_LOG_BIN=1;
SET GLOBAL debug="-d,error_unique_log_filename";
###################### TEST #10
call mtr.add_suppression("MSYQL_BIN_LOG::open failed to sync the index file.");
call mtr.add_suppression("Could not open .*");
RESET MASTER;
SHOW WARNINGS;
Level Code Message
SET GLOBAL debug="+d,fault_injection_registering_index";
FLUSH LOGS;
ERROR HY000: Can't open file: 'master-bin.000002' (errno: 1)
SET GLOBAL debug="-d,fault_injection_registering_index";
SHOW BINARY LOGS;
ERROR HY000: You are not using binary logging
CREATE TABLE t5 (a INT);
INSERT INTO t4 VALUES ('bbbbb');
INSERT INTO t2 VALUES ('aaaaa');
DELETE FROM t4;
DELETE FROM t2;
DROP TABLE t5;
###################### TEST #11
SET GLOBAL debug="+d,fault_injection_openning_index";
FLUSH LOGS;
ERROR HY000: Can't open file: 'master-bin.index' (errno: 1)
SET GLOBAL debug="-d,fault_injection_openning_index";
RESET MASTER;
ERROR HY000: Binlog closed, cannot RESET MASTER
CREATE TABLE t5 (a INT);
INSERT INTO t4 VALUES ('bbbbb');
INSERT INTO t2 VALUES ('aaaaa');
DELETE FROM t4;
DELETE FROM t2;
DROP TABLE t5;
###################### TEST #12
SET GLOBAL debug="+d,fault_injection_new_file_rotate_event";
FLUSH LOGS;
ERROR HY000: Can't open file: 'master-bin' (errno: 2)
SET GLOBAL debug="-d,fault_injection_new_file_rotate_event";
RESET MASTER;
ERROR HY000: Binlog closed, cannot RESET MASTER
CREATE TABLE t5 (a INT);
INSERT INTO t4 VALUES ('bbbbb');
INSERT INTO t2 VALUES ('aaaaa');
DELETE FROM t4;
DELETE FROM t2;
DROP TABLE t5;
SET GLOBAL debug= @old_debug;
DROP TABLE t1, t2, t4;
RESET MASTER;
include/start_slave.inc
#######################################################################
####################### PART 2: SLAVE TESTS ###########################
#######################################################################
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
call mtr.add_suppression("Slave I/O: Relay log write failure: could not queue event from master.*");
call mtr.add_suppression("Error writing file .*");
call mtr.add_suppression("Could not open .*");
call mtr.add_suppression("MSYQL_BIN_LOG::open failed to sync the index file.");
call mtr.add_suppression("Can't generate a unique log-filename .*");
###################### TEST #13
SET @old_debug=@@global.debug;
include/stop_slave.inc
SET GLOBAL debug="+d,error_unique_log_filename";
START SLAVE io_thread;
Last_IO_Error = Relay log write failure: could not queue event from master
SET GLOBAL debug="-d,error_unique_log_filename";
SET GLOBAL debug=@old_debug;
###################### TEST #14
SET @old_debug=@@global.debug;
include/stop_slave.inc
SET GLOBAL debug="+d,fault_injection_new_file_rotate_event";
START SLAVE io_thread;
Last_IO_Error = Relay log write failure: could not queue event from master
SET GLOBAL debug="-d,fault_injection_new_file_rotate_event";
SET GLOBAL debug=@old_debug;
###################### TEST #15
SET @old_debug=@@global.debug;
include/stop_slave.inc
SET GLOBAL debug="+d,fault_injection_registering_index";
START SLAVE io_thread;
Last_IO_Error = Relay log write failure: could not queue event from master
SET GLOBAL debug="-d,fault_injection_registering_index";
SET GLOBAL debug=@old_debug;
###################### TEST #16
SET @old_debug=@@global.debug;
include/stop_slave.inc
SET GLOBAL debug="+d,fault_injection_openning_index";
START SLAVE io_thread;
Last_IO_Error = Relay log write failure: could not queue event from master
SET GLOBAL debug="-d,fault_injection_openning_index";
SET GLOBAL debug=@old_debug;
include/stop_slave.inc
SET GLOBAL debug=@old_debug;
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
mysql-test/suite/rpl/t/rpl_binlog_errors-master.opt
0 → 100644
View file @
8403d130
--max_binlog_size=4096
mysql-test/suite/rpl/t/rpl_binlog_errors.test
0 → 100644
View file @
8403d130
This diff is collapsed.
Click to expand it.
mysql-test/t/join_outer_innodb.test
View file @
8403d130
...
...
@@ -24,3 +24,40 @@ SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE
t1
.
name
LIKE
'A%'
OR
FALSE
;
DROP
TABLE
t1
,
t2
;
--
echo
#
--
echo
# BUG#58456: Assertion 0 in QUICK_INDEX_MERGE_SELECT::need_sorted_output
--
echo
# in opt_range.h
--
echo
#
CREATE
TABLE
t1
(
col_int
INT
,
col_int_key
INT
,
pk
INT
NOT
NULL
,
PRIMARY
KEY
(
pk
),
KEY
col_int_key
(
col_int_key
)
)
ENGINE
=
InnoDB
;
INSERT
INTO
t1
VALUES
(
NULL
,
1
,
1
),
(
6
,
2
,
2
),
(
5
,
3
,
3
),
(
NULL
,
4
,
4
);
INSERT
INTO
t1
VALUES
(
1
,
NULL
,
6
),
(
8
,
5
,
7
),
(
NULL
,
8
,
8
),
(
8
,
NULL
,
5
);
CREATE
TABLE
t2
(
pk
INT
PRIMARY
KEY
)
ENGINE
=
InnoDB
;
let
$query
=
SELECT
t1
.
pk
FROM
t2
LEFT
JOIN
t1
ON
t2
.
pk
=
t1
.
col_int
WHERE
t1
.
col_int_key
BETWEEN
5
AND
6
AND
t1
.
pk
IS
NULL
OR
t1
.
pk
IN
(
5
)
ORDER
BY
pk
;
--
echo
--
eval
EXPLAIN
$query
--
echo
--
eval
$query
--
echo
DROP
TABLE
t1
,
t2
;
--
echo
# End BUG#58456
sql/handler.cc
View file @
8403d130
...
...
@@ -1237,7 +1237,11 @@ int ha_commit_trans(THD *thd, bool all)
error
=
ha_commit_one_phase
(
thd
,
all
)
?
(
cookie
?
2
:
1
)
:
0
;
DBUG_EXECUTE_IF
(
"crash_commit_before_unlog"
,
DBUG_SUICIDE
(););
if
(
cookie
)
tc_log
->
unlog
(
cookie
,
xid
);
if
(
tc_log
->
unlog
(
cookie
,
xid
))
{
error
=
2
;
goto
end
;
}
DBUG_EXECUTE_IF
(
"crash_commit_after"
,
DBUG_SUICIDE
(););
RUN_HOOK
(
transaction
,
after_commit
,
(
thd
,
FALSE
));
end:
...
...
sql/log.cc
View file @
8403d130
This diff is collapsed.
Click to expand it.
sql/log.h
View file @
8403d130
...
...
@@ -45,7 +45,7 @@ class TC_LOG
virtual
int
open
(
const
char
*
opt_name
)
=
0
;
virtual
void
close
()
=
0
;
virtual
int
log_xid
(
THD
*
thd
,
my_xid
xid
)
=
0
;
virtual
void
unlog
(
ulong
cookie
,
my_xid
xid
)
=
0
;
virtual
int
unlog
(
ulong
cookie
,
my_xid
xid
)
=
0
;
};
class
TC_LOG_DUMMY
:
public
TC_LOG
// use it to disable the logging
...
...
@@ -55,7 +55,7 @@ class TC_LOG_DUMMY: public TC_LOG // use it to disable the logging
int
open
(
const
char
*
opt_name
)
{
return
0
;
}
void
close
()
{
}
int
log_xid
(
THD
*
thd
,
my_xid
xid
)
{
return
1
;
}
void
unlog
(
ulong
cookie
,
my_xid
xid
)
{
}
int
unlog
(
ulong
cookie
,
my_xid
xid
)
{
return
0
;
}
};
#ifdef HAVE_MMAP
...
...
@@ -100,7 +100,7 @@ class TC_LOG_MMAP: public TC_LOG
int
open
(
const
char
*
opt_name
);
void
close
();
int
log_xid
(
THD
*
thd
,
my_xid
xid
);
void
unlog
(
ulong
cookie
,
my_xid
xid
);
int
unlog
(
ulong
cookie
,
my_xid
xid
);
int
recover
();
private:
...
...
@@ -334,8 +334,8 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
new_file() is locking. new_file_without_locking() does not acquire
LOCK_log.
*/
void
new_file_without_locking
();
void
new_file_impl
(
bool
need_lock
);
int
new_file_without_locking
();
int
new_file_impl
(
bool
need_lock
);
public:
MYSQL_LOG
::
generate_name
;
...
...
@@ -365,7 +365,7 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
int
open
(
const
char
*
opt_name
);
void
close
();
int
log_xid
(
THD
*
thd
,
my_xid
xid
);
void
unlog
(
ulong
cookie
,
my_xid
xid
);
int
unlog
(
ulong
cookie
,
my_xid
xid
);
int
recover
(
IO_CACHE
*
log
,
Format_description_log_event
*
fdle
);
#if !defined(MYSQL_CLIENT)
...
...
@@ -408,7 +408,7 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
bool
open_index_file
(
const
char
*
index_file_name_arg
,
const
char
*
log_name
,
bool
need_mutex
);
/* Use this to start writing a new log file */
void
new_file
();
int
new_file
();
bool
write
(
Log_event
*
event_info
);
// binary log write
bool
write
(
THD
*
thd
,
IO_CACHE
*
cache
,
Log_event
*
commit_event
,
bool
incident
);
...
...
@@ -432,7 +432,7 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG
void
make_log_name
(
char
*
buf
,
const
char
*
log_ident
);
bool
is_active
(
const
char
*
log_file_name
);
int
update_log_index
(
LOG_INFO
*
linfo
,
bool
need_update_threads
);
void
rotate_and_purge
(
uint
flags
);
int
rotate_and_purge
(
uint
flags
);
/**
Flush binlog cache and synchronize to disk.
...
...
sql/mysqld.cc
View file @
8403d130
...
...
@@ -2736,7 +2736,7 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
case
SIGHUP
:
if
(
!
abort_loop
)
{
bool
not_used
;
int
not_used
;
mysql_print_status
();
// Print some debug info
reload_acl_and_cache
((
THD
*
)
0
,
(
REFRESH_LOG
|
REFRESH_TABLES
|
REFRESH_FAST
|
...
...
sql/rpl_injector.cc
View file @
8403d130
...
...
@@ -237,8 +237,7 @@ int injector::record_incident(THD *thd, Incident incident)
Incident_log_event
ev
(
thd
,
incident
);
if
(
int
error
=
mysql_bin_log
.
write
(
&
ev
))
return
error
;
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
return
0
;
return
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
}
int
injector
::
record_incident
(
THD
*
thd
,
Incident
incident
,
LEX_STRING
const
message
)
...
...
@@ -246,6 +245,5 @@ int injector::record_incident(THD *thd, Incident incident, LEX_STRING const mess
Incident_log_event
ev
(
thd
,
incident
,
message
);
if
(
int
error
=
mysql_bin_log
.
write
(
&
ev
))
return
error
;
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
return
0
;
return
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
}
sql/slave.cc
View file @
8403d130
...
...
@@ -523,7 +523,8 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock)
if
(
flush_master_info
(
mi
,
TRUE
,
FALSE
))
DBUG_RETURN
(
ER_ERROR_DURING_FLUSH_LOGS
);
if
(
my_sync
(
mi
->
rli
.
relay_log
.
get_log_file
()
->
file
,
MYF
(
MY_WME
)))
if
(
mi
->
rli
.
relay_log
.
is_open
()
&&
my_sync
(
mi
->
rli
.
relay_log
.
get_log_file
()
->
file
,
MYF
(
MY_WME
)))
DBUG_RETURN
(
ER_ERROR_DURING_FLUSH_LOGS
);
if
(
my_sync
(
mi
->
fd
,
MYF
(
MY_WME
)))
...
...
@@ -3632,8 +3633,7 @@ static int process_io_rotate(Master_info *mi, Rotate_log_event *rev)
Rotate the relay log makes binlog format detection easier (at next slave
start or mysqlbinlog)
*/
rotate_relay_log
(
mi
);
/* will take the right mutexes */
DBUG_RETURN
(
0
);
DBUG_RETURN
(
rotate_relay_log
(
mi
)
/* will take the right mutexes */
);
}
/*
...
...
@@ -4870,12 +4870,13 @@ event(errno: %d cur_log->error: %d)",
is void).
*/
void
rotate_relay_log
(
Master_info
*
mi
)
int
rotate_relay_log
(
Master_info
*
mi
)
{
DBUG_ENTER
(
"rotate_relay_log"
);
Relay_log_info
*
rli
=
&
mi
->
rli
;
int
error
=
0
;
DBUG_EXECUTE_IF
(
"crash_before_rotate_relaylog"
,
abort
(););
DBUG_EXECUTE_IF
(
"crash_before_rotate_relaylog"
,
DBUG_SUICIDE
(););
/*
We need to test inited because otherwise, new_file() will attempt to lock
...
...
@@ -4888,7 +4889,8 @@ void rotate_relay_log(Master_info* mi)
}
/* If the relay log is closed, new_file() will do nothing. */
rli
->
relay_log
.
new_file
();
if
((
error
=
rli
->
relay_log
.
new_file
()))
goto
end
;
/*
We harvest now, because otherwise BIN_LOG_HEADER_SIZE will not immediately
...
...
@@ -4905,7 +4907,7 @@ void rotate_relay_log(Master_info* mi)
*/
rli
->
relay_log
.
harvest_bytes_written
(
&
rli
->
log_space_total
);
end:
DBUG_
VOID_RETURN
;
DBUG_
RETURN
(
error
)
;
}
...
...
sql/slave.h
View file @
8403d130
...
...
@@ -205,7 +205,7 @@ int purge_relay_logs(Relay_log_info* rli, THD *thd, bool just_reset,
const
char
**
errmsg
);
void
set_slave_thread_options
(
THD
*
thd
);
void
set_slave_thread_default_charset
(
THD
*
thd
,
Relay_log_info
const
*
rli
);
void
rotate_relay_log
(
Master_info
*
mi
);
int
rotate_relay_log
(
Master_info
*
mi
);
int
apply_event_and_update_pos
(
Log_event
*
ev
,
THD
*
thd
,
Relay_log_info
*
rli
);
pthread_handler_t
handle_slave_io
(
void
*
arg
);
...
...
sql/sql_load.cc
View file @
8403d130
...
...
@@ -625,6 +625,13 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
transactional_table
,
errcode
);
}
/*
Flushing the IO CACHE while writing the execute load query log event
may result in error (for instance, because the max_binlog_size has been
reached, and rotation of the binary log failed).
*/
error
=
error
||
mysql_bin_log
.
get_log_file
()
->
error
;
}
if
(
error
)
goto
err
;
...
...
sql/sql_parse.cc
View file @
8403d130
...
...
@@ -1218,7 +1218,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
#endif
case
COM_REFRESH
:
{
bool
not_used
;
int
not_used
;
status_var_increment
(
thd
->
status_var
.
com_stat
[
SQLCOM_FLUSH
]);
ulong
options
=
(
ulong
)
(
uchar
)
packet
[
0
];
if
(
trans_commit_implicit
(
thd
))
...
...
@@ -2780,7 +2780,11 @@ case SQLCOM_PREPARE:
{
Incident_log_event
ev
(
thd
,
incident
);
(
void
)
mysql_bin_log
.
write
(
&
ev
);
/* error is ignored */
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
if
(
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
))
{
res
=
1
;
break
;
}
}
DBUG_PRINT
(
"debug"
,
(
"Just after generate_incident()"
));
}
...
...
@@ -3516,8 +3520,7 @@ case SQLCOM_PREPARE:
lex
->
no_write_to_binlog
=
1
;
case
SQLCOM_FLUSH
:
{
bool
write_to_binlog
;
int
write_to_binlog
;
if
(
check_global_access
(
thd
,
RELOAD_ACL
))
goto
error
;
...
...
@@ -3546,12 +3549,22 @@ case SQLCOM_PREPARE:
/*
Presumably, RESET and binlog writing doesn't require synchronization
*/
if
(
!
lex
->
no_write_to_binlog
&&
write_to_binlog
)
if
(
write_to_binlog
>
0
)
// we should write
{
if
(
!
lex
->
no_write_to_binlog
)
res
=
write_bin_log
(
thd
,
FALSE
,
thd
->
query
(),
thd
->
query_length
());
}
else
if
(
write_to_binlog
<
0
)
{
if
((
res
=
write_bin_log
(
thd
,
FALSE
,
thd
->
query
(),
thd
->
query_length
())))
break
;
}
my_ok
(
thd
);
/*
We should not write, but rather report error because
reload_acl_and_cache binlog interactions failed
*/
res
=
1
;
}
if
(
!
res
)
my_ok
(
thd
);
}
break
;
...
...
sql/sql_reload.cc
View file @
8403d130
...
...
@@ -33,7 +33,11 @@
@param thd Thread handler (can be NULL!)
@param options What should be reset/reloaded (tables, privileges, slave...)
@param tables Tables to flush (if any)
@param write_to_binlog True if we can write to the binlog.
@param write_to_binlog < 0 if there was an error while interacting with the binary log inside
reload_acl_and_cache,
0 if we should not write to the binary log,
> 0 if we can write to the binlog.
@note Depending on 'options', it may be very bad to write the
query to the binlog (e.g. FLUSH SLAVE); this is a
...
...
@@ -47,11 +51,11 @@
*/
bool
reload_acl_and_cache
(
THD
*
thd
,
unsigned
long
options
,
TABLE_LIST
*
tables
,
bool
*
write_to_binlog
)
TABLE_LIST
*
tables
,
int
*
write_to_binlog
)
{
bool
result
=
0
;
select_errors
=
0
;
/* Write if more errors */
bool
tmp_
write_to_binlog
=
1
;
int
tmp_write_to_binlog
=
*
write_to_binlog
=
1
;
DBUG_ASSERT
(
!
thd
||
!
thd
->
in_sub_stmt
);
...
...
@@ -136,13 +140,17 @@ bool reload_acl_and_cache(THD *thd, unsigned long options,
*/
tmp_write_to_binlog
=
0
;
if
(
mysql_bin_log
.
is_open
())
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
);
{
if
(
mysql_bin_log
.
rotate_and_purge
(
RP_FORCE_ROTATE
))
*
write_to_binlog
=
-
1
;
}
}
if
(
options
&
REFRESH_RELAY_LOG
)
{
#ifdef HAVE_REPLICATION
mysql_mutex_lock
(
&
LOCK_active_mi
);
rotate_relay_log
(
active_mi
);
if
(
rotate_relay_log
(
active_mi
))
*
write_to_binlog
=
-
1
;
mysql_mutex_unlock
(
&
LOCK_active_mi
);
#endif
}
...
...
@@ -274,7 +282,8 @@ bool reload_acl_and_cache(THD *thd, unsigned long options,
#endif
if
(
options
&
REFRESH_USER_RESOURCES
)
reset_mqh
((
LEX_USER
*
)
NULL
,
0
);
/* purecov: inspected */
*
write_to_binlog
=
tmp_write_to_binlog
;
if
(
*
write_to_binlog
!=
-
1
)
*
write_to_binlog
=
tmp_write_to_binlog
;
/*
If the query was killed then this function must fail.
*/
...
...
sql/sql_reload.h
View file @
8403d130
...
...
@@ -19,7 +19,7 @@ class THD;
struct
TABLE_LIST
;
bool
reload_acl_and_cache
(
THD
*
thd
,
unsigned
long
options
,
TABLE_LIST
*
tables
,
bool
*
write_to_binlog
);
TABLE_LIST
*
tables
,
int
*
write_to_binlog
);
bool
flush_tables_with_read_lock
(
THD
*
thd
,
TABLE_LIST
*
all_tables
);
...
...
sql/sql_repl.cc
View file @
8403d130
...
...
@@ -1925,7 +1925,7 @@ bool show_binlogs(THD* thd)
if
(
!
mysql_bin_log
.
is_open
())
{
my_
message
(
ER_NO_BINARY_LOGGING
,
ER
(
ER_NO_BINARY_LOGGING
)
,
MYF
(
0
));
my_
error
(
ER_NO_BINARY_LOGGING
,
MYF
(
0
));
DBUG_RETURN
(
TRUE
);
}
...
...
sql/sql_select.cc
View file @
8403d130
...
...
@@ -6499,10 +6499,11 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
{
/* Use quick key read if it's a constant and it's not used
with key reading */
if
(
tab
->
needed_reg
.
is_clear_all
()
&&
tab
->
type
!=
JT_EQ_REF
&&
tab
->
type
!=
JT_FT
&&
(
tab
->
type
!=
JT_REF
||
(
uint
)
tab
->
ref
.
key
==
tab
->
quick
->
index
))
{
if
(
tab
->
needed_reg
.
is_clear_all
()
&&
tab
->
type
!=
JT_EQ_REF
&&
tab
->
type
!=
JT_FT
&&
((
tab
->
type
!=
JT_CONST
&&
tab
->
type
!=
JT_REF
)
||
(
uint
)
tab
->
ref
.
key
==
tab
->
quick
->
index
))
{
sel
->
quick
=
tab
->
quick
;
// Use value from get_quick_...
sel
->
quick_keys
.
clear_all
();
sel
->
needed_reg
.
clear_all
();
...
...
@@ -13857,7 +13858,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
SYNOPSIS
create_sort_index()
thd Thread handler
tab Table to sort (in join structure)
join Join with table to sort
order How table should be sorted
filesort_limit Max number of rows that needs to be sorted
select_limit Max number of rows in final output
...
...
@@ -13867,8 +13868,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
IMPLEMENTATION
- If there is an index that can be used,
'tab' is modified to use
this index.
- If there is an index that can be used,
the first non-const join_tab in
'join' is modified to use
this index.
- If no index, create with filesort() an index file that can be used to
retrieve rows in order (should be done with 'read_record').
The sorted data is stored in tab->table and will be freed when calling
...
...
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