mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from _my_b_write on CREATE after RESET MASTER
Merge branch '10.2' into 10.3
This commit is contained in:
44
mysql-test/suite/binlog/r/binlog_no_uniqfile_crash.result
Normal file
44
mysql-test/suite/binlog/r/binlog_no_uniqfile_crash.result
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
call mtr.add_suppression("Next log extension: 2147483647. Remaining log filename extensions: 0");
|
||||||
|
call mtr.add_suppression("Log filename extension number exhausted:.");
|
||||||
|
call mtr.add_suppression("Can't generate a unique log-filename");
|
||||||
|
call mtr.add_suppression("MYSQL_BIN_LOG::open failed to generate new file name.");
|
||||||
|
call mtr.add_suppression("Could not use master-bin for logging");
|
||||||
|
"Test case verifies creation of binary log with max entension value."
|
||||||
|
RESET MASTER TO 2147483647;
|
||||||
|
show binary logs;
|
||||||
|
Log_name File_size
|
||||||
|
master-bin.2147483647 #
|
||||||
|
FOUND 1 /Next log extension: 2147483647. Remaining log filename extensions: 0./ in mysqld.1.err
|
||||||
|
CREATE DATABASE db1;
|
||||||
|
include/show_binlog_events.inc
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.2147483647 # Gtid # # GTID #-#-#
|
||||||
|
master-bin.2147483647 # Query # # CREATE DATABASE db1
|
||||||
|
RESET MASTER TO 2147483648;
|
||||||
|
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||||
|
|
||||||
|
FOUND 1 /Turning logging off for the whole duration of the MariaDB server process/ in mysqld.1.err
|
||||||
|
"Following CREATE DATABSE db2 command will not be present in binary log"
|
||||||
|
"as binary log got closed due to ER_NO_UNIQUE_LOGFILE error."
|
||||||
|
CREATE DATABASE db2;
|
||||||
|
"RESET MASTER command fails to generate a new binary log"
|
||||||
|
"log-bin will be disabled and server needs to be restarted to"
|
||||||
|
"re-enable the binary log."
|
||||||
|
SHOW BINARY LOGS;
|
||||||
|
ERROR HY000: You are not using binary logging
|
||||||
|
show binary logs;
|
||||||
|
Log_name File_size
|
||||||
|
master-bin.000001 #
|
||||||
|
SHOW DATABASES LIKE 'db%';
|
||||||
|
Database (db%)
|
||||||
|
db1
|
||||||
|
db2
|
||||||
|
include/show_binlog_events.inc
|
||||||
|
DROP DATABASE db1;
|
||||||
|
DROP DATABASE db2;
|
||||||
|
include/show_binlog_events.inc
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Gtid # # GTID #-#-#
|
||||||
|
master-bin.000001 # Query # # DROP DATABASE db1
|
||||||
|
master-bin.000001 # Gtid # # GTID #-#-#
|
||||||
|
master-bin.000001 # Query # # DROP DATABASE db2
|
83
mysql-test/suite/binlog/t/binlog_no_uniqfile_crash.test
Normal file
83
mysql-test/suite/binlog/t/binlog_no_uniqfile_crash.test
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
# ==== Purpose ====
|
||||||
|
#
|
||||||
|
# Test verifies that when RESET MASTER TO # command is supplied with binlog
|
||||||
|
# extension number greater than 2147483647 the command should report
|
||||||
|
# appropriate error and binary log should be disabled. It should not result in
|
||||||
|
# a crash.
|
||||||
|
#
|
||||||
|
# ==== Implementation ====
|
||||||
|
#
|
||||||
|
# Steps:
|
||||||
|
# 0 - Verify case with max binary log extension. Max value is '2147483647'
|
||||||
|
# 1 - Confirm that SHOW BINARY LOGS displays a binary log with '2147483647'
|
||||||
|
# 2 - Verify that events are successfully written into max extension file.
|
||||||
|
# 3 - Try to create a binary log with extension greater than max allowed
|
||||||
|
# value '2147483648', verify ER_NO_UNIQUE_LOGFILE error is reported.
|
||||||
|
# 4 - Execute CREATE DATABASE db2 statement and verify server dosn't crash.
|
||||||
|
# 5 - Execute SHOW BINARY LOG command and verify that it reports
|
||||||
|
# ER_NO_BINARY_LOGGING error.
|
||||||
|
# 6 - Restart the server and verify that databse 'db2' exists and it it not
|
||||||
|
# present in the binary log.
|
||||||
|
#
|
||||||
|
# ==== References ====
|
||||||
|
#
|
||||||
|
# MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from
|
||||||
|
# _my_b_write on CREATE after RESET MASTER
|
||||||
|
#
|
||||||
|
--source include/have_log_bin.inc
|
||||||
|
|
||||||
|
call mtr.add_suppression("Next log extension: 2147483647. Remaining log filename extensions: 0");
|
||||||
|
call mtr.add_suppression("Log filename extension number exhausted:.");
|
||||||
|
call mtr.add_suppression("Can't generate a unique log-filename");
|
||||||
|
call mtr.add_suppression("MYSQL_BIN_LOG::open failed to generate new file name.");
|
||||||
|
call mtr.add_suppression("Could not use master-bin for logging");
|
||||||
|
|
||||||
|
|
||||||
|
--echo "Test case verifies creation of binary log with max entension value."
|
||||||
|
RESET MASTER TO 2147483647;
|
||||||
|
--source include/show_binary_logs.inc
|
||||||
|
|
||||||
|
# Check error log for correct messages.
|
||||||
|
let $log_error_= `SELECT @@GLOBAL.log_error`;
|
||||||
|
if(!$log_error_)
|
||||||
|
{
|
||||||
|
# MySQL Server on windows is started with --console and thus
|
||||||
|
# does not know the location of its .err log, use default location
|
||||||
|
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||||
|
}
|
||||||
|
|
||||||
|
--let SEARCH_FILE=$log_error_
|
||||||
|
--let SEARCH_PATTERN=Next log extension: 2147483647. Remaining log filename extensions: 0.
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
CREATE DATABASE db1;
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--error ER_NO_UNIQUE_LOGFILE
|
||||||
|
RESET MASTER TO 2147483648;
|
||||||
|
|
||||||
|
--let SEARCH_FILE=$log_error_
|
||||||
|
--let SEARCH_PATTERN=Turning logging off for the whole duration of the MariaDB server process
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
--echo "Following CREATE DATABSE db2 command will not be present in binary log"
|
||||||
|
--echo "as binary log got closed due to ER_NO_UNIQUE_LOGFILE error."
|
||||||
|
CREATE DATABASE db2;
|
||||||
|
|
||||||
|
|
||||||
|
--echo "RESET MASTER command fails to generate a new binary log"
|
||||||
|
--echo "log-bin will be disabled and server needs to be restarted to"
|
||||||
|
--echo "re-enable the binary log."
|
||||||
|
--error ER_NO_BINARY_LOGGING
|
||||||
|
SHOW BINARY LOGS;
|
||||||
|
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
|
||||||
|
--source include/show_binary_logs.inc
|
||||||
|
SHOW DATABASES LIKE 'db%';
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP DATABASE db1;
|
||||||
|
DROP DATABASE db2;
|
||||||
|
--source include/show_binlog_events.inc
|
@ -9,6 +9,7 @@ connection master;
|
|||||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
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("Writing one row to the row-based binary log failed.*");
|
||||||
call mtr.add_suppression("Error writing file .*");
|
call mtr.add_suppression("Error writing file .*");
|
||||||
|
call mtr.add_suppression("Could not use master-bin for logging");
|
||||||
SET @old_debug= @@global.debug_dbug;
|
SET @old_debug= @@global.debug_dbug;
|
||||||
SELECT repeat('x',8192) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data';
|
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';
|
SELECT repeat('x',10) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data';
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
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("Writing one row to the row-based binary log failed.*");
|
||||||
call mtr.add_suppression("Error writing file .*");
|
call mtr.add_suppression("Error writing file .*");
|
||||||
|
call mtr.add_suppression("Could not use master-bin for logging");
|
||||||
|
|
||||||
SET @old_debug= @@global.debug_dbug;
|
SET @old_debug= @@global.debug_dbug;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ connection master;
|
|||||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
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("Writing one row to the row-based binary log failed.*");
|
||||||
call mtr.add_suppression("Error writing file .*");
|
call mtr.add_suppression("Error writing file .*");
|
||||||
|
call mtr.add_suppression("Could not use master-bin for logging");
|
||||||
SET @old_debug= @@global.debug_dbug;
|
SET @old_debug= @@global.debug_dbug;
|
||||||
SELECT repeat('x',8192) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data';
|
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';
|
SELECT repeat('x',10) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data';
|
||||||
|
@ -3434,6 +3434,8 @@ bool MYSQL_BIN_LOG::open(const char *log_name,
|
|||||||
log_type_arg, io_cache_type_arg))
|
log_type_arg, io_cache_type_arg))
|
||||||
{
|
{
|
||||||
sql_print_error("MYSQL_BIN_LOG::open failed to generate new file name.");
|
sql_print_error("MYSQL_BIN_LOG::open failed to generate new file name.");
|
||||||
|
if (!is_relay_log)
|
||||||
|
goto err;
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3798,7 +3800,7 @@ err:
|
|||||||
purge_index_entry(NULL, NULL, need_mutex);
|
purge_index_entry(NULL, NULL, need_mutex);
|
||||||
close_purge_index_file();
|
close_purge_index_file();
|
||||||
#endif
|
#endif
|
||||||
sql_print_error(fatal_log_error, name, tmp_errno);
|
sql_print_error(fatal_log_error, (name) ? name : log_name, tmp_errno);
|
||||||
if (new_xid_list_entry)
|
if (new_xid_list_entry)
|
||||||
delete new_xid_list_entry;
|
delete new_xid_list_entry;
|
||||||
if (file >= 0)
|
if (file >= 0)
|
||||||
|
Reference in New Issue
Block a user