33 changed files with 778 additions and 247 deletions
-
5client/mysql.cc
-
2client/mysql_upgrade.c
-
5client/mysqldump.c
-
2client/mysqlimport.c
-
10client/mysqltest.cc
-
41mysql-test/r/subselect.result
-
41mysql-test/r/subselect_no_exists_to_in.result
-
41mysql-test/r/subselect_no_mat.result
-
41mysql-test/r/subselect_no_opts.result
-
41mysql-test/r/subselect_no_scache.result
-
41mysql-test/r/subselect_no_semijoin.result
-
37mysql-test/suite/parts/r/longname.result
-
32mysql-test/suite/parts/t/longname.test
-
30mysql-test/suite/rpl/r/circular_serverid0.result
-
30mysql-test/suite/rpl/t/circular_serverid0.cnf
-
104mysql-test/suite/rpl/t/circular_serverid0.test
-
40mysql-test/t/subselect.test
-
210sql/ha_partition.cc
-
6sql/item.cc
-
2sql/item_timefunc.cc
-
14sql/partition_info.cc
-
5sql/partition_info.h
-
32sql/slave.cc
-
12sql/sql_class.cc
-
118sql/sql_partition.cc
-
12sql/sql_partition.h
-
8sql/sql_partition_admin.cc
-
14sql/threadpool_unix.cc
-
1storage/archive/ha_archive.cc
-
4storage/maria/ma_loghandler.c
-
1storage/maria/ma_pagecache.c
-
14storage/mroonga/mrn_table.cpp
-
29storage/spider/spd_table.cc
@ -0,0 +1,37 @@ |
|||
set names utf8; |
|||
create database mysqltest1; |
|||
select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; |
|||
database_name table_name length(table_name) |
|||
CREATE TABLE mysqltest1.test_jfg_table_name_with_64_chars_123456789012345678901234567890 ( |
|||
id int(10) unsigned NOT NULL, |
|||
id2 int(10) unsigned NOT NULL, |
|||
PRIMARY KEY ( id, id2 ) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC |
|||
PARTITION BY RANGE ( id ) |
|||
SUBPARTITION BY HASH ( id2 ) |
|||
SUBPARTITIONS 2 ( |
|||
PARTITION test_jfg_partition_name_with_60_chars_1234567890123456789012 VALUES LESS THAN (1000) ENGINE = InnoDB, |
|||
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); |
|||
Warnings: |
|||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. |
|||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. |
|||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. |
|||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. |
|||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. |
|||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. |
|||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. |
|||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. |
|||
select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; |
|||
database_name table_name length(table_name) |
|||
CREATE TABLE mysqltest1.éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé ( |
|||
id int(10) unsigned NOT NULL, |
|||
id2 int(10) unsigned NOT NULL, |
|||
PRIMARY KEY ( id, id2 ) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC |
|||
PARTITION BY RANGE ( id ) |
|||
SUBPARTITION BY HASH ( id2 ) |
|||
SUBPARTITIONS 2 ( |
|||
PARTITION çççççççççççççççççççççççççççççççççççççççççççççççççççççççççççç VALUES LESS THAN (1000) ENGINE = InnoDB, |
|||
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); |
|||
ERROR HY000: The path specified for @0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@ is too long. |
|||
drop database mysqltest1; |
|||
@ -0,0 +1,32 @@ |
|||
source include/have_innodb.inc; |
|||
source include/have_partition.inc; |
|||
set names utf8; |
|||
|
|||
create database mysqltest1; |
|||
select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; |
|||
CREATE TABLE mysqltest1.test_jfg_table_name_with_64_chars_123456789012345678901234567890 ( |
|||
id int(10) unsigned NOT NULL, |
|||
id2 int(10) unsigned NOT NULL, |
|||
PRIMARY KEY ( id, id2 ) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC |
|||
PARTITION BY RANGE ( id ) |
|||
SUBPARTITION BY HASH ( id2 ) |
|||
SUBPARTITIONS 2 ( |
|||
PARTITION test_jfg_partition_name_with_60_chars_1234567890123456789012 VALUES LESS THAN (1000) ENGINE = InnoDB, |
|||
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); |
|||
|
|||
select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; |
|||
|
|||
--error ER_PATH_LENGTH |
|||
CREATE TABLE mysqltest1.éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé ( |
|||
id int(10) unsigned NOT NULL, |
|||
id2 int(10) unsigned NOT NULL, |
|||
PRIMARY KEY ( id, id2 ) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC |
|||
PARTITION BY RANGE ( id ) |
|||
SUBPARTITION BY HASH ( id2 ) |
|||
SUBPARTITIONS 2 ( |
|||
PARTITION çççççççççççççççççççççççççççççççççççççççççççççççççççççççççççç VALUES LESS THAN (1000) ENGINE = InnoDB, |
|||
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); |
|||
|
|||
drop database mysqltest1; |
|||
@ -0,0 +1,30 @@ |
|||
include/rpl_init.inc [topology=1->2->1] |
|||
include/rpl_connect.inc [creating M4] |
|||
include/rpl_connect.inc [creating M2] |
|||
SET @old_debug= @@global.debug; |
|||
STOP SLAVE; |
|||
SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging"; |
|||
START SLAVE IO_THREAD; |
|||
include/wait_for_slave_io_to_start.inc |
|||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb; |
|||
INSERT INTO `t1` VALUES (null, repeat('a', 1024)), (null, repeat('b', 1024)); |
|||
SET debug_sync='now WAIT_FOR start_sql_thread'; |
|||
START SLAVE SQL_THREAD; |
|||
include/show_binlog_events.inc |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
slave-bin.000001 # Gtid # # GTID #-#-# |
|||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb |
|||
SET debug_sync='now SIGNAL go_on_relay_logging'; |
|||
include/show_binlog_events.inc |
|||
Log_name Pos Event_type Server_id End_log_pos Info |
|||
slave-bin.000001 # Gtid # # GTID #-#-# |
|||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb |
|||
slave-bin.000001 # Gtid # # BEGIN GTID #-#-# |
|||
slave-bin.000001 # Table_map # # table_id: # (test.t1) |
|||
slave-bin.000001 # Write_rows_v1 # # table_id: # |
|||
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F |
|||
slave-bin.000001 # Xid # # COMMIT /* XID */ |
|||
drop table t1; |
|||
SET GLOBAL debug_dbug= @old_debug; |
|||
SET debug_sync='RESET'; |
|||
include/rpl_end.inc |
|||
@ -0,0 +1,30 @@ |
|||
!include ../my.cnf |
|||
|
|||
[mysqld.1] |
|||
gtid-domain-id=4 |
|||
server-id=4 |
|||
# |
|||
log-slave-updates |
|||
slave-parallel-threads=0 |
|||
gtid-strict-mode=1 |
|||
gtid-ignore-duplicates=1 |
|||
|
|||
# |
|||
# Max-size row events to minimum with the idea to create |
|||
# a number of Rows_log_event per Query. |
|||
# |
|||
binlog-row-event-max-size=1024 |
|||
|
|||
[mysqld.2] |
|||
gtid-domain-id=2 |
|||
server-id=2 |
|||
# |
|||
log-slave-updates |
|||
slave-parallel-threads=0 |
|||
gtid-strict-mode=1 |
|||
gtid-ignore-duplicates=1 |
|||
binlog-row-event-max-size=1024 |
|||
# The slave will be initialized with a @@global.dbug-var value |
|||
skip-slave-start=1 |
|||
|
|||
|
|||
@ -0,0 +1,104 @@ |
|||
# |
|||
# Testing chain/circular replication scenario of MDEV-9670 |
|||
# The effect of the bug was that we got a commit with a GTID with server_id |
|||
# |
|||
|
|||
--source include/have_binlog_format_row.inc |
|||
--source include/have_innodb.inc |
|||
--source include/have_debug.inc |
|||
--source include/have_debug_sync.inc |
|||
|
|||
--let $rpl_topology= 1->2->1 |
|||
--source include/rpl_init.inc |
|||
|
|||
--let $rpl_connection_name= M4 |
|||
--let $rpl_server_number= 1 |
|||
--source include/rpl_connect.inc |
|||
|
|||
--let $rpl_connection_name= M2 |
|||
--let $rpl_server_number= 2 |
|||
--source include/rpl_connect.inc |
|||
|
|||
# The parameter reflects binlog-row-event-max-size @cnf. |
|||
--let $row_size=1024 |
|||
|
|||
SET @old_debug= @@global.debug; |
|||
|
|||
--connection M2 |
|||
STOP SLAVE; |
|||
SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging"; |
|||
START SLAVE IO_THREAD; |
|||
--source include/wait_for_slave_io_to_start.inc |
|||
|
|||
--connection M2 |
|||
# This query also creates a Gtid event group whose Gtid will remain in |
|||
# ignored status for too long causing a following group split. |
|||
|
|||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb; |
|||
--sync_slave_with_master M4 |
|||
|
|||
# This INSERT will be logged as two Write_log events which the buggy |
|||
# slave applier would split. |
|||
|
|||
--connection M4 |
|||
eval INSERT INTO `t1` VALUES (null, repeat('a', $row_size)), (null, repeat('b', $row_size)); |
|||
|
|||
# START M2 IO thread and wait for its signal to follow with the SQL |
|||
# thread start. At this moment the SQL thread shall be having 2 and |
|||
# "half" groups to execute. The "hafl" one would be committed by the |
|||
# buggy applier after which the IO is released to queue the rest of |
|||
# the 3rd group which the SQL thread commits separately to complete |
|||
# the split. |
|||
|
|||
--connection M2 |
|||
|
|||
# wait for IO signal to start the SQL thread. IO will be hanging upon that. |
|||
SET debug_sync='now WAIT_FOR start_sql_thread'; |
|||
|
|||
# Now the slave server has relay log whose last group is incomplete. |
|||
# An unfixed slave server would go to "insert" a "fake" |
|||
# Gtid_list_log_event event which actually would commit the incomplete |
|||
# group. However before to actual commit do_apply_event() hits some assert. |
|||
# In the fixed server the fake Gtid_list_log_event is *not* inserted |
|||
# in the middle of a group. |
|||
START SLAVE SQL_THREAD; |
|||
|
|||
# Sleep for a little time to give SQL thread a chance to commit while |
|||
# the IO thread is hanging (see |
|||
# DBUG_EXECUTE_IF("dbug.rows_events_to_delay_relay_logging"...) in |
|||
# queue_event). Alternatively to reproduce the case when buggy slave |
|||
# wait for the 1st group commit |
|||
|
|||
#--let $count= 1 |
|||
#--let $table= t1 |
|||
#--source include/wait_until_rows_count.inc |
|||
|
|||
--sleep 2 |
|||
|
|||
# Demonstrate either no split group in the correct slave or the 1nd |
|||
# group in the buggy one |
|||
--source include/show_binlog_events.inc |
|||
|
|||
# Release the IO thread |
|||
SET debug_sync='now SIGNAL go_on_relay_logging'; |
|||
|
|||
# Sync servers |
|||
--sync_slave_with_master M4 |
|||
--connection M4 |
|||
--sync_slave_with_master M2 |
|||
--connection M2 |
|||
|
|||
# Demonstrate replication goes correctly not to create any split, or |
|||
# the 2nd group in the buggy slave |
|||
--source include/show_binlog_events.inc |
|||
|
|||
# |
|||
# Cleanup |
|||
# |
|||
--connection M4 |
|||
drop table t1; |
|||
|
|||
--connection M2 |
|||
SET GLOBAL debug_dbug= @old_debug; |
|||
SET debug_sync='RESET'; |
|||
--source include/rpl_end.inc |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue