Skip to content

Commit d2ce065

Browse files
committed
MDEV-37356 Annotate_rows written in a 'random' position
Ensure that Annotate_rows is always written direct after GTID information, before any table_map events. Before this patch, the following problems existed when mixing transactional and not transactional tables in the same statement: - Annotate rows could be written after row events or in the next GTID event. - See rpl_row_mixing_engines - Annotate_rows was not always written to binary log in case of error with a transactional table (rolled back) but a not transactional table was updated. - See sp_trans_log, binlog_row_mix_innodb_myisam Fixed by writing the Annotate_rows event into the non transactional cache if there are not transactional tables used. If not, write the event into the transactional cache.
1 parent 24821e9 commit d2ce065

13 files changed

+483
-162
lines changed

mysql-test/main/sp_trans_log.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
1919
include/show_binlog_events.inc
2020
Log_name Pos Event_type Server_id End_log_pos Info
2121
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
22+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
2223
master-bin.000001 # Table_map # # table_id: # (test.t1)
2324
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
2425
master-bin.000001 # Query # # COMMIT

mysql-test/main/sp_trans_log.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ insert into t2 values (bug23333(),1);
4040
# the following must show there are events after the query
4141
# the binlog_limit is used to hide the differences between the mixed
4242
# and row logging formats after BUG#53259
43-
let $binlog_limit= 0, 4;
43+
let $binlog_limit= 0, 5;
4444
source include/show_binlog_events.inc;
4545
select count(*),@a from t1 /* must be 1,1 */;
4646

mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
619619
include/show_binlog_events.inc
620620
Log_name Pos Event_type Server_id End_log_pos Info
621621
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
622+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
622623
master-bin.000001 # Table_map # # table_id: # (test.t1)
623624
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
624625
master-bin.000001 # Query # # COMMIT
@@ -635,6 +636,7 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
635636
include/show_binlog_events.inc
636637
Log_name Pos Event_type Server_id End_log_pos Info
637638
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
639+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
638640
master-bin.000001 # Table_map # # table_id: # (test.t1)
639641
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
640642
master-bin.000001 # Query # # COMMIT
@@ -671,6 +673,7 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
671673
include/show_binlog_events.inc
672674
Log_name Pos Event_type Server_id End_log_pos Info
673675
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
676+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
674677
master-bin.000001 # Table_map # # table_id: # (test.t1)
675678
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
676679
master-bin.000001 # Query # # COMMIT
@@ -703,6 +706,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
703706
include/show_binlog_events.inc
704707
Log_name Pos Event_type Server_id End_log_pos Info
705708
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
709+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
706710
master-bin.000001 # Table_map # # table_id: # (test.t3)
707711
master-bin.000001 # Table_map # # table_id: # (test.t1)
708712
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
@@ -725,6 +729,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
725729
include/show_binlog_events.inc
726730
Log_name Pos Event_type Server_id End_log_pos Info
727731
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
732+
master-bin.000001 # Annotate_rows # # delete t2.* from t2,t5 where t2.a=t5.a + 1
728733
master-bin.000001 # Table_map # # table_id: # (test.t1)
729734
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
730735
master-bin.000001 # Query # # COMMIT
@@ -747,6 +752,7 @@ count(*)
747752
include/show_binlog_events.inc
748753
Log_name Pos Event_type Server_id End_log_pos Info
749754
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
755+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
750756
master-bin.000001 # Table_map # # table_id: # (test.t1)
751757
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
752758
master-bin.000001 # Query # # COMMIT
@@ -862,6 +868,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
862868
include/show_binlog_events.inc
863869
Log_name Pos Event_type Server_id End_log_pos Info
864870
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
871+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
865872
master-bin.000001 # Table_map # # table_id: # (test.t1)
866873
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
867874
master-bin.000001 # Query # # COMMIT
@@ -877,6 +884,7 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
877884
include/show_binlog_events.inc
878885
Log_name Pos Event_type Server_id End_log_pos Info
879886
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
887+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
880888
master-bin.000001 # Table_map # # table_id: # (test.t1)
881889
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
882890
master-bin.000001 # Query # # COMMIT
@@ -911,6 +919,7 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
911919
include/show_binlog_events.inc
912920
Log_name Pos Event_type Server_id End_log_pos Info
913921
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
922+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
914923
master-bin.000001 # Table_map # # table_id: # (test.t1)
915924
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
916925
master-bin.000001 # Query # # COMMIT
@@ -942,6 +951,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
942951
include/show_binlog_events.inc
943952
Log_name Pos Event_type Server_id End_log_pos Info
944953
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
954+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
945955
master-bin.000001 # Table_map # # table_id: # (test.t3)
946956
master-bin.000001 # Table_map # # table_id: # (test.t1)
947957
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
@@ -963,6 +973,7 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
963973
include/show_binlog_events.inc
964974
Log_name Pos Event_type Server_id End_log_pos Info
965975
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
976+
master-bin.000001 # Annotate_rows # # delete t2.* from t2,t5 where t2.a=t5.a + 1
966977
master-bin.000001 # Table_map # # table_id: # (test.t1)
967978
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
968979
master-bin.000001 # Query # # COMMIT
@@ -984,6 +995,7 @@ count(*)
984995
include/show_binlog_events.inc
985996
Log_name Pos Event_type Server_id End_log_pos Info
986997
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
998+
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
987999
master-bin.000001 # Table_map # # table_id: # (test.t1)
9881000
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
9891001
master-bin.000001 # Query # # COMMIT

mysql-test/suite/rpl/r/rpl_create_select_row.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ ERROR 42S02: Table 'test.t_y' doesn't exist
120120
include/show_binlog_events.inc
121121
Log_name Pos Event_type Server_id End_log_pos Info
122122
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
123+
master-bin.000001 # Annotate_rows # # insert into ti_pk set a=1
123124
master-bin.000001 # Table_map # # table_id: # (test.ta)
124125
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
125126
master-bin.000001 # Query # # COMMIT

0 commit comments

Comments
 (0)