Merge 10.0 -> 10.1.
Conflicts: mysql-test/suite/multi_source/multisource.result sql/sql_base.cc
This commit is contained in:
commit
167332597f
@ -67,7 +67,21 @@
|
|||||||
#
|
#
|
||||||
# --let $slave_sql_mode= NO_BACKSLASH_ESCAPES
|
# --let $slave_sql_mode= NO_BACKSLASH_ESCAPES
|
||||||
#
|
#
|
||||||
|
# $all_slaves_status
|
||||||
|
# If set, use SHOW ALL SLAVES STATUS instead of SHOW SLAVE STATUS
|
||||||
|
# and get the column values from all rows. Example:
|
||||||
|
#
|
||||||
|
# --let $all_slaves_status= 1
|
||||||
|
#
|
||||||
|
# $slave_name
|
||||||
|
# If set, use SHOW SLAVE '<slave_name>' STATUS instead of SHOW SLAVE STATUS.
|
||||||
|
# The name must be quoted (can be a quoted empty string).
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# --let $slave_name= 'm1'
|
||||||
|
#
|
||||||
|
# Note: $all_slaves_status and $slave_name are mutually exclusive.
|
||||||
|
#
|
||||||
|
|
||||||
--let $_show_slave_status_items=$status_items
|
--let $_show_slave_status_items=$status_items
|
||||||
if (!$status_items)
|
if (!$status_items)
|
||||||
@ -75,6 +89,21 @@ if (!$status_items)
|
|||||||
--die Bug in test case: The mysqltest variable $status_items is not set.
|
--die Bug in test case: The mysqltest variable $status_items is not set.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--let $_show_query=SHOW SLAVE STATUS
|
||||||
|
|
||||||
|
if ($all_slaves_status)
|
||||||
|
{
|
||||||
|
if ($slave_name)
|
||||||
|
{
|
||||||
|
--die Bug in test case: Both $all_slaves_status and $slave_name are set.
|
||||||
|
}
|
||||||
|
--let $_show_query=SHOW ALL SLAVES STATUS
|
||||||
|
}
|
||||||
|
if ($slave_name)
|
||||||
|
{
|
||||||
|
--let $_show_query=SHOW SLAVE $slave_name STATUS
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
--let $_slave_sql_mode= NO_BACKSLASH_ESCAPES
|
--let $_slave_sql_mode= NO_BACKSLASH_ESCAPES
|
||||||
if ($slave_sql_mode)
|
if ($slave_sql_mode)
|
||||||
@ -86,18 +115,27 @@ if ($slave_sql_mode)
|
|||||||
eval SET sql_mode= '$_slave_sql_mode';
|
eval SET sql_mode= '$_slave_sql_mode';
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
--let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace
|
||||||
|
|
||||||
while ($_show_slave_status_items)
|
while ($_show_slave_status_items)
|
||||||
{
|
{
|
||||||
--let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
|
--let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
|
||||||
--let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`
|
--let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`
|
||||||
|
|
||||||
--replace_regex /\.[\\\/]master/master/
|
--let $num= 1
|
||||||
--let $_show_slave_status_value= query_get_value(SHOW SLAVE STATUS, $_show_slave_status_name, 1)
|
--let $_show_slave_status_value=
|
||||||
--let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace
|
while ($_show_slave_status_value != 'No such row')
|
||||||
--replace_regex $_slave_field_result_replace
|
{
|
||||||
--let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
|
--replace_regex /\.[\\\/]master/master/
|
||||||
--echo $_show_slave_status_name = '$_show_slave_status_value'
|
--let $_show_slave_status_value= query_get_value($_show_query, $_show_slave_status_name, $num)
|
||||||
|
if ($_show_slave_status_value != 'No such row')
|
||||||
|
{
|
||||||
|
--replace_regex $_slave_field_result_replace
|
||||||
|
--let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
|
||||||
|
--echo $_show_slave_status_name = '$_show_slave_status_value'
|
||||||
|
--inc $num
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
call mtr.add_suppression("InnoDB: Error: row_merge_drop_indexes_dict failed with error code*");
|
|
||||||
create table t1(a int, b int) engine=innodb;
|
|
||||||
create procedure innodb_insert_proc (repeat_count int)
|
|
||||||
begin
|
|
||||||
declare current_num int;
|
|
||||||
set current_num = 0;
|
|
||||||
while current_num < repeat_count do
|
|
||||||
insert into t1 values(current_num, current_num);
|
|
||||||
set current_num = current_num + 1;
|
|
||||||
end while;
|
|
||||||
end//
|
|
||||||
commit;
|
|
||||||
set autocommit=0;
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
commit;
|
|
||||||
set autocommit=1;
|
|
||||||
create table t2(a int) engine=innodb;
|
|
||||||
show create table t2;
|
|
||||||
Table Create Table
|
|
||||||
t2 CREATE TABLE `t2` (
|
|
||||||
`a` int(11) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
||||||
set DEBUG_DBUG='+d,ib_os_aio_func_io_failure_28';
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
show create table t1;
|
|
||||||
Table Create Table
|
|
||||||
t1 CREATE TABLE `t1` (
|
|
||||||
`a` int(11) DEFAULT NULL,
|
|
||||||
`b` int(11) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
||||||
alter table t2 add testcol int;
|
|
||||||
ERROR HY000: The table 't2' is full
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
alter table t1 add testcol2 int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
alter table t1 add testcol3 int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
show create table t1;
|
|
||||||
Table Create Table
|
|
||||||
t1 CREATE TABLE `t1` (
|
|
||||||
`a` int(11) DEFAULT NULL,
|
|
||||||
`b` int(11) DEFAULT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
||||||
drop table t2;
|
|
||||||
alter table t1 add testcol2 int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
alter table t1 add testcol3 int;
|
|
||||||
ERROR HY000: The table 't1' is full
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
set autocommit=0;
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
commit;
|
|
||||||
set autocommit=1;
|
|
||||||
set DEBUG_DBUG='';
|
|
||||||
drop procedure innodb_insert_proc;
|
|
||||||
drop table t1;
|
|
||||||
drop table if exists t2;
|
|
@ -67,3 +67,78 @@ Error 1005 Can't create table `test`.`#sql-temporary` (errno: 150 "Foreign key c
|
|||||||
Warning 1215 Cannot add foreign key constraint
|
Warning 1215 Cannot add foreign key constraint
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE `#departaments` (
|
||||||
|
`id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`id_depart`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
CREATE TABLE `#departaments_tree` (
|
||||||
|
`id_depart` INT(10) UNSIGNED NOT NULL,
|
||||||
|
`id_depart_in` INT(10) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (`id_depart`,`id_depart_in`),
|
||||||
|
CONSTRAINT `#departaments_tree_ibfk_1` FOREIGN KEY (`id_depart`) REFERENCES `#departaments` (`id_depart`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
ALTER TABLE `#departaments_tree`
|
||||||
|
ADD FOREIGN KEY (`id_depart_in`) REFERENCES `#departaments`(`id_depart`);
|
||||||
|
SHOW CREATE TABLE `#departaments_tree`;
|
||||||
|
Table Create Table
|
||||||
|
#departaments_tree CREATE TABLE `#departaments_tree` (
|
||||||
|
`id_depart` int(10) unsigned NOT NULL,
|
||||||
|
`id_depart_in` int(10) unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (`id_depart`,`id_depart_in`),
|
||||||
|
KEY `id_depart_in` (`id_depart_in`),
|
||||||
|
CONSTRAINT `#departaments_tree_ibfk_1` FOREIGN KEY (`id_depart`) REFERENCES `#departaments` (`id_depart`),
|
||||||
|
CONSTRAINT `#departaments_tree_ibfk_2` FOREIGN KEY (`id_depart_in`) REFERENCES `#departaments` (`id_depart`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||||
|
DROP TABLE `#departaments_tree`;
|
||||||
|
DROP TABLE `#departaments`;
|
||||||
|
CREATE TABLE `boroda` (
|
||||||
|
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
`b` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
ALTER TABLE `boroda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `boroda`(`id`);
|
||||||
|
ALTER TABLE `boroda` DROP FOREIGN KEY `boroda_ibfk_2`;
|
||||||
|
RENAME TABLE `boroda` TO `#boroda`;
|
||||||
|
ALTER TABLE `#boroda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `#boroda`(`id`);
|
||||||
|
SHOW CREATE TABLE `#boroda`;
|
||||||
|
Table Create Table
|
||||||
|
#boroda CREATE TABLE `#boroda` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` int(11) unsigned DEFAULT NULL,
|
||||||
|
`b` int(11) unsigned DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
KEY `b` (`b`),
|
||||||
|
CONSTRAINT `#boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `#boroda` (`id`),
|
||||||
|
CONSTRAINT `#boroda_ibfk_2` FOREIGN KEY (`b`) REFERENCES `#boroda` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||||
|
DROP TABLE `#boroda`;
|
||||||
|
CREATE TABLE `boroda` (
|
||||||
|
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
`b` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
RENAME TABLE `boroda` TO `bor#oda`;
|
||||||
|
ALTER TABLE `bor#oda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `bor#oda`(`id`);
|
||||||
|
SHOW CREATE TABLE `bor#oda`;
|
||||||
|
Table Create Table
|
||||||
|
bor#oda CREATE TABLE `bor#oda` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` int(11) unsigned DEFAULT NULL,
|
||||||
|
`b` int(11) unsigned DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
KEY `b` (`b`),
|
||||||
|
CONSTRAINT `bor#oda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `bor#oda` (`id`),
|
||||||
|
CONSTRAINT `bor#oda_ibfk_2` FOREIGN KEY (`b`) REFERENCES `bor#oda` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||||
|
DROP TABLE `bor#oda`;
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--innodb-use-native-aio=0
|
|
@ -1,75 +0,0 @@
|
|||||||
# MDEV-6288: Innodb causes server crash after disk full, then can't ALTER TABLE any more
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
--source include/not_windows.inc
|
|
||||||
--source include/not_valgrind.inc
|
|
||||||
--source include/not_embedded.inc
|
|
||||||
|
|
||||||
# DEBUG_SYNC must be compiled in.
|
|
||||||
--source include/have_debug_sync.inc
|
|
||||||
|
|
||||||
call mtr.add_suppression("InnoDB: Error: row_merge_drop_indexes_dict failed with error code*");
|
|
||||||
|
|
||||||
create table t1(a int, b int) engine=innodb;
|
|
||||||
|
|
||||||
delimiter //;
|
|
||||||
create procedure innodb_insert_proc (repeat_count int)
|
|
||||||
begin
|
|
||||||
declare current_num int;
|
|
||||||
set current_num = 0;
|
|
||||||
while current_num < repeat_count do
|
|
||||||
insert into t1 values(current_num, current_num);
|
|
||||||
set current_num = current_num + 1;
|
|
||||||
end while;
|
|
||||||
end//
|
|
||||||
delimiter ;//
|
|
||||||
commit;
|
|
||||||
|
|
||||||
set autocommit=0;
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
commit;
|
|
||||||
set autocommit=1;
|
|
||||||
|
|
||||||
create table t2(a int) engine=innodb;
|
|
||||||
show create table t2;
|
|
||||||
|
|
||||||
# This caused crash earlier
|
|
||||||
set DEBUG_DBUG='+d,ib_os_aio_func_io_failure_28';
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
show create table t1;
|
|
||||||
--error 1114
|
|
||||||
alter table t2 add testcol int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol2 int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol3 int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol int;
|
|
||||||
show create table t1;
|
|
||||||
--error 0,1051
|
|
||||||
drop table t2;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol2 int;
|
|
||||||
--error 1114
|
|
||||||
alter table t1 add testcol3 int;
|
|
||||||
--error 0,1114
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
set autocommit=0;
|
|
||||||
--error 0,1114
|
|
||||||
call innodb_insert_proc(20000);
|
|
||||||
commit;
|
|
||||||
set autocommit=1;
|
|
||||||
|
|
||||||
set DEBUG_DBUG='';
|
|
||||||
|
|
||||||
drop procedure innodb_insert_proc;
|
|
||||||
drop table t1;
|
|
||||||
--disable_warnings
|
|
||||||
drop table if exists t2;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
|
|
@ -124,3 +124,66 @@ show warnings;
|
|||||||
|
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-7627: Some symbols in table name can cause to Error Code: 1050 when created FK
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE `#departaments` (
|
||||||
|
`id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`id_depart`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `#departaments_tree` (
|
||||||
|
`id_depart` INT(10) UNSIGNED NOT NULL,
|
||||||
|
`id_depart_in` INT(10) UNSIGNED NOT NULL,
|
||||||
|
PRIMARY KEY (`id_depart`,`id_depart_in`),
|
||||||
|
CONSTRAINT `#departaments_tree_ibfk_1` FOREIGN KEY (`id_depart`) REFERENCES `#departaments` (`id_depart`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
ALTER TABLE `#departaments_tree`
|
||||||
|
ADD FOREIGN KEY (`id_depart_in`) REFERENCES `#departaments`(`id_depart`);
|
||||||
|
|
||||||
|
SHOW CREATE TABLE `#departaments_tree`;
|
||||||
|
|
||||||
|
DROP TABLE `#departaments_tree`;
|
||||||
|
DROP TABLE `#departaments`;
|
||||||
|
|
||||||
|
CREATE TABLE `boroda` (
|
||||||
|
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
`b` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
ALTER TABLE `boroda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `boroda`(`id`);
|
||||||
|
|
||||||
|
ALTER TABLE `boroda` DROP FOREIGN KEY `boroda_ibfk_2`;
|
||||||
|
|
||||||
|
RENAME TABLE `boroda` TO `#boroda`;
|
||||||
|
|
||||||
|
ALTER TABLE `#boroda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `#boroda`(`id`);
|
||||||
|
|
||||||
|
SHOW CREATE TABLE `#boroda`;
|
||||||
|
DROP TABLE `#boroda`;
|
||||||
|
|
||||||
|
CREATE TABLE `boroda` (
|
||||||
|
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`a` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
`b` INT(11) UNSIGNED DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `a` (`a`),
|
||||||
|
CONSTRAINT `boroda_ibfk_1` FOREIGN KEY (`a`) REFERENCES `boroda` (`id`)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
RENAME TABLE `boroda` TO `bor#oda`;
|
||||||
|
|
||||||
|
ALTER TABLE `bor#oda`
|
||||||
|
ADD FOREIGN KEY (`b`) REFERENCES `bor#oda`(`id`);
|
||||||
|
|
||||||
|
SHOW CREATE TABLE `bor#oda`;
|
||||||
|
DROP TABLE `bor#oda`;
|
||||||
|
@ -9,15 +9,36 @@ master_user='root';
|
|||||||
start slave 'master1';
|
start slave 'master1';
|
||||||
set default_master_connection = 'master1';
|
set default_master_connection = 'master1';
|
||||||
include/wait_for_slave_to_start.inc
|
include/wait_for_slave_to_start.inc
|
||||||
show slave 'master1' status;
|
#
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode
|
# Checking SHOW SLAVE 'master1' STATUS
|
||||||
Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 313 mysqld-relay-bin-master1.000002 601 master-bin.000001 Yes Yes 0 0 313 907 None 0 No 0 No 0 0 1 No conservative
|
#
|
||||||
show slave status;
|
Master_Port = 'MYPORT_1'
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode
|
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||||
Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 313 mysqld-relay-bin-master1.000002 601 master-bin.000001 Yes Yes 0 0 313 907 None 0 No 0 No 0 0 1 No conservative
|
Slave_IO_Running = 'Yes'
|
||||||
show all slaves status;
|
Slave_SQL_Running = 'Yes'
|
||||||
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
|
Last_Errno = '0'
|
||||||
master1 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 313 mysqld-relay-bin-master1.000002 601 master-bin.000001 Yes Yes 0 0 313 907 None 0 No 0 No 0 0 1 No conservative 0 1073741824 7 0 60.000
|
Last_SQL_Errno = '0'
|
||||||
|
#
|
||||||
|
# Checking SHOW SLAVE STATUS
|
||||||
|
#
|
||||||
|
Master_Port = 'MYPORT_1'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
#
|
||||||
|
# Checking SHOW ALL SLAVES STATUS
|
||||||
|
#
|
||||||
|
Connection_name = 'master1'
|
||||||
|
Master_Port = 'MYPORT_1'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
Slave_heartbeat_period = '60.000'
|
||||||
|
#
|
||||||
drop database if exists db1;
|
drop database if exists db1;
|
||||||
create database db1;
|
create database db1;
|
||||||
use db1;
|
use db1;
|
||||||
@ -74,10 +95,26 @@ master_host='127.0.0.1',
|
|||||||
master_user='root';
|
master_user='root';
|
||||||
start slave;
|
start slave;
|
||||||
include/wait_for_slave_to_start.inc
|
include/wait_for_slave_to_start.inc
|
||||||
show all slaves status;
|
#
|
||||||
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
|
# Checking SHOW ALL SLAVES STATUS
|
||||||
Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 313 mysqld-relay-bin.000002 601 master-bin.000001 Yes Yes 0 0 313 899 None 0 No 0 No 0 0 2 No conservative 0 1073741824 7 0 60.000 0-1-4
|
#
|
||||||
master1 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000001 988 mysqld-relay-bin-master1.000002 1276 master-bin.000001 Yes Yes 0 0 988 1582 None 0 No 0 No 0 0 1 No conservative 0 1073741824 17 0 60.000 0-1-4
|
Connection_name = ''
|
||||||
|
Connection_name = 'master1'
|
||||||
|
Master_Port = 'MYPORT_2'
|
||||||
|
Master_Port = 'MYPORT_1'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin.000002'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
Slave_heartbeat_period = '60.000'
|
||||||
|
Slave_heartbeat_period = '60.000'
|
||||||
|
#
|
||||||
insert into t1 (f1) values ('three');
|
insert into t1 (f1) values ('three');
|
||||||
drop database if exists db2;
|
drop database if exists db2;
|
||||||
create database db2;
|
create database db2;
|
||||||
@ -104,10 +141,26 @@ Log_name File_size
|
|||||||
master-bin.000002 367
|
master-bin.000002 367
|
||||||
insert into t1 (f1) values ('four');
|
insert into t1 (f1) values ('four');
|
||||||
create table db1.t3 (f1 int) engine=InnoDB;
|
create table db1.t3 (f1 int) engine=InnoDB;
|
||||||
show all slaves status;
|
#
|
||||||
Connection_name Slave_SQL_State Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode Retried_transactions Max_relay_log_size Executed_log_entries Slave_received_heartbeats Slave_heartbeat_period Gtid_Slave_Pos
|
# Checking SHOW ALL SLAVES STATUS
|
||||||
Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_2 60 master-bin.000001 921 mysqld-relay-bin.000002 1209 master-bin.000001 Yes Yes 0 0 921 1507 None 0 No 0 No 0 0 2 No conservative 0 1073741824 17 0 60.000 0-1-7
|
#
|
||||||
master1 Slave has read all relay log; waiting for the slave I/O thread to update it Waiting for master to send event 127.0.0.1 root MYPORT_1 60 master-bin.000002 740 mysqld-relay-bin-master1.000004 1028 master-bin.000002 Yes Yes 0 0 740 1378 None 0 No 0 No 0 0 1 No conservative 0 1073741824 37 0 60.000 0-1-7
|
Connection_name = ''
|
||||||
|
Connection_name = 'master1'
|
||||||
|
Master_Port = 'MYPORT_2'
|
||||||
|
Master_Port = 'MYPORT_1'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin.000002'
|
||||||
|
Relay_Log_File = 'mysqld-relay-bin-master1.000004'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_IO_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Slave_SQL_Running = 'Yes'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
Last_SQL_Errno = '0'
|
||||||
|
Slave_heartbeat_period = '60.000'
|
||||||
|
Slave_heartbeat_period = '60.000'
|
||||||
|
#
|
||||||
select * from db1.t1;
|
select * from db1.t1;
|
||||||
i f1
|
i f1
|
||||||
1 one
|
1 one
|
||||||
|
@ -49,12 +49,28 @@ let $field= Slave_IO_State;
|
|||||||
let $condition= = 'Waiting for master to send event';
|
let $condition= = 'Waiting for master to send event';
|
||||||
--source include/wait_show_condition.inc
|
--source include/wait_show_condition.inc
|
||||||
|
|
||||||
--replace_result $SERVER_MYPORT_1 MYPORT_1
|
--echo #
|
||||||
show slave 'master1' status;
|
--echo # Checking SHOW SLAVE 'master1' STATUS
|
||||||
--replace_result $SERVER_MYPORT_1 MYPORT_1
|
--echo #
|
||||||
show slave status;
|
--let $status_items= Master_Port, Relay_Log_File, Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_SQL_Errno
|
||||||
--replace_result $SERVER_MYPORT_1 MYPORT_1
|
--let $slave_field_result_replace= /$SERVER_MYPORT_1/MYPORT_1/
|
||||||
show all slaves status;
|
--let $slave_name= 'master1'
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
--let $slave_name=
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Checking SHOW SLAVE STATUS
|
||||||
|
--echo #
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Checking SHOW ALL SLAVES STATUS
|
||||||
|
--echo #
|
||||||
|
--let $all_slaves_status= 1
|
||||||
|
--let $status_items= Connection_name, Master_Port, Relay_Log_File, Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_SQL_Errno, Slave_heartbeat_period
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
--let $all_slaves_status=
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
# Check that replication actually works
|
# Check that replication actually works
|
||||||
@ -144,8 +160,15 @@ let $field= Slave_IO_State;
|
|||||||
let $condition= = 'Waiting for master to send event';
|
let $condition= = 'Waiting for master to send event';
|
||||||
--source include/wait_show_condition.inc
|
--source include/wait_show_condition.inc
|
||||||
|
|
||||||
--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2
|
--echo #
|
||||||
show all slaves status;
|
--echo # Checking SHOW ALL SLAVES STATUS
|
||||||
|
--echo #
|
||||||
|
--let $all_slaves_status= 1
|
||||||
|
--let $status_items= Connection_name, Master_Port, Relay_Log_File, Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_SQL_Errno, Slave_heartbeat_period
|
||||||
|
--let $slave_field_result_replace= /$SERVER_MYPORT_1/MYPORT_1/ /$SERVER_MYPORT_2/MYPORT_2/
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
--let $all_slaves_status=
|
||||||
|
--echo #
|
||||||
|
|
||||||
# Check that replication from two servers actually works
|
# Check that replication from two servers actually works
|
||||||
|
|
||||||
@ -214,8 +237,15 @@ let $field= Slave_IO_State;
|
|||||||
let $condition= = 'Waiting for master to send event';
|
let $condition= = 'Waiting for master to send event';
|
||||||
--source include/wait_show_condition.inc
|
--source include/wait_show_condition.inc
|
||||||
|
|
||||||
--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2
|
--echo #
|
||||||
show all slaves status;
|
--echo # Checking SHOW ALL SLAVES STATUS
|
||||||
|
--echo #
|
||||||
|
--let $all_slaves_status= 1
|
||||||
|
--let $status_items= Connection_name, Master_Port, Relay_Log_File, Slave_IO_Running, Slave_SQL_Running, Last_Errno, Last_SQL_Errno, Slave_heartbeat_period
|
||||||
|
--let $slave_field_result_replace= /$SERVER_MYPORT_1/MYPORT_1/ /$SERVER_MYPORT_2/MYPORT_2/
|
||||||
|
--source include/show_slave_status.inc
|
||||||
|
--let $all_slaves_status=
|
||||||
|
--echo #
|
||||||
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
select * from db1.t1;
|
select * from db1.t1;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
"General cleanup"
|
"General cleanup"
|
||||||
|
set @aria_checkpoint_interval_save= @@global.aria_checkpoint_interval;
|
||||||
|
set @@global.aria_checkpoint_interval= 0;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
update performance_schema.setup_instruments set enabled = 'NO';
|
update performance_schema.setup_instruments set enabled = 'NO';
|
||||||
update performance_schema.setup_consumers set enabled = 'NO';
|
update performance_schema.setup_consumers set enabled = 'NO';
|
||||||
@ -116,3 +118,4 @@ update performance_schema.setup_consumers set enabled = 'YES';
|
|||||||
update performance_schema.setup_instruments
|
update performance_schema.setup_instruments
|
||||||
set enabled = 'YES', timed = 'YES';
|
set enabled = 'YES', timed = 'YES';
|
||||||
drop table test.t1;
|
drop table test.t1;
|
||||||
|
set @@global.aria_checkpoint_interval= @aria_checkpoint_interval_save;
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
|
|
||||||
--echo "General cleanup"
|
--echo "General cleanup"
|
||||||
|
|
||||||
|
# MDEV-7187 - test fails sporadically in buildbot
|
||||||
|
set @aria_checkpoint_interval_save= @@global.aria_checkpoint_interval;
|
||||||
|
set @@global.aria_checkpoint_interval= 0;
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
@ -188,3 +192,6 @@ update performance_schema.setup_instruments
|
|||||||
set enabled = 'YES', timed = 'YES';
|
set enabled = 'YES', timed = 'YES';
|
||||||
|
|
||||||
drop table test.t1;
|
drop table test.t1;
|
||||||
|
|
||||||
|
set @@global.aria_checkpoint_interval= @aria_checkpoint_interval_save;
|
||||||
|
|
||||||
|
@ -5,8 +5,22 @@ SET GLOBAL slave_parallel_threads=10;
|
|||||||
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
||||||
include/stop_slave.inc
|
include/stop_slave.inc
|
||||||
SET GLOBAL slave_parallel_threads=10;
|
SET GLOBAL slave_parallel_threads=10;
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*)))
|
||||||
|
OK
|
||||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
|
SELECT IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*)))
|
||||||
|
OK
|
||||||
|
include/stop_slave.inc
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*)))
|
||||||
|
OK
|
||||||
|
include/start_slave.inc
|
||||||
|
SELECT IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*)))
|
||||||
|
OK
|
||||||
*** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
*** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
||||||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
||||||
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM;
|
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM;
|
||||||
|
@ -11,9 +11,20 @@ SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
|
|||||||
SET GLOBAL slave_parallel_threads=10;
|
SET GLOBAL slave_parallel_threads=10;
|
||||||
--source include/stop_slave.inc
|
--source include/stop_slave.inc
|
||||||
SET GLOBAL slave_parallel_threads=10;
|
SET GLOBAL slave_parallel_threads=10;
|
||||||
|
|
||||||
|
# Check that we do not spawn any worker threads when no slave is running.
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
|
||||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||||
--source include/start_slave.inc
|
--source include/start_slave.inc
|
||||||
|
|
||||||
|
# Check that worker threads get spawned when slave starts.
|
||||||
|
SELECT IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
# ... and that worker threads get removed when slave stops.
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
--source include/start_slave.inc
|
||||||
|
SELECT IF(COUNT(*) >= 10, "OK", CONCAT("Found too few system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
|
||||||
--echo *** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
--echo *** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
||||||
|
|
||||||
|
@ -1,13 +1,22 @@
|
|||||||
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
||||||
SELECT @@GLOBAL.slave_parallel_threads as 'must be zero because of default';
|
SELECT IF(COUNT(*) < 20, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
must be zero because of default
|
IF(COUNT(*) < 20, "OK", CONCAT("Found too many system user processes: ", COUNT(*)))
|
||||||
0
|
OK
|
||||||
|
SELECT @@GLOBAL.slave_parallel_threads as 'must be 20 because of .cnf';
|
||||||
|
must be 20 because of .cnf
|
||||||
|
20
|
||||||
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
||||||
ERROR HY000: Variable 'slave_parallel_threads' is a GLOBAL variable
|
ERROR HY000: Variable 'slave_parallel_threads' is a GLOBAL variable
|
||||||
SET GLOBAL slave_parallel_threads= 0;
|
SET GLOBAL slave_parallel_threads= 0;
|
||||||
SET GLOBAL slave_parallel_threads= DEFAULT;
|
SET GLOBAL slave_parallel_threads= DEFAULT;
|
||||||
|
SELECT @@GLOBAL.slave_parallel_threads as 'must be 0 because of default';
|
||||||
|
must be 0 because of default
|
||||||
|
0
|
||||||
SET GLOBAL slave_parallel_threads= 10;
|
SET GLOBAL slave_parallel_threads= 10;
|
||||||
SELECT @@GLOBAL.slave_parallel_threads;
|
SELECT @@GLOBAL.slave_parallel_threads;
|
||||||
@@GLOBAL.slave_parallel_threads
|
@@GLOBAL.slave_parallel_threads
|
||||||
10
|
10
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*)))
|
||||||
|
OK
|
||||||
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
# Use default setting for mysqld processes
|
||||||
|
!include include/default_mysqld.cnf
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
slave_parallel_threads=20
|
@ -2,13 +2,20 @@
|
|||||||
|
|
||||||
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
SET @save_slave_parallel_threads= @@GLOBAL.slave_parallel_threads;
|
||||||
|
|
||||||
SELECT @@GLOBAL.slave_parallel_threads as 'must be zero because of default';
|
# Check that we don't spawn worker threads at server startup, when no
|
||||||
|
# slave is configured (MDEV-5289).
|
||||||
|
SELECT IF(COUNT(*) < 20, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
|
||||||
|
SELECT @@GLOBAL.slave_parallel_threads as 'must be 20 because of .cnf';
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
SELECT @@SESSION.slave_parallel_threads as 'no session var';
|
||||||
|
|
||||||
SET GLOBAL slave_parallel_threads= 0;
|
SET GLOBAL slave_parallel_threads= 0;
|
||||||
SET GLOBAL slave_parallel_threads= DEFAULT;
|
SET GLOBAL slave_parallel_threads= DEFAULT;
|
||||||
|
SELECT @@GLOBAL.slave_parallel_threads as 'must be 0 because of default';
|
||||||
SET GLOBAL slave_parallel_threads= 10;
|
SET GLOBAL slave_parallel_threads= 10;
|
||||||
SELECT @@GLOBAL.slave_parallel_threads;
|
SELECT @@GLOBAL.slave_parallel_threads;
|
||||||
|
# Check that we don't spawn worker threads when no slave is started.
|
||||||
|
SELECT IF(COUNT(*) < 10, "OK", CONCAT("Found too many system user processes: ", COUNT(*))) FROM information_schema.processlist WHERE user = "system user";
|
||||||
|
|
||||||
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
SET GLOBAL slave_parallel_threads = @save_slave_parallel_threads;
|
||||||
|
@ -1368,7 +1368,7 @@ bool Master_info_index::remove_master_info(LEX_STRING *name)
|
|||||||
|
|
||||||
bool Master_info_index::give_error_if_slave_running()
|
bool Master_info_index::give_error_if_slave_running()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("warn_if_slave_running");
|
DBUG_ENTER("give_error_if_slave_running");
|
||||||
mysql_mutex_assert_owner(&LOCK_active_mi);
|
mysql_mutex_assert_owner(&LOCK_active_mi);
|
||||||
if (!this) // master_info_index is set to NULL on server shutdown
|
if (!this) // master_info_index is set to NULL on server shutdown
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -1388,6 +1388,32 @@ bool Master_info_index::give_error_if_slave_running()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Master_info_index::any_slave_sql_running()
|
||||||
|
|
||||||
|
The LOCK_active_mi must be held while calling this function.
|
||||||
|
|
||||||
|
@return
|
||||||
|
TRUE If some slave SQL thread is running.
|
||||||
|
FALSE No slave SQL thread is running
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool Master_info_index::any_slave_sql_running()
|
||||||
|
{
|
||||||
|
DBUG_ENTER("any_slave_sql_running");
|
||||||
|
if (!this) // master_info_index is set to NULL on server shutdown
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
for (uint i= 0; i< master_info_hash.records; ++i)
|
||||||
|
{
|
||||||
|
Master_info *mi= (Master_info *)my_hash_element(&master_info_hash, i);
|
||||||
|
if (mi->rli.slave_running != MYSQL_SLAVE_NOT_RUN)
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Master_info_index::start_all_slaves()
|
Master_info_index::start_all_slaves()
|
||||||
|
|
||||||
|
@ -345,6 +345,7 @@ public:
|
|||||||
Master_info *get_master_info(const LEX_STRING *connection_name,
|
Master_info *get_master_info(const LEX_STRING *connection_name,
|
||||||
Sql_condition::enum_warning_level warning);
|
Sql_condition::enum_warning_level warning);
|
||||||
bool give_error_if_slave_running();
|
bool give_error_if_slave_running();
|
||||||
|
bool any_slave_sql_running();
|
||||||
bool start_all_slaves(THD *thd);
|
bool start_all_slaves(THD *thd);
|
||||||
bool stop_all_slaves(THD *thd);
|
bool stop_all_slaves(THD *thd);
|
||||||
};
|
};
|
||||||
|
@ -1021,9 +1021,9 @@ dealloc_gco(group_commit_orderer *gco)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
static int
|
||||||
rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
||||||
uint32 new_count, bool skip_check)
|
uint32 new_count)
|
||||||
{
|
{
|
||||||
uint32 i;
|
uint32 i;
|
||||||
rpl_parallel_thread **old_list= NULL;
|
rpl_parallel_thread **old_list= NULL;
|
||||||
@ -1069,24 +1069,6 @@ rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
|||||||
new_free_list= new_list[i];
|
new_free_list= new_list[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!skip_check)
|
|
||||||
{
|
|
||||||
mysql_mutex_lock(&LOCK_active_mi);
|
|
||||||
if (master_info_index->give_error_if_slave_running())
|
|
||||||
{
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (pool->changing)
|
|
||||||
{
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
my_error(ER_CHANGE_SLAVE_PARALLEL_THREADS_ACTIVE, MYF(0));
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
pool->changing= true;
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Grab each old thread in turn, and signal it to stop.
|
Grab each old thread in turn, and signal it to stop.
|
||||||
|
|
||||||
@ -1150,13 +1132,6 @@ rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
|||||||
mysql_mutex_unlock(&pool->threads[i]->LOCK_rpl_thread);
|
mysql_mutex_unlock(&pool->threads[i]->LOCK_rpl_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!skip_check)
|
|
||||||
{
|
|
||||||
mysql_mutex_lock(&LOCK_active_mi);
|
|
||||||
pool->changing= false;
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
}
|
|
||||||
|
|
||||||
mysql_mutex_lock(&pool->LOCK_rpl_thread_pool);
|
mysql_mutex_lock(&pool->LOCK_rpl_thread_pool);
|
||||||
mysql_cond_broadcast(&pool->COND_rpl_thread_pool);
|
mysql_cond_broadcast(&pool->COND_rpl_thread_pool);
|
||||||
mysql_mutex_unlock(&pool->LOCK_rpl_thread_pool);
|
mysql_mutex_unlock(&pool->LOCK_rpl_thread_pool);
|
||||||
@ -1183,16 +1158,26 @@ err:
|
|||||||
}
|
}
|
||||||
my_free(new_list);
|
my_free(new_list);
|
||||||
}
|
}
|
||||||
if (!skip_check)
|
|
||||||
{
|
|
||||||
mysql_mutex_lock(&LOCK_active_mi);
|
|
||||||
pool->changing= false;
|
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
rpl_parallel_activate_pool(rpl_parallel_thread_pool *pool)
|
||||||
|
{
|
||||||
|
if (!pool->count)
|
||||||
|
return rpl_parallel_change_thread_count(pool, opt_slave_parallel_threads);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
rpl_parallel_inactivate_pool(rpl_parallel_thread_pool *pool)
|
||||||
|
{
|
||||||
|
return rpl_parallel_change_thread_count(pool, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
rpl_parallel_thread::batch_free()
|
rpl_parallel_thread::batch_free()
|
||||||
{
|
{
|
||||||
@ -1435,7 +1420,7 @@ rpl_parallel_thread::loc_free_gco(group_commit_orderer *gco)
|
|||||||
|
|
||||||
|
|
||||||
rpl_parallel_thread_pool::rpl_parallel_thread_pool()
|
rpl_parallel_thread_pool::rpl_parallel_thread_pool()
|
||||||
: count(0), threads(0), free_list(0), changing(false), inited(false)
|
: count(0), threads(0), free_list(0), inited(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1450,10 +1435,14 @@ rpl_parallel_thread_pool::init(uint32 size)
|
|||||||
mysql_mutex_init(key_LOCK_rpl_thread_pool, &LOCK_rpl_thread_pool,
|
mysql_mutex_init(key_LOCK_rpl_thread_pool, &LOCK_rpl_thread_pool,
|
||||||
MY_MUTEX_INIT_SLOW);
|
MY_MUTEX_INIT_SLOW);
|
||||||
mysql_cond_init(key_COND_rpl_thread_pool, &COND_rpl_thread_pool, NULL);
|
mysql_cond_init(key_COND_rpl_thread_pool, &COND_rpl_thread_pool, NULL);
|
||||||
changing= false;
|
|
||||||
inited= true;
|
inited= true;
|
||||||
|
|
||||||
return rpl_parallel_change_thread_count(this, size, true);
|
/*
|
||||||
|
The pool is initially empty. Threads will be spawned when a slave SQL
|
||||||
|
thread is started.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1462,7 +1451,7 @@ rpl_parallel_thread_pool::destroy()
|
|||||||
{
|
{
|
||||||
if (!inited)
|
if (!inited)
|
||||||
return;
|
return;
|
||||||
rpl_parallel_change_thread_count(this, 0, true);
|
rpl_parallel_change_thread_count(this, 0);
|
||||||
mysql_mutex_destroy(&LOCK_rpl_thread_pool);
|
mysql_mutex_destroy(&LOCK_rpl_thread_pool);
|
||||||
mysql_cond_destroy(&COND_rpl_thread_pool);
|
mysql_cond_destroy(&COND_rpl_thread_pool);
|
||||||
inited= false;
|
inited= false;
|
||||||
|
@ -227,7 +227,6 @@ struct rpl_parallel_thread_pool {
|
|||||||
struct rpl_parallel_thread *free_list;
|
struct rpl_parallel_thread *free_list;
|
||||||
mysql_mutex_t LOCK_rpl_thread_pool;
|
mysql_mutex_t LOCK_rpl_thread_pool;
|
||||||
mysql_cond_t COND_rpl_thread_pool;
|
mysql_cond_t COND_rpl_thread_pool;
|
||||||
bool changing;
|
|
||||||
bool inited;
|
bool inited;
|
||||||
|
|
||||||
rpl_parallel_thread_pool();
|
rpl_parallel_thread_pool();
|
||||||
@ -337,9 +336,8 @@ struct rpl_parallel {
|
|||||||
extern struct rpl_parallel_thread_pool global_rpl_thread_pool;
|
extern struct rpl_parallel_thread_pool global_rpl_thread_pool;
|
||||||
|
|
||||||
|
|
||||||
extern int rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
extern int rpl_parallel_activate_pool(rpl_parallel_thread_pool *pool);
|
||||||
uint32 new_count,
|
extern int rpl_parallel_inactivate_pool(rpl_parallel_thread_pool *pool);
|
||||||
bool skip_check= false);
|
|
||||||
extern bool process_gtid_for_restart_pos(Relay_log_info *rli, rpl_gtid *gtid);
|
extern bool process_gtid_for_restart_pos(Relay_log_info *rli, rpl_gtid *gtid);
|
||||||
|
|
||||||
#endif /* RPL_PARALLEL_H */
|
#endif /* RPL_PARALLEL_H */
|
||||||
|
@ -652,6 +652,10 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock)
|
|||||||
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
||||||
|
|
||||||
mysql_mutex_unlock(log_lock);
|
mysql_mutex_unlock(log_lock);
|
||||||
|
|
||||||
|
if (opt_slave_parallel_threads > 0 &&
|
||||||
|
!master_info_index->any_slave_sql_running())
|
||||||
|
rpl_parallel_inactivate_pool(&global_rpl_thread_pool);
|
||||||
}
|
}
|
||||||
if (thread_mask & (SLAVE_IO|SLAVE_FORCE_ALL))
|
if (thread_mask & (SLAVE_IO|SLAVE_FORCE_ALL))
|
||||||
{
|
{
|
||||||
@ -958,7 +962,10 @@ int start_slave_threads(bool need_slave_mutex, bool wait_for_start,
|
|||||||
mi);
|
mi);
|
||||||
if (!error && (thread_mask & SLAVE_SQL))
|
if (!error && (thread_mask & SLAVE_SQL))
|
||||||
{
|
{
|
||||||
error= start_slave_thread(
|
if (opt_slave_parallel_threads > 0)
|
||||||
|
error= rpl_parallel_activate_pool(&global_rpl_thread_pool);
|
||||||
|
if (!error)
|
||||||
|
error= start_slave_thread(
|
||||||
#ifdef HAVE_PSI_INTERFACE
|
#ifdef HAVE_PSI_INTERFACE
|
||||||
key_thread_slave_sql,
|
key_thread_slave_sql,
|
||||||
#endif
|
#endif
|
||||||
|
@ -5924,6 +5924,25 @@ bool open_temporary_table(THD *thd, TABLE_LIST *tl)
|
|||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Temporary tables are not safe for parallel replication. They were
|
||||||
|
designed to be visible to one thread only, so have no table locking.
|
||||||
|
Thus there is no protection against two conflicting transactions
|
||||||
|
committing in parallel and things like that.
|
||||||
|
|
||||||
|
So for now, anything that uses temporary tables will be serialised
|
||||||
|
with anything before it, when using parallel replication.
|
||||||
|
|
||||||
|
ToDo: We might be able to introduce a reference count or something
|
||||||
|
on temp tables, and have slave worker threads wait for it to reach
|
||||||
|
zero before being allowed to use the temp table. Might not be worth
|
||||||
|
it though, as statement-based replication using temporary tables is
|
||||||
|
in any case rather fragile.
|
||||||
|
*/
|
||||||
|
if (thd->rgi_slave && thd->rgi_slave->is_parallel_exec &&
|
||||||
|
thd->wait_for_prior_commit())
|
||||||
|
DBUG_RETURN(true);
|
||||||
|
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
if (tl->partition_names)
|
if (tl->partition_names)
|
||||||
{
|
{
|
||||||
|
@ -1787,16 +1787,12 @@ check_slave_parallel_threads(sys_var *self, THD *thd, set_var *var)
|
|||||||
static bool
|
static bool
|
||||||
fix_slave_parallel_threads(sys_var *self, THD *thd, enum_var_type type)
|
fix_slave_parallel_threads(sys_var *self, THD *thd, enum_var_type type)
|
||||||
{
|
{
|
||||||
bool running;
|
bool err;
|
||||||
bool err= false;
|
|
||||||
|
|
||||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||||
mysql_mutex_lock(&LOCK_active_mi);
|
mysql_mutex_lock(&LOCK_active_mi);
|
||||||
running= master_info_index->give_error_if_slave_running();
|
err= master_info_index->give_error_if_slave_running();
|
||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
mysql_mutex_unlock(&LOCK_active_mi);
|
||||||
if (running || rpl_parallel_change_thread_count(&global_rpl_thread_pool,
|
|
||||||
opt_slave_parallel_threads))
|
|
||||||
err= true;
|
|
||||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
@ -3184,12 +3184,6 @@ func_start:
|
|||||||
/* 2. Allocate a new page to the index */
|
/* 2. Allocate a new page to the index */
|
||||||
new_block = btr_page_alloc(cursor->index, hint_page_no, direction,
|
new_block = btr_page_alloc(cursor->index, hint_page_no, direction,
|
||||||
btr_page_get_level(page, mtr), mtr, mtr);
|
btr_page_get_level(page, mtr), mtr, mtr);
|
||||||
|
|
||||||
/* Play safe, if new page is not allocated */
|
|
||||||
if (!new_block) {
|
|
||||||
return(rec);
|
|
||||||
}
|
|
||||||
|
|
||||||
new_page = buf_block_get_frame(new_block);
|
new_page = buf_block_get_frame(new_block);
|
||||||
new_page_zip = buf_block_get_page_zip(new_block);
|
new_page_zip = buf_block_get_page_zip(new_block);
|
||||||
btr_page_create(new_block, new_page_zip, cursor->index,
|
btr_page_create(new_block, new_page_zip, cursor->index,
|
||||||
|
@ -4149,16 +4149,25 @@ dict_table_get_highest_foreign_id(
|
|||||||
for (dict_foreign_set::iterator it = table->foreign_set.begin();
|
for (dict_foreign_set::iterator it = table->foreign_set.begin();
|
||||||
it != table->foreign_set.end();
|
it != table->foreign_set.end();
|
||||||
++it) {
|
++it) {
|
||||||
|
char fkid[MAX_TABLE_NAME_LEN+20];
|
||||||
foreign = *it;
|
foreign = *it;
|
||||||
|
|
||||||
if (ut_strlen(foreign->id) > ((sizeof dict_ibfk) - 1) + len
|
strcpy(fkid, foreign->id);
|
||||||
&& 0 == ut_memcmp(foreign->id, table->name, len)
|
/* Convert foreign key identifier on dictionary memory
|
||||||
&& 0 == ut_memcmp(foreign->id + len,
|
cache to filename charset. */
|
||||||
|
innobase_convert_to_filename_charset(
|
||||||
|
strchr(fkid, '/') + 1,
|
||||||
|
strchr(foreign->id, '/') + 1,
|
||||||
|
MAX_TABLE_NAME_LEN);
|
||||||
|
|
||||||
|
if (ut_strlen(fkid) > ((sizeof dict_ibfk) - 1) + len
|
||||||
|
&& 0 == ut_memcmp(fkid, table->name, len)
|
||||||
|
&& 0 == ut_memcmp(fkid + len,
|
||||||
dict_ibfk, (sizeof dict_ibfk) - 1)
|
dict_ibfk, (sizeof dict_ibfk) - 1)
|
||||||
&& foreign->id[len + ((sizeof dict_ibfk) - 1)] != '0') {
|
&& fkid[len + ((sizeof dict_ibfk) - 1)] != '0') {
|
||||||
/* It is of the >= 4.0.18 format */
|
/* It is of the >= 4.0.18 format */
|
||||||
|
|
||||||
id = strtoul(foreign->id + len
|
id = strtoul(fkid + len
|
||||||
+ ((sizeof dict_ibfk) - 1),
|
+ ((sizeof dict_ibfk) - 1),
|
||||||
&endp, 10);
|
&endp, 10);
|
||||||
if (*endp == '\0') {
|
if (*endp == '\0') {
|
||||||
|
@ -129,6 +129,7 @@ my_error_innodb(
|
|||||||
break;
|
break;
|
||||||
case DB_OUT_OF_FILE_SPACE:
|
case DB_OUT_OF_FILE_SPACE:
|
||||||
my_error(ER_RECORD_FILE_FULL, MYF(0), table);
|
my_error(ER_RECORD_FILE_FULL, MYF(0), table);
|
||||||
|
ut_error;
|
||||||
break;
|
break;
|
||||||
case DB_TEMP_FILE_WRITE_FAILURE:
|
case DB_TEMP_FILE_WRITE_FAILURE:
|
||||||
my_error(ER_GET_ERRMSG, MYF(0),
|
my_error(ER_GET_ERRMSG, MYF(0),
|
||||||
|
@ -770,7 +770,7 @@ os_file_handle_error_cond_exit(
|
|||||||
os_has_said_disk_full = TRUE;
|
os_has_said_disk_full = TRUE;
|
||||||
|
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
ut_error;
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
|
|
||||||
case OS_FILE_AIO_RESOURCES_RESERVED:
|
case OS_FILE_AIO_RESOURCES_RESERVED:
|
||||||
@ -4878,7 +4878,7 @@ os_aio_func(
|
|||||||
mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER);
|
mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
mode = OS_AIO_SYNC; os_has_said_disk_full = TRUE;);
|
mode = OS_AIO_SYNC; os_has_said_disk_full = FALSE;);
|
||||||
|
|
||||||
if (mode == OS_AIO_SYNC
|
if (mode == OS_AIO_SYNC
|
||||||
#ifdef WIN_ASYNC_IO
|
#ifdef WIN_ASYNC_IO
|
||||||
@ -4910,7 +4910,11 @@ os_aio_func(
|
|||||||
ret = os_file_write_func(name, file, buf, offset, n);
|
ret = os_file_write_func(name, file, buf, offset, n);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
os_has_said_disk_full = TRUE; ret = 0; errno = 28;);
|
os_has_said_disk_full = FALSE; ret = 0; errno = 28;);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
os_file_handle_error_cond_exit(name, "os_file_write_func", TRUE, FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -5762,9 +5766,14 @@ consecutive_loop:
|
|||||||
aio_slot->offset, total_len);
|
aio_slot->offset, total_len);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
os_has_said_disk_full = TRUE;
|
os_has_said_disk_full = FALSE;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
errno = 28;);
|
errno = 28;);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
os_file_handle_error_cond_exit(aio_slot->name, "os_file_write_func", TRUE, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ret = os_file_read(
|
ret = os_file_read(
|
||||||
aio_slot->file, combined_buf,
|
aio_slot->file, combined_buf,
|
||||||
|
@ -1463,6 +1463,11 @@ error_exit:
|
|||||||
with a latch. */
|
with a latch. */
|
||||||
dict_table_n_rows_inc(table);
|
dict_table_n_rows_inc(table);
|
||||||
|
|
||||||
|
if (prebuilt->clust_index_was_generated) {
|
||||||
|
/* set row id to prebuilt */
|
||||||
|
ut_memcpy(prebuilt->row_id, node->row_id_buf, DATA_ROW_ID_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
row_update_statistics_if_needed(table);
|
row_update_statistics_if_needed(table);
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
|
@ -3220,12 +3220,6 @@ func_start:
|
|||||||
/* 2. Allocate a new page to the index */
|
/* 2. Allocate a new page to the index */
|
||||||
new_block = btr_page_alloc(cursor->index, hint_page_no, direction,
|
new_block = btr_page_alloc(cursor->index, hint_page_no, direction,
|
||||||
btr_page_get_level(page, mtr), mtr, mtr);
|
btr_page_get_level(page, mtr), mtr, mtr);
|
||||||
|
|
||||||
/* Play safe, if new page is not allocated */
|
|
||||||
if (!new_block) {
|
|
||||||
return(rec);
|
|
||||||
}
|
|
||||||
|
|
||||||
new_page = buf_block_get_frame(new_block);
|
new_page = buf_block_get_frame(new_block);
|
||||||
new_page_zip = buf_block_get_page_zip(new_block);
|
new_page_zip = buf_block_get_page_zip(new_block);
|
||||||
btr_page_create(new_block, new_page_zip, cursor->index,
|
btr_page_create(new_block, new_page_zip, cursor->index,
|
||||||
|
@ -4153,16 +4153,25 @@ dict_table_get_highest_foreign_id(
|
|||||||
for (dict_foreign_set::iterator it = table->foreign_set.begin();
|
for (dict_foreign_set::iterator it = table->foreign_set.begin();
|
||||||
it != table->foreign_set.end();
|
it != table->foreign_set.end();
|
||||||
++it) {
|
++it) {
|
||||||
|
char fkid[MAX_TABLE_NAME_LEN+20];
|
||||||
foreign = *it;
|
foreign = *it;
|
||||||
|
|
||||||
if (ut_strlen(foreign->id) > ((sizeof dict_ibfk) - 1) + len
|
strcpy(fkid, foreign->id);
|
||||||
&& 0 == ut_memcmp(foreign->id, table->name, len)
|
/* Convert foreign key identifier on dictionary memory
|
||||||
&& 0 == ut_memcmp(foreign->id + len,
|
cache to filename charset. */
|
||||||
|
innobase_convert_to_filename_charset(
|
||||||
|
strchr(fkid, '/') + 1,
|
||||||
|
strchr(foreign->id, '/') + 1,
|
||||||
|
MAX_TABLE_NAME_LEN);
|
||||||
|
|
||||||
|
if (ut_strlen(fkid) > ((sizeof dict_ibfk) - 1) + len
|
||||||
|
&& 0 == ut_memcmp(fkid, table->name, len)
|
||||||
|
&& 0 == ut_memcmp(fkid + len,
|
||||||
dict_ibfk, (sizeof dict_ibfk) - 1)
|
dict_ibfk, (sizeof dict_ibfk) - 1)
|
||||||
&& foreign->id[len + ((sizeof dict_ibfk) - 1)] != '0') {
|
&& fkid[len + ((sizeof dict_ibfk) - 1)] != '0') {
|
||||||
/* It is of the >= 4.0.18 format */
|
/* It is of the >= 4.0.18 format */
|
||||||
|
|
||||||
id = strtoul(foreign->id + len
|
id = strtoul(fkid + len
|
||||||
+ ((sizeof dict_ibfk) - 1),
|
+ ((sizeof dict_ibfk) - 1),
|
||||||
&endp, 10);
|
&endp, 10);
|
||||||
if (*endp == '\0') {
|
if (*endp == '\0') {
|
||||||
|
@ -133,6 +133,7 @@ my_error_innodb(
|
|||||||
break;
|
break;
|
||||||
case DB_OUT_OF_FILE_SPACE:
|
case DB_OUT_OF_FILE_SPACE:
|
||||||
my_error(ER_RECORD_FILE_FULL, MYF(0), table);
|
my_error(ER_RECORD_FILE_FULL, MYF(0), table);
|
||||||
|
ut_error;
|
||||||
break;
|
break;
|
||||||
case DB_TEMP_FILE_WRITE_FAILURE:
|
case DB_TEMP_FILE_WRITE_FAILURE:
|
||||||
my_error(ER_GET_ERRMSG, MYF(0),
|
my_error(ER_GET_ERRMSG, MYF(0),
|
||||||
|
@ -840,6 +840,7 @@ os_file_handle_error_cond_exit(
|
|||||||
|
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
|
ut_error;
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
|
|
||||||
case OS_FILE_AIO_RESOURCES_RESERVED:
|
case OS_FILE_AIO_RESOURCES_RESERVED:
|
||||||
@ -4967,7 +4968,7 @@ os_aio_func(
|
|||||||
mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER);
|
mode = mode & (~OS_AIO_SIMULATED_WAKE_LATER);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
mode = OS_AIO_SYNC; os_has_said_disk_full = TRUE;);
|
mode = OS_AIO_SYNC; os_has_said_disk_full = FALSE;);
|
||||||
|
|
||||||
if (mode == OS_AIO_SYNC) {
|
if (mode == OS_AIO_SYNC) {
|
||||||
ibool ret;
|
ibool ret;
|
||||||
@ -4983,7 +4984,12 @@ os_aio_func(
|
|||||||
ret = os_file_write(name, file, buf, offset, n);
|
ret = os_file_write(name, file, buf, offset, n);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
os_has_said_disk_full = TRUE; ret = 0; errno = 28;);
|
os_has_said_disk_full = FALSE; ret = 0; errno = 28;);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
os_file_handle_error_cond_exit(name, "os_file_write_func", TRUE, FALSE,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
@ -5840,7 +5846,13 @@ consecutive_loop:
|
|||||||
aio_slot->offset, total_len);
|
aio_slot->offset, total_len);
|
||||||
|
|
||||||
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28",
|
||||||
os_has_said_disk_full = TRUE; ret = 0; errno = 28;);
|
os_has_said_disk_full = FALSE; ret = 0; errno = 28;);
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
os_file_handle_error_cond_exit(aio_slot->name, "os_file_write_func", TRUE, FALSE,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ret = os_file_read(
|
ret = os_file_read(
|
||||||
aio_slot->file, combined_buf,
|
aio_slot->file, combined_buf,
|
||||||
|
@ -1457,6 +1457,11 @@ error_exit:
|
|||||||
srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
|
srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prebuilt->clust_index_was_generated) {
|
||||||
|
/* set row id to prebuilt */
|
||||||
|
ut_memcpy(prebuilt->row_id, node->row_id_buf, DATA_ROW_ID_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
/* Not protected by dict_table_stats_lock() for performance
|
/* Not protected by dict_table_stats_lock() for performance
|
||||||
reasons, we would rather get garbage in stat_n_rows (which is
|
reasons, we would rather get garbage in stat_n_rows (which is
|
||||||
just an estimate anyway) than protecting the following code
|
just an estimate anyway) than protecting the following code
|
||||||
|
Loading…
x
Reference in New Issue
Block a user