From bb571bae827160e608bef793f8e07220e8fc1267 Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Tue, 25 Aug 2026 22:22:08 +0200 Subject: [PATCH] MDEV-40760: Stop using common_header_len and post_header_len from FD event The FORMAT_DESCRIPTION_EVENT contains values common_header_len and post_header_len array for individual event types, which were intended to describe the format of following events in the binlog/relaylog. However, this flexibility has been problematic and never useful: - The values have never changed in MariaDB since before 10.0, nor in MySQL. - Having to always have the correct format description event available in the code when reading an event causes a lot of complexity (and has historically caused numerous bugs). - The potential for a corrupt or malicious format description event requires careful validation that these length values are correct, which again has historically seen bugs. Since the values never change anyway, this patch removed the code that reads them when reading the format description event, just using the hard-coded values that are the only valid numbers anyway. Remove support for ancient row events with post_header_len=6. Remove support for reading binlogs created by custom MySQL forks with different common_header_len (ie. MDEV-4645). Signed-off-by: Kristian Nielsen --- mysql-test/main/mysqlbinlog.result | 284 ++------------ mysql-test/main/mysqlbinlog.test | 13 +- .../std_data/mdev-4645-binlog_checksum.binlog | Bin 386 -> 0 bytes .../std_data/mdev-4645-binlog_group_id.binlog | Bin 398 -> 0 bytes .../mdev-4645-binlog_group_id_checksum.binlog | Bin 410 -> 0 bytes .../suite/binlog/r/binlog_base64_flag.result | 15 - .../suite/binlog/r/binlog_old_versions.result | 71 ---- .../std_data/binlog_old_version_4_1.000001 | Bin 149436 -> 0 bytes .../binlog/std_data/invalid_row_v2_tag.001 | Bin 353 -> 0 bytes .../suite/binlog/std_data/ver_5_1-telco.001 | Bin 150385 -> 0 bytes .../suite/binlog/std_data/ver_5_1_17.001 | Bin 150385 -> 0 bytes .../suite/binlog/std_data/ver_5_1_23.001 | Bin 150402 -> 0 bytes .../binlog/std_data/ver_trunk_row_v2.001 | Bin 151722 -> 0 bytes .../suite/binlog/t/binlog_base64_flag.test | 25 -- .../suite/binlog/t/binlog_old_versions.test | 165 -------- .../rpl_compressed_log_event_overflow.result | 12 +- .../suite/rpl/r/rpl_cross_version.result | 22 -- .../suite/rpl/r/rpl_rotate_ev_overflow.result | 19 - mysql-test/suite/rpl/r/rpl_row_4_bytes.result | 28 -- .../t/rpl_compressed_log_event_overflow.test | 20 +- .../suite/rpl/t/rpl_cross_version-master.opt | 1 - mysql-test/suite/rpl/t/rpl_cross_version.test | 48 --- .../suite/rpl/t/rpl_rotate_ev_overflow.test | 51 --- .../suite/rpl/t/rpl_row_4_bytes-master.opt | 2 - mysql-test/suite/rpl/t/rpl_row_4_bytes.test | 34 -- sql/log_event.cc | 360 +++++++----------- sql/log_event.h | 32 +- sql/log_event_old.cc | 2 +- sql/log_event_server.cc | 2 +- sql/rpl_mi.h | 3 +- sql/slave.cc | 31 +- 31 files changed, 211 insertions(+), 1029 deletions(-) delete mode 100644 mysql-test/std_data/mdev-4645-binlog_checksum.binlog delete mode 100644 mysql-test/std_data/mdev-4645-binlog_group_id.binlog delete mode 100644 mysql-test/std_data/mdev-4645-binlog_group_id_checksum.binlog delete mode 100644 mysql-test/suite/binlog/r/binlog_old_versions.result delete mode 100644 mysql-test/suite/binlog/std_data/binlog_old_version_4_1.000001 delete mode 100644 mysql-test/suite/binlog/std_data/invalid_row_v2_tag.001 delete mode 100644 mysql-test/suite/binlog/std_data/ver_5_1-telco.001 delete mode 100644 mysql-test/suite/binlog/std_data/ver_5_1_17.001 delete mode 100644 mysql-test/suite/binlog/std_data/ver_5_1_23.001 delete mode 100644 mysql-test/suite/binlog/std_data/ver_trunk_row_v2.001 delete mode 100644 mysql-test/suite/binlog/t/binlog_old_versions.test delete mode 100644 mysql-test/suite/rpl/r/rpl_cross_version.result delete mode 100644 mysql-test/suite/rpl/r/rpl_rotate_ev_overflow.result delete mode 100644 mysql-test/suite/rpl/r/rpl_row_4_bytes.result delete mode 100644 mysql-test/suite/rpl/t/rpl_cross_version-master.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_cross_version.test delete mode 100644 mysql-test/suite/rpl/t/rpl_rotate_ev_overflow.test delete mode 100644 mysql-test/suite/rpl/t/rpl_row_4_bytes-master.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_row_4_bytes.test diff --git a/mysql-test/main/mysqlbinlog.result b/mysql-test/main/mysqlbinlog.result index 1e69c2e4002..f71ac4ebdc7 100644 --- a/mysql-test/main/mysqlbinlog.result +++ b/mysql-test/main/mysqlbinlog.result @@ -407,16 +407,26 @@ ROLLBACK /* added by mysqlbinlog */; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; ROLLBACK/*!*/; -SET TIMESTAMP=1108844556/*!*/; +use `test`/*!*/; +SET TIMESTAMP=1140641973/*!*/; SET @@session.pseudo_thread_id=999999999/*!*/; +SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.system_versioning_insert_history=0/*!*/; +SET @@session.sql_mode=#/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; +/*!\C latin1 *//*!*/; +SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=#/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; -BEGIN +CREATE TABLE t1(c INT) /*!*/; -use `test`/*!*/; -SET TIMESTAMP=1108844555/*!*/; -insert t1 values (1) +SET TIMESTAMP=1140641985/*!*/; +CREATE TABLE t2(s CHAR(200)) +/*!*/; +SET TIMESTAMP=1140642018/*!*/; +CREATE TRIGGER trg1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES(CURRENT_USER()) +/*!*/; +SET TIMESTAMP=1140642025/*!*/; +INSERT INTO t1 VALUES(1) /*!*/; DELIMITER ; # End of log file @@ -427,16 +437,21 @@ ROLLBACK /* added by mysqlbinlog */; /*!40019 SET @@session.max_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; -SET TIMESTAMP=1108844556/*!*/; +ROLLBACK/*!*/; +use `test`/*!*/; +SET TIMESTAMP=1140642018/*!*/; SET @@session.pseudo_thread_id=999999999/*!*/; +SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.system_versioning_insert_history=0/*!*/; +SET @@session.sql_mode=#/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; +/*!\C latin1 *//*!*/; +SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=#/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; -BEGIN +CREATE TRIGGER trg1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES(CURRENT_USER()) /*!*/; -use `test`/*!*/; -SET TIMESTAMP=1108844555/*!*/; -insert t1 values (1) +SET TIMESTAMP=1140642025/*!*/; +INSERT INTO t1 VALUES(1) /*!*/; DELIMITER ; # End of log file @@ -942,255 +957,6 @@ SET GLOBAL SERVER_ID = 1; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 -#130807 20:29:20 server id 1 end_log_pos 106 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 4 |20 ae 02 52 |0f |01 00 00 00 |66 00 00 00 |6a 00 00 00 |00 01 -# -# 17 04 00 35 2e 31 2e 36 33 2d 67 6f 6f 67 6c 65 2d |..5.1.63-google-| -# 27 64 65 62 75 67 2d 6c 6f 67 00 00 00 00 00 00 00 |debug-log.......| -# 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -# 47 00 00 00 00 20 ae 02 52 17 38 0d 00 08 00 12 00 |.... ..R.8......| -# 57 04 04 04 04 12 00 00 53 00 04 1a 08 00 00 00 08 |.......S........| -# 67 08 08 02 |...| -# -# Event: Start: binlog v 4, server v 5.1.63-google-debug-log created 130807 20:29:20 at startup -ROLLBACK/*!*/; -BINLOG ' -IK4CUg8BAAAAZgAAAGoAAAAAAQQANS4xLjYzLWdvb2dsZS1kZWJ1Zy1sb2cAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAgrgJSFzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC -'/*!*/; -# at 106 -#130807 20:29:24 server id 1 end_log_pos 207 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 6a |24 ae 02 52 |02 |01 00 00 00 |65 00 00 00 |cf 00 00 00 |00 00 -# -# 81 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 91 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# a1 04 08 00 08 00 08 00 00 63 72 65 61 74 65 20 74 |........create t| -# b1 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id| -# c1 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375907364/*!*/; -SET @@session.pseudo_thread_id=1/*!*/; -SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.system_versioning_insert_history=0/*!*/; -SET @@session.sql_mode=0/*!*/; -SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; -/*!\C latin1 *//*!*/; -SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/; -SET @@session.lc_time_names=0/*!*/; -SET @@session.collation_database=DEFAULT/*!*/; -create table test.t1 (id int not null) -/*!*/; -# at 207 -#130807 20:29:26 server id 1 end_log_pos 305 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# cf |26 ae 02 52 |02 |01 00 00 00 |62 00 00 00 |31 01 00 00 |00 00 -# -# e6 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# f6 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 106 04 08 00 08 00 08 00 00 69 6e 73 65 72 74 20 69 |........insert i| -# 116 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)| -# 126 20 76 61 6c 75 65 73 20 28 31 29 | values (1)| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375907366/*!*/; -insert into test.t1 (id) values (1) -/*!*/; -# at 305 -#130807 20:29:28 server id 1 end_log_pos 386 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 131 |28 ae 02 52 |02 |01 00 00 00 |51 00 00 00 |82 01 00 00 |00 00 -# -# 148 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 158 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 168 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab| -# 178 6c 65 20 74 65 73 74 2e 74 31 |le test.t1| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375907368/*!*/; -drop table test.t1 -/*!*/; -DELIMITER ; -# End of log file -ROLLBACK /* added by mysqlbinlog */; -/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; -/*!40019 SET @@session.max_delayed_threads=0*/; -/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; -DELIMITER /*!*/; -# at 4 -#130807 20:25:35 server id 1 end_log_pos 106 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 4 |3f ad 02 52 |0f |01 00 00 00 |66 00 00 00 |6a 00 00 00 |00 00 -# -# 17 04 00 35 2e 31 2e 36 33 2d 67 6f 6f 67 6c 65 2d |..5.1.63-google-| -# 27 64 65 62 75 67 2d 6c 6f 67 00 00 00 00 00 00 00 |debug-log.......| -# 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -# 47 00 00 00 00 3f ad 02 52 1b 38 0d 00 08 00 12 00 |....?..R.8......| -# 57 04 04 04 04 12 00 00 53 00 04 1a 08 00 00 00 08 |.......S........| -# 67 08 08 02 |...| -# -# Event: Start: binlog v 4, server v 5.1.63-google-debug-log created 130807 20:25:35 at startup -ROLLBACK/*!*/; -BINLOG ' -P60CUg8BAAAAZgAAAGoAAAAAAAQANS4xLjYzLWdvb2dsZS1kZWJ1Zy1sb2cAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAA/rQJSGzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC -'/*!*/; -# at 106 -#130807 20:25:41 server id 1 end_log_pos 211 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 6a |45 ad 02 52 |02 |01 00 00 00 |69 00 00 00 |d3 00 00 00 |00 00 -# -# 85 01 00 00 00 01 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 95 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# a5 04 08 00 08 00 08 00 00 63 72 65 61 74 65 20 74 |........create t| -# b5 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id| -# c5 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)| -# -# Event: Query thread_id=1 exec_time=1 error_code=0 xid=0 -SET TIMESTAMP=1375907141/*!*/; -SET @@session.pseudo_thread_id=1/*!*/; -SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.system_versioning_insert_history=0/*!*/; -SET @@session.sql_mode=0/*!*/; -SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; -/*!\C latin1 *//*!*/; -SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/; -SET @@session.lc_time_names=0/*!*/; -SET @@session.collation_database=DEFAULT/*!*/; -create table test.t1 (id int not null) -/*!*/; -# at 211 -#130807 20:25:44 server id 1 end_log_pos 313 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# d3 |48 ad 02 52 |02 |01 00 00 00 |66 00 00 00 |39 01 00 00 |00 00 -# -# ee 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# fe 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 10e 04 08 00 08 00 08 00 00 69 6e 73 65 72 74 20 69 |........insert i| -# 11e 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)| -# 12e 20 76 61 6c 75 65 73 20 28 31 29 | values (1)| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375907144/*!*/; -insert into test.t1 (id) values (1) -/*!*/; -# at 313 -#130807 20:25:48 server id 1 end_log_pos 398 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 139 |4c ad 02 52 |02 |01 00 00 00 |55 00 00 00 |8e 01 00 00 |00 00 -# -# 154 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 164 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 174 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab| -# 184 6c 65 20 74 65 73 74 2e 74 31 |le test.t1| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375907148/*!*/; -drop table test.t1 -/*!*/; -DELIMITER ; -# End of log file -ROLLBACK /* added by mysqlbinlog */; -/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; -/*!40019 SET @@session.max_delayed_threads=0*/; -/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; -DELIMITER /*!*/; -# at 4 -#130807 20:20:55 server id 1 end_log_pos 106 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 4 |27 ac 02 52 |0f |01 00 00 00 |66 00 00 00 |6a 00 00 00 |00 01 -# -# 17 04 00 35 2e 31 2e 36 33 2d 67 6f 6f 67 6c 65 2d |..5.1.63-google-| -# 27 64 65 62 75 67 2d 6c 6f 67 00 00 00 00 00 00 00 |debug-log.......| -# 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -# 47 00 00 00 00 27 ac 02 52 1f 38 0d 00 08 00 12 00 |....'..R.8......| -# 57 04 04 04 04 12 00 00 53 00 04 1a 08 00 00 00 08 |.......S........| -# 67 08 08 02 |...| -# -# Event: Start: binlog v 4, server v 5.1.63-google-debug-log created 130807 20:20:55 at startup -ROLLBACK/*!*/; -BINLOG ' -J6wCUg8BAAAAZgAAAGoAAAAAAQQANS4xLjYzLWdvb2dsZS1kZWJ1Zy1sb2cAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAnrAJSHzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC -'/*!*/; -# at 106 -#130807 20:21:19 server id 1 end_log_pos 215 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 6a |3f ac 02 52 |02 |01 00 00 00 |6d 00 00 00 |d7 00 00 00 |00 00 -# -# 89 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 99 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# a9 04 08 00 08 00 08 00 00 63 72 65 61 74 65 20 74 |........create t| -# b9 61 62 6c 65 20 74 65 73 74 2e 74 31 20 28 69 64 |able test.t1 (id| -# c9 20 69 6e 74 20 6e 6f 74 20 6e 75 6c 6c 29 | int not null)| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375906879/*!*/; -SET @@session.pseudo_thread_id=1/*!*/; -SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.system_versioning_insert_history=0/*!*/; -SET @@session.sql_mode=0/*!*/; -SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; -/*!\C latin1 *//*!*/; -SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/; -SET @@session.lc_time_names=0/*!*/; -SET @@session.collation_database=DEFAULT/*!*/; -create table test.t1 (id int not null) -/*!*/; -# at 215 -#130807 20:21:31 server id 1 end_log_pos 321 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# d7 |4b ac 02 52 |02 |01 00 00 00 |6a 00 00 00 |41 01 00 00 |00 00 -# -# f6 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 106 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 116 04 08 00 08 00 08 00 00 69 6e 73 65 72 74 20 69 |........insert i| -# 126 6e 74 6f 20 74 65 73 74 2e 74 31 20 28 69 64 29 |nto test.t1 (id)| -# 136 20 76 61 6c 75 65 73 20 28 31 29 | values (1)| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375906891/*!*/; -insert into test.t1 (id) values (1) -/*!*/; -# at 321 -#130807 20:21:41 server id 1 end_log_pos 410 -# Position -# |Timestamp |Type |Master ID |Size |Master Pos |Flags -# 141 |55 ac 02 52 |02 |01 00 00 00 |59 00 00 00 |9a 01 00 00 |00 00 -# -# 160 01 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 40 |...............@| -# 170 00 00 01 00 00 00 00 00 00 00 00 06 03 73 74 64 |.............std| -# 180 04 08 00 08 00 08 00 00 64 72 6f 70 20 74 61 62 |........drop tab| -# 190 6c 65 20 74 65 73 74 2e 74 31 |le test.t1| -# -# Event: Query thread_id=1 exec_time=0 error_code=0 xid=0 -SET TIMESTAMP=1375906901/*!*/; -drop table test.t1 -/*!*/; -DELIMITER ; -# End of log file -ROLLBACK /* added by mysqlbinlog */; -/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; -/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; -/*!40019 SET @@session.max_delayed_threads=0*/; -/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; -DELIMITER /*!*/; -# at 4 #130807 20:38:51 server id 1 end_log_pos 106 # Position # |Timestamp |Type |Master ID |Size |Master Pos |Flags diff --git a/mysql-test/main/mysqlbinlog.test b/mysql-test/main/mysqlbinlog.test index 3cb216e0994..bcd3aa6e2e5 100644 --- a/mysql-test/main/mysqlbinlog.test +++ b/mysql-test/main/mysqlbinlog.test @@ -123,13 +123,13 @@ select "--- reading stdin --" as ""; --enable_query_log --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --replace_regex /SQL_LOAD_MB-[0-9a-f]+-[0-9a-f]+/SQL_LOAD_MB-#-#/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ ---exec $MYSQL_BINLOG --short-form - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001 +--exec $MYSQL_BINLOG --short-form - < $MYSQL_TEST_DIR/std_data/bug16266.000001 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --replace_regex /SQL_LOAD_MB-[0-9a-f]+-[0-9a-f]+/SQL_LOAD_MB-#-#/ /@@session.sql_mode=\d+/@@session.sql_mode=#/ /collation_server=\d+/collation_server=#/ # postion is constant to correspond to an event in pre-recorded binlog ---let $binlog_start_pos=79 ---exec $MYSQL_BINLOG --short-form --start-position=$binlog_start_pos - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001 +--let $binlog_start_pos=274 +--exec $MYSQL_BINLOG --short-form --start-position=$binlog_start_pos - < $MYSQL_TEST_DIR/std_data/bug16266.000001 drop table t1,t2; @@ -600,9 +600,10 @@ eval SET GLOBAL SERVER_ID = $old_server_id; --echo # FDE corrupted in relay log --echo # --let TZ=GMT ---exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_checksum.binlog ---exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_group_id.binlog ---exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_group_id_checksum.binlog +# Here used to be testing with special binlog files where the Format Description +# event had common_header_len increased. We no longer support different +# common_header_len, as such are never generated by MariaDB nor MySQL, would +# require custom fork of the server code. --exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_none.binlog # diff --git a/mysql-test/std_data/mdev-4645-binlog_checksum.binlog b/mysql-test/std_data/mdev-4645-binlog_checksum.binlog deleted file mode 100644 index 861e9b4fd67e4f44086feccf2907fbe480214566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeyDl$ocnjwy(rk%56B4T!UVn1PXn!Bo#s&&*giJwHD^Csj8kHK{aRHzz+GB#Q%p zj1jlsW#C{CVqgIRAqIwE1{Ns}pmGil4ki_#G!w{{R3JVNHsf#Hiwz(VD3Aiu4nWIc zd^YCdk`xvWpn*U$l8aIkOHvg|5|eU(WNLAVUWuWCMrMjaW?qRxUOo_)=HzIq!7NDv z8e#}G>3x!L4%|ov2E3MJ<`t(Fm4J-QN47&#p)4_{G__bk!%$NLWLl(LxbLSGo~gxKcboYh#IoM%vV4coR?KeZ-ldq9Edj zKTI;i`^+s>#q8p(yA1%?qYr2R2BRpB#=|f-Cf72|WLoE;Ho2RAFNEn&I>5mPhVlV6 zzGe{McEG=QpdrlxuiLPZO263=@rfd;*cHlN~QU9i7 Jr8#~ca|g0(IpP2S diff --git a/mysql-test/std_data/mdev-4645-binlog_group_id_checksum.binlog b/mysql-test/std_data/mdev-4645-binlog_group_id_checksum.binlog deleted file mode 100644 index a936ffb139a6870ba339d45d09c54d3376977984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmeyDl$oc#hAD`jk%56B4T!UVn1PXn!Bo#s&&*giJwHD^Csj8kHK{aRHzz+GB#Q%p zjFGqCW#C{CVqgIRAqIwE1{Ns}pmGil4kmk`G!w{{Tp+#1fza!wUtw$@R|<$7 zfQ|rCV8F&)T#~}V0W=tBR&r5lVo9n(Nn%nCkW4Ku(JL`j(8x?t$jmEI$jb-f(wrPk zZK@@VuG5+6=SdoZZrYQGV_X4i%LL7=Of#tsZf@fQ<_?=pkb&P3bQE^X#Om) V!OT#bj=M1z5NlIPQGNlcrvSf}KJWkl diff --git a/mysql-test/suite/binlog/r/binlog_base64_flag.result b/mysql-test/suite/binlog/r/binlog_base64_flag.result index c4c4fddb5d6..1ff2ae31a4f 100644 --- a/mysql-test/suite/binlog/r/binlog_base64_flag.result +++ b/mysql-test/suite/binlog/r/binlog_base64_flag.result @@ -78,21 +78,6 @@ DELIMITER ; ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; -==== Test non-matching FD event and Row event ==== -BINLOG ' -4CdYRw8BAAAAYgAAAGYAAAAAAAQANS4xLjE1LW5kYi02LjEuMjQtZGVidWctbG9nAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAADgJ1hHEzgNAAgAEgAEBAQEEgAATwAEGggICAg= -'; -BINLOG ' -Dl1YRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE= -Dl1YRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+BQAAAA== -'; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use -select * from t1; -a -1 -1 -3 CREATE TABLE char128_utf8 ( i1 INT NOT NULL, c CHAR(128) CHARACTER SET utf8 NOT NULL, diff --git a/mysql-test/suite/binlog/r/binlog_old_versions.result b/mysql-test/suite/binlog/r/binlog_old_versions.result deleted file mode 100644 index de8e270a3b9..00000000000 --- a/mysql-test/suite/binlog/r/binlog_old_versions.result +++ /dev/null @@ -1,71 +0,0 @@ -==== Read binlog with v2 row events ==== -SELECT * FROM t1 ORDER BY a; -a b -0 last_insert_id -1 one -3 last stm in trx: next event should be xid -4 four -62046 random -SELECT * FROM t2 ORDER BY a; -a b -3 first stm in trx -SELECT COUNT(*) FROM t3; -COUNT(*) -17920 -DROP TABLE t1, t2, t3; -FOUND 3 /[Uu]nknown [Ee]vent/ in invalid_row_v2_tag.sql -==== Read modern binlog (version 5.1.23) ==== -SELECT * FROM t1 ORDER BY a; -a b -0 last_insert_id -1 one -3 last stm in trx: next event should be xid -4 four -674568 random -SELECT * FROM t2 ORDER BY a; -a b -3 first stm in trx -SELECT COUNT(*) FROM t3; -COUNT(*) -17920 -DROP TABLE t1, t2, t3; -==== Read binlog from version 5.1.17 ==== -SELECT * FROM t1 ORDER BY a; -a b -0 last_insert_id -1 one -3 last stm in trx: next event should be xid -4 four -764247 random -SELECT * FROM t2 ORDER BY a; -a b -3 first stm in trx -SELECT COUNT(*) FROM t3; -COUNT(*) -17920 -DROP TABLE t1, t2, t3; -==== Read binlog from version 4.1 ==== -SELECT * FROM t1 ORDER BY a; -a b -0 last_insert_id -4 four -190243 random -SELECT COUNT(*) FROM t3; -COUNT(*) -17920 -DROP TABLE t1, t3; -==== Read binlog from telco tree (mysql-5.1-telco-6.1) ==== -SELECT * FROM t1 ORDER BY a; -a b -0 last_insert_id -1 one -3 last stm in trx: next event should be xid -4 four -703356 random -SELECT * FROM t2 ORDER BY a; -a b -3 first stm in trx -SELECT COUNT(*) FROM t3; -COUNT(*) -17920 -DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_4_1.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_4_1.000001 deleted file mode 100644 index 66db9668d46eeb5a3659253091a62b79d718f0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149436 zcmeI5O=}xh6oyA`3W=fJwu?dsx`-2!kgqOFt2V;8O&o}wK%m9USYt~>8Ntlh#QUzh z?KYeImqMYxqR@X)dfs#Aj+>eWX{1&A1f-dftQko;y7zg{*Znh}mY+UX@c`_RA zkJA0&*AGW&b0^)((rMY;Nb~e?l2u!u-@bM&9qn%K?2ghe(nn`Id&5WFS--UNyz#TW z`>gkLRzKZcozC9WhkC(vyZzq1{8h4{^If)E_|QqxU1($v`b(03UT9}`Z}en8-PzrL ztatxx`0(jyFWvg;)s6J((fp*k>X-XKFZ;}Hd;a<#e`!9pgXGQ6zinvSUFWGCocfZmteTwEo3@#ko5MWIvrW4lzR>+qqkH?PW!x6yxHm12vr4t`I_)oO?SSq=PzlB zN@ud4k8kw4Vea2euGi+pS-98J`CK30?(M^C<409-I<=SUiFQ|CUEKGVg~!8NYM+?; zSABlqXVj(4+zS0K_*SpBooSiPw0Cl-D{A8(NIT&??VkU+Jvi4#(qr=~KBV*OJ=zOx zXXba)OomX*YBz|Y8W(nDd!Q<_W}^2}RA&FWq;~vL7!gKf=716TD5W1)Rx=X$Si?wE z#_38EX|N5SewfaD7AyQaVLDq1vV5HJVJ0vPOyooZ6D>pP7?J&g0BbXY733a9gb}Um zGr)*2B8&(>5za;%2^*Y^I2$Lery7qn9&02%VUM1{IKUdP2CM;Vz#6b7im%xaunrj@ zniok0v2VfBieiA4d?NCR6r>M=OM9&f*KRZtqWC1Gd1jmq9U4A}o%zp&%*MqAjI;I9QN_na-&8Seb({B8&(l^3nk6&Zs+U zAE?J}%G|geblZ z4&+#qV{K#OqB&%MHDC=`1J-~wU=3Kawnvt?i#JfbXlP{V2*cb41_2dd4Oj!#$F$ok zvxeeDiWgf4W*)7b#xsVyK0w^ERAH>}(0Q4qy#f z1J-~wU=3K4ltxloM^PlDk(73-gdUhz`E8n6be0c*e-um-FFYrxvp$jq^oBur8``Q8*-3^d~x&P1I6Z zZX4m=yNonNEKv%3fHhzZSOeC8HDFCD2+qbeG(Rs;rcH&`x7*C)VFF7PlTTcKar+I+U<=^ zyHUJI@uJt_S^3Ab%x1zRGmCcPQ>KpPMh?%o#0$G~Rfc0k)SXdx)-THqb*2G?C_Yhq zqWDDd1>{528R`sm23XV3!3CGtNO=aRv!&)oz#6b7>_ONgggflFK-dGY2CM;Vz#6ay ztoyIR2Ur8vfHhzZSldY0;IXzMGnVgU`A$nC(!5AMkz5URw`ObD^Exq_q02hRCkku) zQZhuz5UUKa%Fr6h#Hhum7Jp?$juBx*7!eH}Xy_pQMjvacJ?LXiA8YzpcPgDe*8M7c z0BgV+um-FFYrvW^YQi2JP|+!kPHCr8D|@wwaa^)fjRfMprp&lVC(CzU95?`Lz#6ay ztO0Al8nC`NKYAWo$VQ_-5&en!c`q>{`vuXT$jso7k|ETY*?}e+PvZ5xwuR=!*#~uo zIzyeI&QNDUDDsKOCnBGSd?NCRx|jxGkA8|Aum-FFYrq`cB%lF~>@BPorfG?LOf=|xgn zzj!HN4Oj!#fHhzZSd)}SQd$R8G`TV~GMPDC!#WQdTF7jin`Di7Ma0gQ&Mm=+qVdEn zMuZVr7e1K*0ayaCG6Mpzmaivj$=2)}T>A-`&f+u{w@hbDXG~}IYoI@oCNicoOS`U^ z&O*9v(=ALK_B2`8V40@q&bQD=Ei18bH{7Ss41iFmlojWqq&7z{I-iM z>I`*;I@6G#ASu-zI2%!Cl3vbOsIx4$Z^HD~%I(`0n`^q3ml8;77^3%qK z?db+8X#hCVeCUW2x1bWieJ7+6RB|yz>NUZA`5L`08dN&eupmMLmCEBdX%gHgxKD8Z z-0^6?3w)4(wT4Gl^|ZXms?3^+8tusS2v~p(C%W)CN7IFmE`0swM>ikMu5{s}3twNz!iXf` zS$v3QA+2XKhCmcFZubMO#RIR3K0i7G=}hqF6JO JH`}o-%3l=-N?iZ| diff --git a/mysql-test/suite/binlog/std_data/invalid_row_v2_tag.001 b/mysql-test/suite/binlog/std_data/invalid_row_v2_tag.001 deleted file mode 100644 index 4b558372ea550f6aace9cefa6992b199efbb243a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeyDl$m!YJvNJy*KV8@?!YmBDKefEmPMkB3Mr0@)5I(yR;&jQ>#;B%&(-$^!sP>lvQ_ diff --git a/mysql-test/suite/binlog/std_data/ver_5_1-telco.001 b/mysql-test/suite/binlog/std_data/ver_5_1-telco.001 deleted file mode 100644 index 76856cb04a2eb5eec4276f605fc8a67d1a6688d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150385 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 sJ6p;1YcKlMxHP5=M^ diff --git a/mysql-test/suite/binlog/std_data/ver_5_1_23.001 b/mysql-test/suite/binlog/std_data/ver_5_1_23.001 deleted file mode 100644 index 0e9a9d1470abb341c9fe78d98e183b8ac6905c12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150402 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 diff --git a/mysql-test/suite/binlog/std_data/ver_trunk_row_v2.001 b/mysql-test/suite/binlog/std_data/ver_trunk_row_v2.001 deleted file mode 100644 index 28360beca686f9b174f9cf675fe4e57f0dd72117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151722 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 T_mZK_a(=1P&n{ol@7lis=ZdLy diff --git a/mysql-test/suite/binlog/t/binlog_base64_flag.test b/mysql-test/suite/binlog/t/binlog_base64_flag.test index 5311da54f5f..ab516326e5e 100644 --- a/mysql-test/suite/binlog/t/binlog_base64_flag.test +++ b/mysql-test/suite/binlog/t/binlog_base64_flag.test @@ -100,31 +100,6 @@ SELECT @binlog_fragment_0, @binlog_fragment_1 as 'NULL','NULL'; exec $MYSQL_BINLOG --base64-output=never --print-row-count=0 --print-row-event-positions=0 suite/binlog/std_data/bug32407.001; -# Test that the following fails cleanly: "First, read a -# Format_description event which has N event types. Then, read an -# event of type M>N" ---echo ==== Test non-matching FD event and Row event ==== - -# This is the Format_description_log_event from -# bug32407.001, encoded in base64. It contains only the old -# row events (number of event types is 22) -BINLOG ' -4CdYRw8BAAAAYgAAAGYAAAAAAAQANS4xLjE1LW5kYi02LjEuMjQtZGVidWctbG9nAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAADgJ1hHEzgNAAgAEgAEBAQEEgAATwAEGggICAg= -'; - -# The following is a Write_rows_log_event with event type 23, i.e., -# not supported by the Format_description_log_event above. It -# corresponds to the following query: -# INSERT INTO t1 VALUES (5) -error 1149; -BINLOG ' -Dl1YRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE= -Dl1YRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+BQAAAA== -'; -# the above line should fail and 5 should not be in the binlog. -select * from t1; - # Test that BUG#37426 is triggered. CREATE TABLE char128_utf8 ( diff --git a/mysql-test/suite/binlog/t/binlog_old_versions.test b/mysql-test/suite/binlog/t/binlog_old_versions.test deleted file mode 100644 index 2517c72e78f..00000000000 --- a/mysql-test/suite/binlog/t/binlog_old_versions.test +++ /dev/null @@ -1,165 +0,0 @@ -# Test that old binlog formats can be read. - -# Some previous versions of MySQL use their own binlog format, -# especially in row-based replication. This test uses saved binlogs -# from those old versions to test that we can replicate from old -# versions to the present version. - -# Replicating from old versions to new versions is necessary in an -# online upgrade scenario, where the . - -# The previous versions we currently test are: -# - version 5.1.17 and earlier trees -# - mysql-5.1-wl2325-xxx trees (AKA alcatel trees) -# - mysql-5.1-telco-6.1 trees -# For completeness, we also test mysql-5.1-new_rpl, which is supposed -# to be the "correct" version. - -# All binlogs were generated with the same commands (listed at the end -# of this test for reference). The binlogs contain the following -# events: Table_map, Write_rows, Update_rows, Delete_rows Query, Xid, -# User_var, Int_var, Rand, Begin_load, Append_file, Execute_load. - -# Related bugs: BUG#27779, BUG#31581, BUG#31582, BUG#31583, BUG#32407 - -source include/not_embedded.inc; - ---echo ==== Read binlog with v2 row events ==== - -# Read binlog. ---exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/ver_trunk_row_v2.001 | $MYSQL --local-infile=1 -# Show result. -SELECT * FROM t1 ORDER BY a; -SELECT * FROM t2 ORDER BY a; -SELECT COUNT(*) FROM t3; -# Reset. -DROP TABLE t1, t2, t3; - -# MDEV-39485 Heap-buffer-overflow upon read in `Rows_log_event` constructor -# -# This binlog file contains a normal Format Description -# Event followed by 3 malformed v2 Write Rows Events: -# 1. A tag followed by no data -# 2. An undersized tagged data followed by an unrecognized tag -# 3. A tag followed by a length longer than the entire event ---let SEARCH_PATTERN= [Uu]nknown [Ee]vent ---let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/invalid_row_v2_tag.sql ---exec $MYSQL_BINLOG --force-read --verbose suite/binlog/std_data/invalid_row_v2_tag.001 > $SEARCH_FILE ---source include/search_pattern_in_file.inc - - ---echo ==== Read modern binlog (version 5.1.23) ==== - -# Read binlog. ---exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/ver_5_1_23.001 | $MYSQL --local-infile=1 -# Show result. -SELECT * FROM t1 ORDER BY a; -SELECT * FROM t2 ORDER BY a; -SELECT COUNT(*) FROM t3; -# Reset. -DROP TABLE t1, t2, t3; - - ---echo ==== Read binlog from version 5.1.17 ==== - -# Read binlog. ---exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/ver_5_1_17.001 | $MYSQL --local-infile=1 -# Show result. -SELECT * FROM t1 ORDER BY a; -SELECT * FROM t2 ORDER BY a; -SELECT COUNT(*) FROM t3; -# Reset. -DROP TABLE t1, t2, t3; - - ---echo ==== Read binlog from version 4.1 ==== - -# In this version, neither row-based binlogging nor Xid events -# existed, so the binlog was generated without the "row-based tests" -# part and the "get xid event" part, and it does not create table t2. - -# Read binlog. ---exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_4_1.000001 | $MYSQL --local-infile=1 -# Show result. -SELECT * FROM t1 ORDER BY a; -SELECT COUNT(*) FROM t3; -# Reset. -DROP TABLE t1, t3; - - ---echo ==== Read binlog from telco tree (mysql-5.1-telco-6.1) ==== - -# Read binlog. ---exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/ver_5_1-telco.001 | $MYSQL --local-infile=1 -# Show resulting tablea. -SELECT * FROM t1 ORDER BY a; -SELECT * FROM t2 ORDER BY a; -SELECT COUNT(*) FROM t3; -# Reset. -DROP TABLE t1, t2, t3; - - -#### The following commands were used to generate the binlogs #### -# -#source include/master-slave.inc; -# -## ==== initialize ==== -#USE test; -#CREATE TABLE t1 (a int, b char(50)) ENGINE = MyISAM; -#CREATE TABLE t2 (a int, b char(50)) ENGINE = InnoDB; -#CREATE TABLE t3 (a char(20)); -# -# -## ==== row based tests ==== -#SET BINLOG_FORMAT='row'; -# -## ---- get write, update, and delete rows events ---- -#INSERT INTO t1 VALUES (0, 'one'), (1, 'two'); -#UPDATE t1 SET a=a+1; -#DELETE FROM t1 WHERE a=2; -# -# -## ==== statement based tests ==== -#SET BINLOG_FORMAT = 'statement'; -# -## ---- get xid events ---- -#BEGIN; -#INSERT INTO t2 VALUES (3, 'first stm in trx'); -#INSERT INTO t1 VALUES (3, 'last stm in trx: next event should be xid'); -#COMMIT; -# -## ---- get user var events ---- -#SET @x = 4; -#INSERT INTO t1 VALUES (@x, 'four'); -# -## ---- get rand event ---- -#INSERT INTO t1 VALUES (RAND() * 1000000, 'random'); -# -## ---- get intvar event ---- -#INSERT INTO t1 VALUES (LAST_INSERT_ID(), 'last_insert_id'); -# -## ---- get begin, append and execute load events ---- -## double the file until we have more than 2^17 bytes, so that the -## event has to be split and we can use Append_file_log_event. -# -#SET SQL_LOG_BIN=0; -#CREATE TABLE temp (a char(20)); -#LOAD DATA INFILE '../std_data_ln/words.dat' INTO TABLE temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#INSERT INTO temp SELECT * FROM temp; -#SELECT a FROM temp INTO OUTFILE 'big_file.dat'; -#DROP TABLE temp; -#SET SQL_LOG_BIN=1; -# -#LOAD DATA INFILE 'big_file.dat' INTO TABLE t3; -# -#SELECT * FROM t1 ORDER BY a; -#SELECT * FROM t2 ORDER BY a; -#SELECT COUNT(*) FROM t3; -#--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_compressed_log_event_overflow.result b/mysql-test/suite/rpl/r/rpl_compressed_log_event_overflow.result index 6107508c9fc..4e8999346ff 100644 --- a/mysql-test/suite/rpl/r/rpl_compressed_log_event_overflow.result +++ b/mysql-test/suite/rpl/r/rpl_compressed_log_event_overflow.result @@ -28,12 +28,12 @@ set @@session.debug_dbug= @saved_dbug; connection slave; # Waiting for the IO thread to reject the compressed Query event include/wait_for_slave_io_error.inc [errno=1256, 1595] -# Ensure the replica rejected the event on its recorded length +# Ensure the slave rejected the event on its recorded length include/assert_grep.inc [The IO thread reported an oversized uncompressed length] -# Move the replica past the corrupt event +# Move the slave past the corrupt event include/stop_slave_sql.inc include/start_slave.inc -# Ensure replication resumes +# Ensure slavetion resumes connection master; insert into t1 values (1); include/save_master_gtid.inc @@ -54,12 +54,12 @@ set @@session.debug_dbug= @saved_dbug; connection slave; # Waiting for the IO thread to reject the compressed Write_rows event include/wait_for_slave_io_error.inc [errno=1256, 1595] -# Ensure the replica rejected the event on its recorded length +# Ensure the slave rejected the event on its recorded length include/assert_grep.inc [The IO thread reported an oversized uncompressed length] -# Move the replica past the corrupt event +# Move the slave past the corrupt event include/stop_slave_sql.inc include/start_slave.inc -# Ensure replication resumes +# Ensure slavetion resumes connection master; insert into t1 values (2); include/save_master_gtid.inc diff --git a/mysql-test/suite/rpl/r/rpl_cross_version.result b/mysql-test/suite/rpl/r/rpl_cross_version.result deleted file mode 100644 index 1b67542c106..00000000000 --- a/mysql-test/suite/rpl/r/rpl_cross_version.result +++ /dev/null @@ -1,22 +0,0 @@ -include/master-slave.inc -[connection master] -==== Initialize ==== -connection slave; -include/stop_slave.inc -RESET SLAVE; -include/setup_fake_relay_log.inc -Setting up fake replication from MYSQL_TEST_DIR/suite/binlog/std_data/binlog_old_version_4_1.000001 -==== Test ==== -start slave sql_thread; -include/wait_for_slave_param.inc [Exec_Master_Log_Pos] -==== a prove that the fake has been processed successfully ==== -SELECT COUNT(*) - 17920 as zero FROM t3; -zero -0 -==== Clean up ==== -include/stop_slave_sql.inc -include/cleanup_fake_relay_log.inc -Warnings: -Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos' -drop table t1, t3; -include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_rotate_ev_overflow.result b/mysql-test/suite/rpl/r/rpl_rotate_ev_overflow.result deleted file mode 100644 index 7c218054950..00000000000 --- a/mysql-test/suite/rpl/r/rpl_rotate_ev_overflow.result +++ /dev/null @@ -1,19 +0,0 @@ -SET @saved_dbug= @@GLOBAL.debug_dbug; -SET @@GLOBAL.debug_dbug= '+d,truncate_fde_post_header_len'; -include/master-slave.inc -[connection master] -FLUSH BINARY LOGS; -CALL mtr.add_suppression('Found invalid event in binary log'); -ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error -connection slave; -START SLAVE IO_THREAD; -CALL mtr.add_suppression('Slave I/O: Relay log write failure'); -include/wait_for_slave_io_error.inc [errno=1595] -connection master; -SET @@GLOBAL.debug_dbug= @saved_dbug; -RESET MASTER; -connection slave; -CHANGE MASTER TO master_use_gtid=SLAVE_POS; -SET @@GLOBAL.gtid_slave_pos=''; -include/start_slave.inc -include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_row_4_bytes.result b/mysql-test/suite/rpl/r/rpl_row_4_bytes.result deleted file mode 100644 index 0d746a7bd9c..00000000000 --- a/mysql-test/suite/rpl/r/rpl_row_4_bytes.result +++ /dev/null @@ -1,28 +0,0 @@ -include/master-slave.inc -[connection master] -connection master; -drop database if exists mysqltest1; -create database mysqltest1; -use mysqltest1; -CREATE TABLE t1 (a char(3)); -CREATE TABLE t2 (a char(3)); -insert into t1 values("ANN"); -insert into t1 values("GUI"); -insert into t2 values("LIL"); -insert into t2 values("ABE"); -insert into t2 values("ANG"); -connection slave; -use mysqltest1; -select * from t1 order by a; -a -ANN -GUI -select * from t2 order by a; -a -ABE -ANG -LIL -connection master; -DROP DATABASE mysqltest1; -connection slave; -include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_compressed_log_event_overflow.test b/mysql-test/suite/rpl/t/rpl_compressed_log_event_overflow.test index 29d51a823a7..36235d84f33 100644 --- a/mysql-test/suite/rpl/t/rpl_compressed_log_event_overflow.test +++ b/mysql-test/suite/rpl/t/rpl_compressed_log_event_overflow.test @@ -1,15 +1,15 @@ # -# This test verifies that a replica rejects a compressed event whose +# This test verifies that a slave rejects a compressed event whose # recorded uncompressed length is larger than the biggest packet the # server accepts. A compressed Query event and a compressed Write_rows # event are both covered, because the IO thread uncompresses each with # its own function. MDEV-39762 reported that the compressed Query event -# crashed the replica. +# crashed the slave. # # A debug injection makes the master write each of those events with # a corrupted length field. The event stays in the master's binary log # and is resent as it is, so each case moves gtid_slave_pos past it -# before checking that replication resumes. The sibling .opt file turns +# before checking that slavetion resumes. The sibling .opt file turns # on log_bin_compress, without which the master writes no compressed # events at all. # @@ -37,7 +37,7 @@ call mtr.add_suppression("Relay log write failure: could not queue event from ma --echo # Initialize test data --echo # --connection master -# t1 tracks what replicates. t2 takes the corrupt events, and the replica +# t1 tracks what slavetes. t2 takes the corrupt events, and the slave # never receives its rows. create table t1 (a int); create table t2 (a longtext); @@ -75,21 +75,21 @@ set @@session.debug_dbug= @saved_dbug; --let $slave_io_errno= 1256, 1595 --source include/wait_for_slave_io_error.inc ---echo # Ensure the replica rejected the event on its recorded length +--echo # Ensure the slave rejected the event on its recorded length --let $assert_text= The IO thread reported an oversized uncompressed length --let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err --let $assert_select= Uncompressed data size too large --let $assert_match= Uncompressed data size too large; the maximum size is 1073741824 --source include/assert_grep.inc ---echo # Move the replica past the corrupt event +--echo # Move the slave past the corrupt event --source include/stop_slave_sql.inc --disable_query_log --eval SET GLOBAL gtid_slave_pos= '$corrupt_gtid_pos' --enable_query_log --source include/start_slave.inc ---echo # Ensure replication resumes +--echo # Ensure slavetion resumes --connection master insert into t1 values (1); --source include/save_master_gtid.inc @@ -122,21 +122,21 @@ set @@session.debug_dbug= @saved_dbug; --let $slave_io_errno= 1256, 1595 --source include/wait_for_slave_io_error.inc ---echo # Ensure the replica rejected the event on its recorded length +--echo # Ensure the slave rejected the event on its recorded length --let $assert_text= The IO thread reported an oversized uncompressed length --let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err --let $assert_select= Uncompressed data size too large --let $assert_match= Uncompressed data size too large; the maximum size is 1073741824 --source include/assert_grep.inc ---echo # Move the replica past the corrupt event +--echo # Move the slave past the corrupt event --source include/stop_slave_sql.inc --disable_query_log --eval SET GLOBAL gtid_slave_pos= '$corrupt_gtid_pos' --enable_query_log --source include/start_slave.inc ---echo # Ensure replication resumes +--echo # Ensure slavetion resumes --connection master insert into t1 values (2); --source include/save_master_gtid.inc diff --git a/mysql-test/suite/rpl/t/rpl_cross_version-master.opt b/mysql-test/suite/rpl/t/rpl_cross_version-master.opt deleted file mode 100644 index 815a8f81d32..00000000000 --- a/mysql-test/suite/rpl/t/rpl_cross_version-master.opt +++ /dev/null @@ -1 +0,0 @@ ---replicate-same-server-id --relay-log=slave-relay-bin diff --git a/mysql-test/suite/rpl/t/rpl_cross_version.test b/mysql-test/suite/rpl/t/rpl_cross_version.test deleted file mode 100644 index 94c9f0432ce..00000000000 --- a/mysql-test/suite/rpl/t/rpl_cross_version.test +++ /dev/null @@ -1,48 +0,0 @@ -# ==== Purpose ==== -# -# Verify cross-version replication from an old master to the up-to-date slave -# -# ==== Implementation ==== -# -# Feed to the slave server a binlog recorded on an old version master -# via setting up slave-to-slave replication. The latter is done by means of -# the opt file and include/setup_fake_relay_log.inc. -# The master's binlog is treated as a relay log that the SQL thread executes. -# - ---source include/master-slave.inc - -# -# Bug#31240 load data infile replication between (4.0 or 4.1) and 5.1 fails -# - ---echo ==== Initialize ==== ---connection slave - ---disable_query_log -# The binlog contains the function RAND which is unsafe. -CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); ---enable_query_log - ---source include/stop_slave.inc -RESET SLAVE; - -# the relay log contains create t1, t3 tables and load data infile ---let $fake_relay_log = $MYSQL_TEST_DIR/suite/binlog/std_data/binlog_old_version_4_1.000001 ---source include/setup_fake_relay_log.inc - ---echo ==== Test ==== -start slave sql_thread; ---let $slave_param = Exec_Master_Log_Pos -# end_log_pos of the last event of the relay log ---let $slave_param_value = 149436 ---source include/wait_for_slave_param.inc ---echo ==== a prove that the fake has been processed successfully ==== -SELECT COUNT(*) - 17920 as zero FROM t3; - ---echo ==== Clean up ==== ---source include/stop_slave_sql.inc ---source include/cleanup_fake_relay_log.inc -drop table t1, t3; ---let $rpl_only_running_threads= 1 ---source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_rotate_ev_overflow.test b/mysql-test/suite/rpl/t/rpl_rotate_ev_overflow.test deleted file mode 100644 index 579d7b4c420..00000000000 --- a/mysql-test/suite/rpl/t/rpl_rotate_ev_overflow.test +++ /dev/null @@ -1,51 +0,0 @@ -# MDEV-40647 OOB read in IO Thread if the FDEv does not support Rotate Events - ---source include/have_debug.inc ---source include/have_binlog_format_mixed.inc # should be format-agnostic - -SET @saved_dbug= @@GLOBAL.debug_dbug; -SET @@GLOBAL.debug_dbug= '+d,truncate_fde_post_header_len'; ---let $rpl_skip_start_slave= 1 -# This setup will also RESET MASTER ... ---source include/master-slave.inc -# ... which means the binlog file is consistent. ---let $binlog_file= master-bin.000001 - -# Use a specific binlog position to avoid the -# test failing early from other metadata events ---let $binlog_start= query_get_value(SHOW BINLOG STATUS, Position, 1) -# Generate the Rotate Event -FLUSH BINARY LOGS; - - -# Control: SHOW BINLOG EVENTS fails as expected. -CALL mtr.add_suppression('Found invalid event in binary log'); ---disable_query_log - --error ER_ERROR_WHEN_EXECUTING_COMMAND - --eval SHOW BINLOG EVENTS IN '$binlog_file' FROM $binlog_start ---enable_query_log - ---connection slave ---disable_query_log - eval CHANGE MASTER TO master_use_gtid=NO, - master_log_file='$binlog_file', master_log_pos=$binlog_start; ---enable_query_log -START SLAVE IO_THREAD; -CALL mtr.add_suppression('Slave I/O: Relay log write failure'); -# ER_SLAVE_RELAY_LOG_WRITE_FAILURE ---let $slave_io_errno= 1595 -# Experiment: The IO thread should fail. ---source include/wait_for_slave_io_error.inc - -# Clean-up ---connection master -SET @@GLOBAL.debug_dbug= @saved_dbug; -RESET MASTER; - ---connection slave -CHANGE MASTER TO master_use_gtid=SLAVE_POS; # restore the default ---disable_warnings - SET @@GLOBAL.gtid_slave_pos=''; # for good measure ---enable_warnings ---source include/start_slave.inc ---source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_row_4_bytes-master.opt b/mysql-test/suite/rpl/t/rpl_row_4_bytes-master.opt deleted file mode 100644 index 3073fa4f5d7..00000000000 --- a/mysql-test/suite/rpl/t/rpl_row_4_bytes-master.opt +++ /dev/null @@ -1,2 +0,0 @@ ---loose-debug=d,"old_row_based_repl_4_byte_map_id_master" ---log-bin-use-v1-row-events=1 diff --git a/mysql-test/suite/rpl/t/rpl_row_4_bytes.test b/mysql-test/suite/rpl/t/rpl_row_4_bytes.test deleted file mode 100644 index 6130f74983e..00000000000 --- a/mysql-test/suite/rpl/t/rpl_row_4_bytes.test +++ /dev/null @@ -1,34 +0,0 @@ -# This test is to make sure that slaves can read a binlog containining -# table map ids stored in 4 bytes, even though we now store them in 6 -# bytes. This is for backward-compatibility. -# If the slave does not detect that the master stores the table map id -# in 4 bytes, slave will read 6 bytes, and so will read the 2 bytes of -# flags at the place where there actually is data, so the test should -# fail. - --- source include/have_binlog_format_row.inc --- source include/have_debug.inc --- source include/master-slave.inc - -connection master; ---disable_warnings -drop database if exists mysqltest1; -create database mysqltest1; ---enable_warnings -use mysqltest1; -CREATE TABLE t1 (a char(3)); -CREATE TABLE t2 (a char(3)); -insert into t1 values("ANN"); -insert into t1 values("GUI"); -insert into t2 values("LIL"); -insert into t2 values("ABE"); -insert into t2 values("ANG"); -sync_slave_with_master; -use mysqltest1; -select * from t1 order by a; -select * from t2 order by a; - -connection master; -DROP DATABASE mysqltest1; -sync_slave_with_master; ---source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 84dfc8f1681..e602af67e16 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -340,8 +340,8 @@ int binlog_buf_compress(const uchar *src, uchar *dst, uint32 len, uint32 *comlen } /* - Write the length of an event no replica can uncompress, so that a - replica's handling of one can be tested. Reaching a value this large + Write the length of an event no slave can uncompress, so that a + slave's handling of one can be tested. Reaching a value this large takes four length bytes, and the encoding above spends four only on content of 16MB or more, so the injection sets the encoding as well as the value. The compressed content still goes where those four @@ -400,8 +400,7 @@ query_event_uncompress(const Format_description_log_event *description_event, DBUG_ASSERT((uchar)src[EVENT_TYPE_OFFSET] == QUERY_COMPRESSED_EVENT); uint8 common_header_len= description_event->common_header_len; - uint8 post_header_len= - description_event->post_header_len[QUERY_COMPRESSED_EVENT-1]; + uint8 post_header_len= QUERY_HEADER_LEN; *is_malloc= false; @@ -485,12 +484,18 @@ row_log_event_uncompress(const Format_description_log_event *description_event, return ER_BINLOG_UNCOMPRESS_ERROR; DBUG_ASSERT(LOG_EVENT_IS_ROW_COMPRESSED(type)); + DBUG_ASSERT(type == WRITE_ROWS_COMPRESSED_EVENT_V1 || + type == UPDATE_ROWS_COMPRESSED_EVENT_V1 || + type == DELETE_ROWS_COMPRESSED_EVENT_V1 || + type == WRITE_ROWS_COMPRESSED_EVENT || + type == UPDATE_ROWS_COMPRESSED_EVENT || + type == DELETE_ROWS_COMPRESSED_EVENT); + DBUG_ASSERT(WRITE_ROWS_COMPRESSED_EVENT_V1 < WRITE_ROWS_COMPRESSED_EVENT); uint8 common_header_len= description_event->common_header_len; - uint8 post_header_len= description_event->post_header_len[type-1]; tmp+= common_header_len + ROWS_HEADER_LEN_V1; - if (post_header_len == ROWS_HEADER_LEN_V2) + if (type > DELETE_ROWS_COMPRESSED_EVENT_V1) { /* Have variable length header, check length, @@ -1125,20 +1130,6 @@ Log_event* Log_event::read_log_event(const uchar *buf, uint event_len, DBUG_RETURN(NULL); } - if (event_type > fdle->number_of_event_types && - event_type != FORMAT_DESCRIPTION_EVENT) - { - /* - It is unsafe to use the fdle if its post_header_len - array does not include the event type. - */ - DBUG_PRINT("error", ("event type %d found, but the current " - "Format_description_log_event supports only %d event " - "types", event_type, - fdle->number_of_event_types)); - ev= NULL; - } - else { /* In some previuos versions (see comment in @@ -1340,7 +1331,6 @@ exit: my_malloc() fail we can't return an error out of the constructor (because constructor is "void") ; so instead we leave the pointer we wanted to allocate (e.g. 'query') to 0 and we test it in is_valid(). - Same for Format_description_log_event, member 'post_header_len'. SLAVE_EVENT is never used, so it should not be read ever. */ @@ -1516,7 +1506,11 @@ Query_log_event::Query_log_event(const uchar *buf, uint event_len, memset(&user, 0, sizeof(user)); memset(&host, 0, sizeof(host)); common_header_len= description_event->common_header_len; - post_header_len= description_event->post_header_len[event_type-1]; + DBUG_ASSERT(event_type == QUERY_EVENT || + event_type == QUERY_COMPRESSED_EVENT || + event_type == EXECUTE_LOAD_QUERY_EVENT); + post_header_len= event_type == EXECUTE_LOAD_QUERY_EVENT ? + EXECUTE_LOAD_QUERY_HEADER_LEN : QUERY_HEADER_LEN; DBUG_PRINT("info",("event_len: %u common_header_len: %d post_header_len: %d", event_len, common_header_len, post_header_len)); @@ -2096,6 +2090,76 @@ Start_log_event_v3::Start_log_event_v3(const uchar *buf, uint event_len, Format_description_log_event methods ****************************************************************************/ +uint8 Format_description_log_event::byte_data_for_post_header_len[256]= { + START_V3_HEADER_LEN, // START_EVENT_V3 + QUERY_HEADER_LEN, + STOP_HEADER_LEN, + ROTATE_HEADER_LEN, + INTVAR_HEADER_LEN, + LOAD_HEADER_LEN, + SLAVE_HEADER_LEN, + CREATE_FILE_HEADER_LEN, + APPEND_BLOCK_HEADER_LEN, + EXEC_LOAD_HEADER_LEN, + DELETE_FILE_HEADER_LEN, + NEW_LOAD_HEADER_LEN, + RAND_HEADER_LEN, + USER_VAR_HEADER_LEN, + FORMAT_DESCRIPTION_HEADER_LEN, + XID_HEADER_LEN, + BEGIN_LOAD_QUERY_HEADER_LEN, + EXECUTE_LOAD_QUERY_HEADER_LEN, + TABLE_MAP_HEADER_LEN, + 0, 0, 0, // PRE_GA_{WRITE,UPDATE,DELETE}_ROWS_EVENT + ROWS_HEADER_LEN_V1, // WRITE_ROWS_EVENT_V1 + ROWS_HEADER_LEN_V1, // UPDATE_ROWS_EVENT_V1 + ROWS_HEADER_LEN_V1, // DELETE_ROWS_EVENT_V1 + INCIDENT_HEADER_LEN, + 0, // HEARTBEAT_LOG_EVENT + 0, // IGNORABLE_LOG_EVENT + 0, // ROWS_QUERY_LOG_EVENT + ROWS_HEADER_LEN_V2, // WRITE_ROWS_EVENT + ROWS_HEADER_LEN_V2, // UPDATE_ROWS_EVENT + WRITE_ROWS_EVENT, // DELETE_ROWS_EVENT + 0, // GTID_LOG_EVENT + 0, // ANONYMOUS_GTID_LOG_EVENT + 0, // PREVIOUS_GTIDS_LOG_EVENT + 0, // TRANSACTION_CONTEXT_EVENT + 0, // VIEW_CHANGE_EVENT + 0, // XA_PREPARE_LOG_EVENT + ROWS_HEADER_LEN_V2, // PARTIAL_UPDATE_ROWS_EVENT + ROWS_HEADER_LEN_V2, // TRANSACTION_PAYLOAD_EVENT + ROWS_HEADER_LEN_V2, // HEARTBEAT_LOG_EVENT_V2 + /* + HEARTBEAT_LOG_EVENT_V2=41, fill up with zeros until MARIA_EVENTS_BEGIN=160. + */ + 0, 0, 0, 0, 0, 0, 0, 0, // 42-49 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50-59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 150-159 + /* Continue with MariaDB-specific events from ANNOTATE_ROWS_EVENT=160. */ + ANNOTATE_ROWS_HEADER_LEN, + BINLOG_CHECKPOINT_HEADER_LEN, + GTID_HEADER_LEN, + GTID_LIST_HEADER_LEN, + START_ENCRYPTION_HEADER_LEN, + QUERY_HEADER_LEN, // QUERY_COMPRESSED_EVENT + ROWS_HEADER_LEN_V1, // WRITE_ROWS_COMPRESSED_EVENT_V1 + ROWS_HEADER_LEN_V1, // UPDATE_ROWS_COMPRESSED_EVENT_V1 + ROWS_HEADER_LEN_V1, // DELETE_ROWS_COMPRESSED_EVENT_V1 + ROWS_HEADER_LEN_V2, // WRITE_ROWS_COMPRESSED_EVENT + ROWS_HEADER_LEN_V2, // UPDATE_ROWS_COMPRESSED_EVENT + ROWS_HEADER_LEN_V2, // DELETE_ROWS_COMPRESSED_EVENT +}; + /** Format_description_log_event 1st ctor. @@ -2123,118 +2187,8 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver) memcpy(server_version, ::server_version, ST_SERVER_VER_LEN); DBUG_EXECUTE_IF("pretend_version_50034_in_binlog", strmov(server_version, "5.0.34");); - common_header_len= LOG_EVENT_HEADER_LEN; number_of_event_types= LOG_EVENT_TYPES; - /* we'll catch my_malloc() error in is_valid() */ - post_header_len=(uint8*) my_malloc(PSI_INSTRUMENT_ME, - number_of_event_types*sizeof(uint8) - + BINLOG_CHECKSUM_ALG_DESC_LEN, - MYF(0)); - /* - This long list of assignments is not beautiful, but I see no way to - make it nicer, as the right members are #defines, not array members, so - it's impossible to write a loop. - */ - if (post_header_len) - { -#ifndef DBUG_OFF - // Allows us to sanity-check that all events initialized their - // events (see the end of this 'if' block). - memset(post_header_len, 255, number_of_event_types*sizeof(uint8)); -#endif - /* Note: all event types must explicitly fill in their lengths here. */ - post_header_len[START_EVENT_V3-1]= START_V3_HEADER_LEN; - post_header_len[QUERY_EVENT-1]= QUERY_HEADER_LEN; - post_header_len[STOP_EVENT-1]= STOP_HEADER_LEN; - post_header_len[ROTATE_EVENT-1]= ROTATE_HEADER_LEN; - post_header_len[INTVAR_EVENT-1]= INTVAR_HEADER_LEN; - post_header_len[LOAD_EVENT-1]= LOAD_HEADER_LEN; - post_header_len[SLAVE_EVENT-1]= SLAVE_HEADER_LEN; - post_header_len[CREATE_FILE_EVENT-1]= CREATE_FILE_HEADER_LEN; - post_header_len[APPEND_BLOCK_EVENT-1]= APPEND_BLOCK_HEADER_LEN; - post_header_len[EXEC_LOAD_EVENT-1]= EXEC_LOAD_HEADER_LEN; - post_header_len[DELETE_FILE_EVENT-1]= DELETE_FILE_HEADER_LEN; - post_header_len[NEW_LOAD_EVENT-1]= NEW_LOAD_HEADER_LEN; - post_header_len[RAND_EVENT-1]= RAND_HEADER_LEN; - post_header_len[USER_VAR_EVENT-1]= USER_VAR_HEADER_LEN; - post_header_len[FORMAT_DESCRIPTION_EVENT-1]= FORMAT_DESCRIPTION_HEADER_LEN; - post_header_len[XID_EVENT-1]= XID_HEADER_LEN; - post_header_len[XA_PREPARE_LOG_EVENT-1]= XA_PREPARE_HEADER_LEN; - post_header_len[BEGIN_LOAD_QUERY_EVENT-1]= BEGIN_LOAD_QUERY_HEADER_LEN; - post_header_len[EXECUTE_LOAD_QUERY_EVENT-1]= EXECUTE_LOAD_QUERY_HEADER_LEN; - /* - The PRE_GA events are never be written to any binlog, but - their lengths are included in Format_description_log_event. - Hence, we need to be assign some value here, to avoid reading - uninitialized memory when the array is written to disk. - */ - post_header_len[PRE_GA_WRITE_ROWS_EVENT-1]= 0; - post_header_len[PRE_GA_UPDATE_ROWS_EVENT-1]= 0; - post_header_len[PRE_GA_DELETE_ROWS_EVENT-1]= 0; - - post_header_len[TABLE_MAP_EVENT-1]= TABLE_MAP_HEADER_LEN; - post_header_len[WRITE_ROWS_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - post_header_len[UPDATE_ROWS_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - post_header_len[DELETE_ROWS_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - /* - We here have the possibility to simulate a master of before we changed - the table map id to be stored in 6 bytes: when it was stored in 4 - bytes (=> post_header_len was 6). This is used to test backward - compatibility. - This code can be removed after a few months (today is Dec 21st 2005), - when we know that the 4-byte masters are not deployed anymore (check - with Tomas Ulin first!), and the accompanying test (rpl_row_4_bytes) - too. - */ - DBUG_EXECUTE_IF("old_row_based_repl_4_byte_map_id_master", - post_header_len[TABLE_MAP_EVENT-1]= - post_header_len[WRITE_ROWS_EVENT_V1-1]= - post_header_len[UPDATE_ROWS_EVENT_V1-1]= - post_header_len[DELETE_ROWS_EVENT_V1-1]= 6;); - post_header_len[INCIDENT_EVENT-1]= INCIDENT_HEADER_LEN; - post_header_len[HEARTBEAT_LOG_EVENT-1]= 0; - post_header_len[IGNORABLE_LOG_EVENT-1]= 0; - post_header_len[ROWS_QUERY_LOG_EVENT-1]= 0; - post_header_len[GTID_LOG_EVENT-1]= 0; - post_header_len[ANONYMOUS_GTID_LOG_EVENT-1]= 0; - post_header_len[PREVIOUS_GTIDS_LOG_EVENT-1]= 0; - post_header_len[TRANSACTION_CONTEXT_EVENT-1]= 0; - post_header_len[VIEW_CHANGE_EVENT-1]= 0; - post_header_len[XA_PREPARE_LOG_EVENT-1]= 0; - post_header_len[PARTIAL_UPDATE_ROWS_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[TRANSACTION_PAYLOAD_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[HEARTBEAT_LOG_EVENT_V2-1]= ROWS_HEADER_LEN_V2; - post_header_len[WRITE_ROWS_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[UPDATE_ROWS_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[DELETE_ROWS_EVENT-1]= ROWS_HEADER_LEN_V2; - - // Set header length of the reserved events to 0 - memset(post_header_len + MYSQL_EVENTS_END - 1, 0, - (MARIA_EVENTS_BEGIN - MYSQL_EVENTS_END)*sizeof(uint8)); - - // Set header lengths of Maria events - post_header_len[ANNOTATE_ROWS_EVENT-1]= ANNOTATE_ROWS_HEADER_LEN; - post_header_len[BINLOG_CHECKPOINT_EVENT-1]= - BINLOG_CHECKPOINT_HEADER_LEN; - post_header_len[GTID_EVENT-1]= GTID_HEADER_LEN; - post_header_len[GTID_LIST_EVENT-1]= GTID_LIST_HEADER_LEN; - post_header_len[START_ENCRYPTION_EVENT-1]= START_ENCRYPTION_HEADER_LEN; - - //compressed event - post_header_len[QUERY_COMPRESSED_EVENT-1]= QUERY_HEADER_LEN; - post_header_len[WRITE_ROWS_COMPRESSED_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[UPDATE_ROWS_COMPRESSED_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[DELETE_ROWS_COMPRESSED_EVENT-1]= ROWS_HEADER_LEN_V2; - post_header_len[WRITE_ROWS_COMPRESSED_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - post_header_len[UPDATE_ROWS_COMPRESSED_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - post_header_len[DELETE_ROWS_COMPRESSED_EVENT_V1-1]= ROWS_HEADER_LEN_V1; - - // Sanity-check that all post header lengths are initialized. - int i; - for (i=0; ipost_header_len[ROTATE_EVENT-1]; + uint8 post_header_len= ROTATE_HEADER_LEN; uint ident_offset; if (event_len < (uint)(LOG_EVENT_MINIMAL_HEADER_LEN + post_header_len)) DBUG_VOID_RETURN; @@ -2678,10 +2605,8 @@ Binlog_checkpoint_log_event::Binlog_checkpoint_log_event( :Log_event(buf, description_event), binlog_file_name(0) { uint8 header_size= description_event->common_header_len; - uint8 post_header_len= - description_event->post_header_len[BINLOG_CHECKPOINT_EVENT-1]; - if (event_len < (uint) header_size + (uint) post_header_len || - post_header_len < BINLOG_CHECKPOINT_HEADER_LEN) + uint8 post_header_len= BINLOG_CHECKPOINT_HEADER_LEN; + if (event_len < (uint) header_size + (uint) post_header_len) return; buf+= header_size; /* See uint4korr and int4store below */ @@ -2706,10 +2631,9 @@ Gtid_log_event::Gtid_log_event(const uchar *buf, uint event_len, flags_extra(0), extra_engines(0) { uint8 header_size= description_event->common_header_len; - uint8 post_header_len= description_event->post_header_len[GTID_EVENT-1]; + uint8 post_header_len= GTID_HEADER_LEN; const uchar *buf_0= buf; - if (event_len < (uint) header_size + (uint) post_header_len || - post_header_len < GTID_HEADER_LEN) + if (event_len < (uint) header_size + (uint) post_header_len) return; buf+= header_size; @@ -2824,9 +2748,8 @@ Gtid_list_log_event::Gtid_list_log_event(const uchar *buf, uint event_len, uint32 i; uint32 val; uint8 header_size= description_event->common_header_len; - uint8 post_header_len= description_event->post_header_len[GTID_LIST_EVENT-1]; - if (event_len < (uint) header_size + (uint) post_header_len || - post_header_len < GTID_LIST_HEADER_LEN) + uint8 post_header_len= GTID_LIST_HEADER_LEN; + if (event_len < (uint) header_size + (uint) post_header_len) return; buf+= header_size; @@ -2944,8 +2867,7 @@ Intvar_log_event::Intvar_log_event(const uchar *buf, :Log_event(buf, description_event) { /* The Post-Header is empty. The Variable Data part begins immediately. */ - buf+= description_event->common_header_len + - description_event->post_header_len[INTVAR_EVENT-1]; + buf+= description_event->common_header_len + INTVAR_HEADER_LEN; type= buf[I_TYPE_OFFSET]; val= uint8korr(buf+I_VAL_OFFSET); } @@ -2974,8 +2896,7 @@ Rand_log_event::Rand_log_event(const uchar *buf, :Log_event(buf, description_event) { /* The Post-Header is empty. The Variable Data part begins immediately. */ - buf+= description_event->common_header_len + - description_event->post_header_len[RAND_EVENT-1]; + buf+= description_event->common_header_len + RAND_HEADER_LEN; seed1= uint8korr(buf+RAND_SEED1_OFFSET); seed2= uint8korr(buf+RAND_SEED2_OFFSET); } @@ -3000,8 +2921,7 @@ Xid_log_event(const uchar *buf, :Xid_apply_log_event(buf, description_event) { /* The Post-Header is empty. The Variable Data part begins immediately. */ - buf+= description_event->common_header_len + - description_event->post_header_len[XID_EVENT-1]; + buf+= description_event->common_header_len + XID_HEADER_LEN; memcpy((char*) &xid, buf, sizeof(xid)); } @@ -3013,8 +2933,7 @@ XA_prepare_log_event(const uchar *buf, const Format_description_log_event *description_event) :Xid_apply_log_event(buf, description_event) { - buf+= description_event->common_header_len + - description_event->post_header_len[XA_PREPARE_LOG_EVENT-1]; + buf+= description_event->common_header_len + XA_PREPARE_HEADER_LEN; one_phase= * (bool *) buf; buf+= 1; @@ -3095,8 +3014,7 @@ User_var_log_event(const uchar *buf, uint event_len, const char *buf_end= reinterpret_cast(buf) + event_len; /* The Post-Header is empty. The Variable Data part begins immediately. */ - buf+= description_event->common_header_len + - description_event->post_header_len[USER_VAR_EVENT-1]; + buf+= description_event->common_header_len + USER_VAR_HEADER_LEN; name_len= uint4korr(buf); /* Avoid reading out of buffer */ if ((buf - buf_start) + UV_NAME_LEN_SIZE + name_len > event_len) @@ -3183,8 +3101,8 @@ Create_file_log_event(const uchar *buf, uint len, DBUG_ENTER("Create_file_log_event::Create_file_log_event(char*,...)"); uint block_offset; uint header_len= description_event->common_header_len; - uint8 load_header_len= description_event->post_header_len[LOAD_EVENT-1]; - uint8 create_file_header_len= description_event->post_header_len[CREATE_FILE_EVENT-1]; + uint8 load_header_len= LOAD_HEADER_LEN; + uint8 create_file_header_len= CREATE_FILE_HEADER_LEN; if (!(event_buf= (uchar*) my_memdup(PSI_INSTRUMENT_ME, buf, len, MYF(MY_WME))) || copy_log_event(event_buf,len, @@ -3243,8 +3161,7 @@ Append_block_log_event(const uchar *buf, uint len, { DBUG_ENTER("Append_block_log_event::Append_block_log_event(char*,...)"); uint8 common_header_len= description_event->common_header_len; - uint8 append_block_header_len= - description_event->post_header_len[APPEND_BLOCK_EVENT-1]; + uint8 append_block_header_len= APPEND_BLOCK_HEADER_LEN; uint total_header_len= common_header_len+append_block_header_len; if (len < total_header_len) DBUG_VOID_RETURN; @@ -3269,7 +3186,7 @@ Delete_file_log_event(const uchar *buf, uint len, :Log_event(buf, description_event),file_id(0) { uint8 common_header_len= description_event->common_header_len; - uint8 delete_file_header_len= description_event->post_header_len[DELETE_FILE_EVENT-1]; + uint8 delete_file_header_len= DELETE_FILE_HEADER_LEN; if (len < (uint)(common_header_len + delete_file_header_len)) return; file_id= uint4korr(buf + common_header_len + DF_FILE_ID_OFFSET); @@ -3290,7 +3207,7 @@ Execute_load_log_event(const uchar *buf, uint len, :Log_event(buf, description_event), file_id(0) { uint8 common_header_len= description_event->common_header_len; - uint8 exec_load_header_len= description_event->post_header_len[EXEC_LOAD_EVENT-1]; + uint8 exec_load_header_len= EXEC_LOAD_HEADER_LEN; if (len < (uint)(common_header_len+exec_load_header_len)) return; file_id= uint4korr(buf + common_header_len + EL_FILE_ID_OFFSET); @@ -3428,7 +3345,25 @@ Rows_log_event::Rows_log_event(const uchar *buf, uint event_len, m_type= event_type; m_cols_ai.bitmap= 0; - uint8 const post_header_len= description_event->post_header_len[event_type-1]; + DBUG_ASSERT(event_type == WRITE_ROWS_EVENT_V1 || + event_type == UPDATE_ROWS_EVENT_V1 || + event_type == DELETE_ROWS_EVENT_V1 || + event_type == WRITE_ROWS_EVENT || + event_type == UPDATE_ROWS_EVENT || + event_type == DELETE_ROWS_EVENT || + event_type == WRITE_ROWS_COMPRESSED_EVENT_V1 || + event_type == UPDATE_ROWS_COMPRESSED_EVENT_V1 || + event_type == DELETE_ROWS_COMPRESSED_EVENT_V1 || + event_type == WRITE_ROWS_COMPRESSED_EVENT || + event_type == UPDATE_ROWS_COMPRESSED_EVENT || + event_type == DELETE_ROWS_COMPRESSED_EVENT); + DBUG_ASSERT(WRITE_ROWS_EVENT_V1 < WRITE_ROWS_EVENT); + DBUG_ASSERT(WRITE_ROWS_COMPRESSED_EVENT_V1 < WRITE_ROWS_COMPRESSED_EVENT); + uint8 const post_header_len= + event_type < WRITE_ROWS_EVENT || + ( event_type >= WRITE_ROWS_COMPRESSED_EVENT_V1 && + event_type <= DELETE_ROWS_COMPRESSED_EVENT_V1) ? + ROWS_HEADER_LEN_V1 : ROWS_HEADER_LEN_V2; if (event_len < (uint)(common_header_len + post_header_len)) { @@ -3443,17 +3378,8 @@ Rows_log_event::Rows_log_event(const uchar *buf, uint event_len, const uchar *post_start= buf + common_header_len; post_start+= RW_MAPID_OFFSET; - if (post_header_len == 6) - { - /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - m_table_id= uint4korr(post_start); - post_start+= 4; - } - else - { - m_table_id= (ulonglong) uint6korr(post_start); - post_start+= RW_FLAGS_OFFSET; - } + m_table_id= (ulonglong) uint6korr(post_start); + post_start+= RW_FLAGS_OFFSET; m_flags_pos= post_start - buf; m_flags= uint2korr(post_start); @@ -3778,7 +3704,7 @@ Table_map_log_event::Table_map_log_event(const uchar *buf, uint event_len, DBUG_ENTER("Table_map_log_event::Table_map_log_event(const char*,uint,...)"); uint8 common_header_len= description_event->common_header_len; - uint8 post_header_len= description_event->post_header_len[TABLE_MAP_EVENT-1]; + uint8 post_header_len= TABLE_MAP_HEADER_LEN; DBUG_PRINT("info",("event_len: %u common_header_len: %d post_header_len: %d", event_len, common_header_len, post_header_len)); @@ -3798,18 +3724,9 @@ Table_map_log_event::Table_map_log_event(const uchar *buf, uint event_len, post_start+= TM_MAPID_OFFSET; VALIDATE_BYTES_READ(post_start, buf, event_len); - if (post_header_len == 6) - { - /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - m_table_id= uint4korr(post_start); - post_start+= 4; - } - else - { - DBUG_ASSERT(post_header_len == TABLE_MAP_HEADER_LEN); - m_table_id= (ulonglong) uint6korr(post_start); - post_start+= TM_FLAGS_OFFSET; - } + DBUG_ASSERT(post_header_len == TABLE_MAP_HEADER_LEN); + m_table_id= (ulonglong) uint6korr(post_start); + post_start+= TM_FLAGS_OFFSET; DBUG_ASSERT((m_table_id & MAX_TABLE_MAP_ID) != UINT32_MAX && (m_table_id & MAX_TABLE_MAP_ID) != 0); @@ -4325,8 +4242,7 @@ Incident_log_event::Incident_log_event(const uchar *buf, uint event_len, DBUG_ENTER("Incident_log_event::Incident_log_event"); uint8 const common_header_len= descr_event->common_header_len; - uint8 const post_header_len= - descr_event->post_header_len[INCIDENT_EVENT-1]; + uint8 const post_header_len= INCIDENT_HEADER_LEN; DBUG_PRINT("info",("event_len: %u; common_header_len: %d; post_header_len: %d", event_len, common_header_len, post_header_len)); diff --git a/sql/log_event.h b/sql/log_event.h index 412e348505c..2caa986b5d7 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -2839,7 +2839,7 @@ protected: public: Version() { - m_ver[0]= m_ver[1]= m_ver[2]= '\0'; + clear(); } Version(uchar v0, uchar v1, uchar v2) { @@ -2848,6 +2848,10 @@ public: m_ver[2]= v2; } Version(const char *version, const char **endptr); + void clear() + { + m_ver[0]= m_ver[1]= m_ver[2]= '\0'; + } const uchar& operator [] (size_t i) const { DBUG_ASSERT(i < 3); @@ -2879,13 +2883,16 @@ public: LOG_EVENT_HEADER_LEN), except FORMAT_DESCRIPTION_EVENT and ROTATE_EVENT (those have a header of size LOG_EVENT_MINIMAL_HEADER_LEN). */ - uint8 common_header_len; + static constexpr uint8 common_header_len= LOG_EVENT_HEADER_LEN; uint8 number_of_event_types; - /* - The list of post-headers' lengths followed - by the checksum alg description byte + /* + The list of post-headers' lengths followed + by the checksum alg description byte. + + NOTE: This is only to be able to write this data into events for backwards + compatibility. This list is no longer used in new code. */ - uint8 *post_header_len; + static uint8 byte_data_for_post_header_len[256]; class master_version_split: public Version { public: enum {KIND_MYSQL, KIND_MARIADB}; @@ -2906,24 +2913,15 @@ public: Format_description_log_event(const uchar *buf, uint event_len, const Format_description_log_event *description_event); - ~Format_description_log_event() - { - my_free(post_header_len); - } + ~Format_description_log_event() { } Log_event_type get_type_code() override { return FORMAT_DESCRIPTION_EVENT;} #ifdef MYSQL_SERVER bool write() override; #endif - bool header_is_valid() const - { - return ((common_header_len >= ((binlog_version==1) ? OLD_HEADER_LEN : - LOG_EVENT_MINIMAL_HEADER_LEN)) && - (post_header_len != NULL)); - } bool is_valid() const override { - return header_is_valid() && server_version_split.version_is_valid(); + return server_version_split.version_is_valid(); } int get_data_size() override diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index 2f688414534..6cc05a0f16f 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1189,7 +1189,7 @@ Old_rows_log_event::Old_rows_log_event(const uchar *buf, uint event_len, { DBUG_ENTER("Old_rows_log_event::Old_Rows_log_event(const char*,...)"); uint8 const common_header_len= description_event->common_header_len; - uint8 const post_header_len= description_event->post_header_len[event_type-1]; + uint8 const post_header_len= 8; DBUG_PRINT("enter",("event_len: %u common_header_len: %d " "post_header_len: %d", diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc index bf0984a1030..2056699372c 100644 --- a/sql/log_event_server.cc +++ b/sql/log_event_server.cc @@ -2697,7 +2697,7 @@ bool Format_description_log_event::write() ret= write_header(rec_size) || write_data(buff, buff_size) || (!DBUG_IF("truncate_fde_post_header_len") && - write_data(post_header_len, number_of_event_types)) || + write_data(byte_data_for_post_header_len, number_of_event_types)) || (!DBUG_IF("truncate_fde_used_checksum_alg") && write_data(&checksum_byte, sizeof(checksum_byte))) || write_footer(); diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h index d45eb009a12..7ad4194b96e 100644 --- a/sql/rpl_mi.h +++ b/sql/rpl_mi.h @@ -145,8 +145,7 @@ typedef struct st_rows_event_tracker my_off_t last_seen; bool stmt_end_seen; void update(const char *file_name, my_off_t pos, - const uchar *buf, - const Format_description_log_event *fdle); + const uchar *buf); void reset(); bool check_and_report(const char* file_name, my_off_t pos); } Rows_event_tracker; diff --git a/sql/slave.cc b/sql/slave.cc index 3af008a77eb..82476885394 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -6838,17 +6838,6 @@ static int queue_event(Master_info* mi, const uchar *buf, ulong event_len) goto err; case ROTATE_EVENT: { - /* - This is normally done in Log_event::read_log_event(), - but we bypass it here because it's expensive and costs dynamic memory. - */ - if (unlikely(ROTATE_EVENT > - mi->rli.relay_log.description_event_for_queue->number_of_event_types)) - { - // The current FDE does not support `ROTATE_EVENT`. - error= ER_SLAVE_RELAY_LOG_WRITE_FAILURE; - goto err; - } /* RSC_1 and RSC_2 below rewrite the fake Rotate (the one that opens a connection, naming the binary log file the dump starts in; the file @@ -7482,9 +7471,7 @@ dbug_gtid_accept: is_rows_event= true; mi->rows_event_tracker.update(mi->master_log_name, mi->master_log_pos, - buf, - mi->rli.relay_log. - description_event_for_queue); + buf); DBUG_EXECUTE_IF("simulate_stmt_end_rows_event_loss", { @@ -8851,19 +8838,16 @@ bool rpl_master_erroneous_autoinc(THD *thd) } -static bool get_row_event_stmt_end(const uchar *buf, - const Format_description_log_event *fdle) +static bool get_row_event_stmt_end(const uchar *buf) { - uint8 const common_header_len= fdle->common_header_len; - Log_event_type event_type= (Log_event_type)(uchar)buf[EVENT_TYPE_OFFSET]; - - uint8 const post_header_len= fdle->post_header_len[event_type-1]; + uint8 const common_header_len= + Format_description_log_event::common_header_len; const uchar *flag_start= buf + common_header_len; /* The term 4 below signifies that master is of 'an intermediate source', see Rows_log_event::Rows_log_event. */ - flag_start += RW_MAPID_OFFSET + ((post_header_len == 6) ? 4 : RW_FLAGS_OFFSET); + flag_start += RW_MAPID_OFFSET + RW_FLAGS_OFFSET; return (uint2korr(flag_start) & Rows_log_event::STMT_END_F) != 0; } @@ -8889,8 +8873,7 @@ void Rows_event_tracker::reset() */ void Rows_event_tracker::update(const char *file_name, my_off_t pos, - const uchar *buf, - const Format_description_log_event *fdle) + const uchar *buf) { DBUG_ENTER("Rows_event_tracker::update"); if (!first_seen) @@ -8900,7 +8883,7 @@ void Rows_event_tracker::update(const char *file_name, my_off_t pos, } last_seen= pos; DBUG_ASSERT(stmt_end_seen == 0); // We can only have one - stmt_end_seen= get_row_event_stmt_end(buf, fdle); + stmt_end_seen= get_row_event_stmt_end(buf); DBUG_VOID_RETURN; };