From 6509b5b48ad09f2efee9ed6c37d28592d22b75c5 Mon Sep 17 00:00:00 2001 From: "cbell/Chuck@mysql_cab_desk." <> Date: Fri, 27 Jul 2007 14:45:57 -0400 Subject: [PATCH] WL#3915 : (NDB) master's cols > slave Slave starts accepting and handling rows of master's tables which have more columns. The most important part of implementation is how to caclulate the amount of bytes to skip for unknown by slave column. To solve that issue this WL adopts results of WL#3228 which introduces an addon to table_map event that carries the necessary part of information about sizes of data of columns. mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test@stripped, 2007-07-26 21:31:54-04:00, cbell@mysql_cab_desk. +393 -0 WL#3915 master's cols > slave basic tests checking altering and skipping extra fields by slave. The fields can be of any possible types. --- .../extra/rpl_tests/rpl_extraMaster_Col.test | 393 ++++++++++++++++++ .../extra/rpl_tests/rpl_row_tabledefs.test | 63 --- mysql-test/r/rpl_extraColmaster_innodb.result | Bin 0 -> 24444 bytes mysql-test/r/rpl_extraColmaster_myisam.result | Bin 0 -> 24444 bytes .../r/rpl_row_extraColmaster_ndb.result | Bin 0 -> 12256 bytes mysql-test/r/rpl_row_tabledefs_2myisam.result | 192 --------- mysql-test/r/rpl_row_tabledefs_3innodb.result | 192 --------- .../r/rpl_stm_extraColmaster_ndb.result | Bin 0 -> 12256 bytes mysql-test/t/disabled.def | 1 + .../t/rpl_extraColmaster_innodb-master.opt | 1 + .../t/rpl_extraColmaster_innodb-slave.opt | 1 + mysql-test/t/rpl_extraColmaster_innodb.test | 15 + mysql-test/t/rpl_extraColmaster_myisam.test | 13 + mysql-test/t/rpl_row_extraColmaster_ndb.test | 12 + mysql-test/t/rpl_stm_extraColmaster_ndb.test | 13 + sql/log_event.cc | 19 +- sql/rpl_record.cc | 25 +- sql/rpl_utility.cc | 15 - 18 files changed, 479 insertions(+), 476 deletions(-) create mode 100644 mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test create mode 100644 mysql-test/r/rpl_extraColmaster_innodb.result create mode 100644 mysql-test/r/rpl_extraColmaster_myisam.result create mode 100644 mysql-test/r/rpl_row_extraColmaster_ndb.result create mode 100644 mysql-test/r/rpl_stm_extraColmaster_ndb.result create mode 100644 mysql-test/t/rpl_extraColmaster_innodb-master.opt create mode 100644 mysql-test/t/rpl_extraColmaster_innodb-slave.opt create mode 100644 mysql-test/t/rpl_extraColmaster_innodb.test create mode 100644 mysql-test/t/rpl_extraColmaster_myisam.test create mode 100644 mysql-test/t/rpl_row_extraColmaster_ndb.test create mode 100644 mysql-test/t/rpl_stm_extraColmaster_ndb.test diff --git a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test new file mode 100644 index 00000000000..696bb74ec47 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test @@ -0,0 +1,393 @@ +############################################################# +# Purpose: To test having extra columns on the master WL#3915 +# engine inspecific sourced part +############################################################# + +# TODO: partition specific +# -- source include/have_partition.inc + +########### Clean up ################ +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS t1,t2,t3,t4,t31; + +--enable_query_log +--enable_warnings + +# +# Setup differently defined tables on master and slave +# + +# Def on master: t (f_1 type_m_1,... f_s type_m_s, f_s1, f_m) +# Def on slave: t (f_1 type_s_1,... f_s type_s_s) +# where type_mi,type_si (0 < i-1 &=nzFrWNCWw4U%c?|G=vUaU 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 DOB|dS literal 0 HcmV?d00001 diff --git a/mysql-test/r/rpl_extraColmaster_myisam.result b/mysql-test/r/rpl_extraColmaster_myisam.result new file mode 100644 index 0000000000000000000000000000000000000000..f4c258cd9eac1ca5863c0ad2988a15020f640117 GIT binary patch literal 24444 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 D-KUy# literal 0 HcmV?d00001 diff --git a/mysql-test/r/rpl_row_extraColmaster_ndb.result b/mysql-test/r/rpl_row_extraColmaster_ndb.result new file mode 100644 index 0000000000000000000000000000000000000000..30332e9e7c8d3ee8084ec8aa2d8b8a9d3e1df72c GIT binary patch literal 12256 zcmeGiU2oes@?NFK1MZ#JeNa+pvl1nLCGdmexVy$WPR@3^S6~4{iK#@0BL$M&Huvjq zhF=yHJ9X3UwGXz_nj(iY=&^vLrZm)LPrObHLyW3$0@=D2p;;uQ20fVbl|nGOCkgGPspF2=u|jxJ8&!S~4N zaCXoPfNt#j6)VVr?-KFn#7SP1uvz~I<~dLIMS>5|TxP5E zmXRzbchTcxlCq+J5$6NTpGX{)gEmMkT4o;{HAj*-VGj}}S60OX4n;*x{FCF0L1?~)uT27+R? ze87iqO!35CJuae>A=B{|#9@~>Daf2dKHjmMk=XCT@hsSq0g%|BZwwVMbW@TydN9iu zAR5=e{on)y$%?5J2UZ+fal?w6R@}1UwiS0Q5IFef+tk9ZU@$b0wea&2TP@>ot$*;( zzpku*hVSga!Y}6?{N4lC;ODi-io5KixXf_GQMoEkPV6aanfdTyK7}4;{cN9e#WDXq zD@x0!ts@Vu@$CtV7IR4s!7j4`=ug-(dYbEL)s8AaW!@I_dS{bWnkMP3^_~@SyVHM<=GEQ_ zdt4?ru>bj4Ha|PHU=gZgc$;Q9^c$T3HA9WO0q|M>pUHB8Xg3c?^m1?nyq^#9Jk2c6 zRu5Tj+0*;vaoz{j0BQ<`2A|l?OPrfNMmKntS816nVP3jO$|Oszah5XKsTo{(M*e#0 zWT(^7ytiCtAK3!tReSqAaiX=p%c#7wj6MdkVRR&qa0!jBKiCuOj%%Z0e#-8WREfk| z6mcc*Sf0dB^C`>WvdsI485XtkWi@VP^-|fUQKMgP)Xpxh&^~GtRk3P=@zwc(6QLSK z9q!yXhh)LxXtgW}cB6Sa8}z|?jt=~m+o_EDaAUZ6M00mOI2&G_OFP#gfORk#_79pa zSWJzNu4jNL1nbAmu~qq^sp}E&RI)?_b<~1m942sEx)mzwnik z+TJdy-@t8#t%L814sVkXsRdeuoPl!=eQnX24bSnZLxh)&*VN-)I(LSvelq1=vvi^T zz&ss4l+S{o-;j?Ayh$J^7$No+nS$OLNjUA3`yC>eLOtG^&U)vUFoF8;IDRkJPbq&A zvuVH|Bn=vp_k-R9r!@4b!&zZRQ~3B?rP0><9C56zb!p(aEe_rxLOa87;1N{EgsZJ> z>NxN<_X4Wrl&fY$5un}^7&d8i(D48iRw573zI@$5LrXMmv<`{**oUyBtx*a6+Neat zC#bG#@lLQ6vkr5r(T$FC>UhGfcy^APj5rLqZ+~SZ=1K%Ugf;?|4VXu=f0+t0L1n<0?;YDk_JAfCjPYHR zL%eLnw^YZsBD%ydQU#c{2r$vzkq(K6!&?X<2#x|tVv=-i2zYsT+mfD>Yd;SzZ4q1| zwLrK(9!8j3s3FL%)J~ME@-|RvOC!2P}RxR*jPKca2Hf9kb%}`Cz+UgpeMjv|t|~V^Ks8t31L~3aI}sr2v4p zG7cJD2U@VS4F)}EHmzZLljS)E{*ba^w-E4i|MM6Hxr*3yNPVwj=Zz}?TQGAzD26fv zf>|&~ekm(XAQ>hN0RIWLe0cUuTm1SgLY&R>zy={bzBa(n<3{JW(LU;Q zIuh7$(2NQN7)iNRTAMstrNQ{MArDEq zDu_5eP`!q$D^Q7@3oeo}d4SwFKPAT&Bap)0ps07r5i}|q`HRdg4J$KW*5%-DIdQhi z%R9;Zy)qZahW~5f72*WJwT?Blym9E4RP0`vuNk^m<`ubljWXZsa?CA%H(gF3^CDk- zLYNI=N*4$k&1{PKdv z?PWGKbir=uYO}&u&4OI~i))86K8#8DK4ht#u_xSJ)8h7*_p9PQ{s3iwJQJkr4%N$x zMz>*pRFz@SZLX^n6*TSA^*Fp&RaJ~?-0$-899hE%@9>_31RMn4e6&;xUwdEzE@dCZ z>j+&18FZnTaYKsD3)@y-)!PIPxrtINuDE8rzM@t)S*xRjWgB&sK*4wpYtI2}qISU8 oRTZtjt6=fGH=PY8^UI6LY+tu13LH0=C+_POvG}n6t?L&52gvr;R{#J2 literal 0 HcmV?d00001 diff --git a/mysql-test/r/rpl_row_tabledefs_2myisam.result b/mysql-test/r/rpl_row_tabledefs_2myisam.result index e41f8be055b..864dfa3e910 100644 --- a/mysql-test/r/rpl_row_tabledefs_2myisam.result +++ b/mysql-test/r/rpl_row_tabledefs_2myisam.result @@ -140,198 +140,6 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; -INSERT INTO t9 VALUES (2); -INSERT INTO t2 VALUES (2,4); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (4); -INSERT INTO t4 VALUES (4); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (5); -INSERT INTO t5 VALUES (5,10,25); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (6); -INSERT INTO t6 VALUES (6,12,36); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (6); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running Yes -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No INSERT INTO t7 VALUES (1),(2),(3); INSERT INTO t8 VALUES (1),(2),(3); SELECT * FROM t7 ORDER BY a; diff --git a/mysql-test/r/rpl_row_tabledefs_3innodb.result b/mysql-test/r/rpl_row_tabledefs_3innodb.result index 72c088d5a6b..2850d709b83 100644 --- a/mysql-test/r/rpl_row_tabledefs_3innodb.result +++ b/mysql-test/r/rpl_row_tabledefs_3innodb.result @@ -140,198 +140,6 @@ Seconds_Behind_Master # Master_SSL_Verify_Server_Cert No SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE; -INSERT INTO t9 VALUES (2); -INSERT INTO t2 VALUES (2,4); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (4); -INSERT INTO t4 VALUES (4); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (5); -INSERT INTO t5 VALUES (5,10,25); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (6); -INSERT INTO t6 VALUES (6,12,36); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 1523 -Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4 -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; -START SLAVE; -INSERT INTO t9 VALUES (6); -SHOW SLAVE STATUS; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_PORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running Yes -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No INSERT INTO t7 VALUES (1),(2),(3); INSERT INTO t8 VALUES (1),(2),(3); SELECT * FROM t7 ORDER BY a; diff --git a/mysql-test/r/rpl_stm_extraColmaster_ndb.result b/mysql-test/r/rpl_stm_extraColmaster_ndb.result new file mode 100644 index 0000000000000000000000000000000000000000..30332e9e7c8d3ee8084ec8aa2d8b8a9d3e1df72c GIT binary patch literal 12256 zcmeGiU2oes@?NFK1MZ#JeNa+pvl1nLCGdmexVy$WPR@3^S6~4{iK#@0BL$M&Huvjq zhF=yHJ9X3UwGXz_nj(iY=&^vLrZm)LPrObHLyW3$0@=D2p;;uQ20fVbl|nGOCkgGPspF2=u|jxJ8&!S~4N zaCXoPfNt#j6)VVr?-KFn#7SP1uvz~I<~dLIMS>5|TxP5E zmXRzbchTcxlCq+J5$6NTpGX{)gEmMkT4o;{HAj*-VGj}}S60OX4n;*x{FCF0L1?~)uT27+R? ze87iqO!35CJuae>A=B{|#9@~>Daf2dKHjmMk=XCT@hsSq0g%|BZwwVMbW@TydN9iu zAR5=e{on)y$%?5J2UZ+fal?w6R@}1UwiS0Q5IFef+tk9ZU@$b0wea&2TP@>ot$*;( zzpku*hVSga!Y}6?{N4lC;ODi-io5KixXf_GQMoEkPV6aanfdTyK7}4;{cN9e#WDXq zD@x0!ts@Vu@$CtV7IR4s!7j4`=ug-(dYbEL)s8AaW!@I_dS{bWnkMP3^_~@SyVHM<=GEQ_ zdt4?ru>bj4Ha|PHU=gZgc$;Q9^c$T3HA9WO0q|M>pUHB8Xg3c?^m1?nyq^#9Jk2c6 zRu5Tj+0*;vaoz{j0BQ<`2A|l?OPrfNMmKntS816nVP3jO$|Oszah5XKsTo{(M*e#0 zWT(^7ytiCtAK3!tReSqAaiX=p%c#7wj6MdkVRR&qa0!jBKiCuOj%%Z0e#-8WREfk| z6mcc*Sf0dB^C`>WvdsI485XtkWi@VP^-|fUQKMgP)Xpxh&^~GtRk3P=@zwc(6QLSK z9q!yXhh)LxXtgW}cB6Sa8}z|?jt=~m+o_EDaAUZ6M00mOI2&G_OFP#gfORk#_79pa zSWJzNu4jNL1nbAmu~qq^sp}E&RI)?_b<~1m942sEx)mzwnik z+TJdy-@t8#t%L814sVkXsRdeuoPl!=eQnX24bSnZLxh)&*VN-)I(LSvelq1=vvi^T zz&ss4l+S{o-;j?Ayh$J^7$No+nS$OLNjUA3`yC>eLOtG^&U)vUFoF8;IDRkJPbq&A zvuVH|Bn=vp_k-R9r!@4b!&zZRQ~3B?rP0><9C56zb!p(aEe_rxLOa87;1N{EgsZJ> z>NxN<_X4Wrl&fY$5un}^7&d8i(D48iRw573zI@$5LrXMmv<`{**oUyBtx*a6+Neat zC#bG#@lLQ6vkr5r(T$FC>UhGfcy^APj5rLqZ+~SZ=1K%Ugf;?|4VXu=f0+t0L1n<0?;YDk_JAfCjPYHR zL%eLnw^YZsBD%ydQU#c{2r$vzkq(K6!&?X<2#x|tVv=-i2zYsT+mfD>Yd;SzZ4q1| zwLrK(9!8j3s3FL%)J~ME@-|RvOC!2P}RxR*jPKca2Hf9kb%}`Cz+UgpeMjv|t|~V^Ks8t31L~3aI}sr2v4p zG7cJD2U@VS4F)}EHmzZLljS)E{*ba^w-E4i|MM6Hxr*3yNPVwj=Zz}?TQGAzD26fv zf>|&~ekm(XAQ>hN0RIWLe0cUuTm1SgLY&R>zy={bzBa(n<3{JW(LU;Q zIuh7$(2NQN7)iNRTAMstrNQ{MArDEq zDu_5eP`!q$D^Q7@3oeo}d4SwFKPAT&Bap)0ps07r5i}|q`HRdg4J$KW*5%-DIdQhi z%R9;Zy)qZahW~5f72*WJwT?Blym9E4RP0`vuNk^m<`ubljWXZsa?CA%H(gF3^CDk- zLYNI=N*4$k&1{PKdv z?PWGKbir=uYO}&u&4OI~i))86K8#8DK4ht#u_xSJ)8h7*_p9PQ{s3iwJQJkr4%N$x zMz>*pRFz@SZLX^n6*TSA^*Fp&RaJ~?-0$-899hE%@9>_31RMn4e6&;xUwdEzE@dCZ z>j+&18FZnTaYKsD3)@y-)!PIPxrtINuDE8rzM@t)S*xRjWgB&sK*4wpYtI2}qISU8 oRTZtjt6=fGH=PY8^UI6LY+tu13LH0=C+_POvG}n6t?L&52gvr;R{#J2 literal 0 HcmV?d00001 diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 0b17e47fead..a2358294a83 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -32,6 +32,7 @@ rpl_ndb_myisam2ndb : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb faile rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly synchronization : Bug#24529 Test 'synchronization' fails on Mac pushbuild; Also on Linux 64 bit. rpl_ndb_ctype_ucs2_def : BUG#27404 util thd mysql_parse sig11 when mysqld default multibyte charset +rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported. # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open #ndb_binlog_ddl_multi : BUG#18976 2006-04-10 kent CRBR: multiple binlog, second binlog may miss schema log events diff --git a/mysql-test/t/rpl_extraColmaster_innodb-master.opt b/mysql-test/t/rpl_extraColmaster_innodb-master.opt new file mode 100644 index 00000000000..627becdbfb5 --- /dev/null +++ b/mysql-test/t/rpl_extraColmaster_innodb-master.opt @@ -0,0 +1 @@ +--innodb diff --git a/mysql-test/t/rpl_extraColmaster_innodb-slave.opt b/mysql-test/t/rpl_extraColmaster_innodb-slave.opt new file mode 100644 index 00000000000..1338b6eba04 --- /dev/null +++ b/mysql-test/t/rpl_extraColmaster_innodb-slave.opt @@ -0,0 +1 @@ + --innodb diff --git a/mysql-test/t/rpl_extraColmaster_innodb.test b/mysql-test/t/rpl_extraColmaster_innodb.test new file mode 100644 index 00000000000..082c22329fa --- /dev/null +++ b/mysql-test/t/rpl_extraColmaster_innodb.test @@ -0,0 +1,15 @@ +############################################################# +# Purpose: To test having extra columns on the master WL#3915 +############################################################# +-- source include/master-slave.inc +-- source include/have_innodb.inc + +let $engine_type = 'InnoDB'; + +set binlog_format=row; +-- source extra/rpl_tests/rpl_extraMaster_Col.test + +set binlog_format=statement; +-- source extra/rpl_tests/rpl_extraMaster_Col.test + + diff --git a/mysql-test/t/rpl_extraColmaster_myisam.test b/mysql-test/t/rpl_extraColmaster_myisam.test new file mode 100644 index 00000000000..5bbd7953294 --- /dev/null +++ b/mysql-test/t/rpl_extraColmaster_myisam.test @@ -0,0 +1,13 @@ +############################################################# +# Purpose: To test having extra columns on the master WL#3915 +############################################################# +-- source include/master-slave.inc + +let $engine_type = 'MyISAM'; + +set binlog_format=row; +-- source extra/rpl_tests/rpl_extraMaster_Col.test + +set binlog_format=statement; +-- source extra/rpl_tests/rpl_extraMaster_Col.test + diff --git a/mysql-test/t/rpl_row_extraColmaster_ndb.test b/mysql-test/t/rpl_row_extraColmaster_ndb.test new file mode 100644 index 00000000000..b91947e52e2 --- /dev/null +++ b/mysql-test/t/rpl_row_extraColmaster_ndb.test @@ -0,0 +1,12 @@ +########################################### +# Purpose: Wrapper for rpl_extraMaster_Col.test +# Using NDB +########################################### +-- source include/have_ndb.inc +-- source include/ndb_master-slave.inc +-- source include/have_binlog_format_row.inc + +let $engine_type = 'NDB'; + +-- source extra/rpl_tests/rpl_extraMaster_Col.test + diff --git a/mysql-test/t/rpl_stm_extraColmaster_ndb.test b/mysql-test/t/rpl_stm_extraColmaster_ndb.test new file mode 100644 index 00000000000..84734204439 --- /dev/null +++ b/mysql-test/t/rpl_stm_extraColmaster_ndb.test @@ -0,0 +1,13 @@ +########################################### +# Purpose: Wrapper for rpl_extraMaster_Col.test +# Using NDB +########################################### +-- source include/have_ndb.inc +-- source include/ndb_master-slave.inc +-- source include/have_binlog_format_statement.inc + +let $engine_type = 'NDB'; + +-- source extra/rpl_tests/rpl_extraMaster_Col.test + + diff --git a/sql/log_event.cc b/sql/log_event.cc index eb1f6aeeaf9..c9980634476 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -7067,6 +7067,7 @@ copy_extra_record_fields(TABLE *table, my_size_t master_reclength, my_ptrdiff_t master_fields) { + DBUG_ENTER("copy_extra_record_fields(table, master_reclen, master_fields)"); DBUG_PRINT("info", ("Copying to 0x%lx " "from field %lu at offset %lu " "to field %d at offset %lu", @@ -7077,6 +7078,10 @@ copy_extra_record_fields(TABLE *table, Copying the extra fields of the slave that does not exist on master into record[0] (which are basically the default values). */ + + if (table->s->fields < (uint) master_fields) + DBUG_RETURN(0); + DBUG_ASSERT(master_reclength <= table->s->reclength); if (master_reclength < table->s->reclength) bmove_align(table->record[0] + master_reclength, @@ -7134,7 +7139,7 @@ copy_extra_record_fields(TABLE *table, } } } - return 0; // All OK + DBUG_RETURN(0); // All OK } #define DBUG_PRINT_BITSET(N,FRM,BS) \ @@ -7723,12 +7728,6 @@ int Delete_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO const *rli, { int error; DBUG_ASSERT(row_start && row_end); - /* - This assertion actually checks that there is at least as many - columns on the slave as on the master. - */ - DBUG_ASSERT(table->s->fields >= m_width); - error= unpack_row(rli, table, m_width, row_start, &m_cols, row_end, &m_master_reclength, table->read_set, DELETE_ROWS_EVENT); /* @@ -7897,12 +7896,6 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO const *rli, { int error; DBUG_ASSERT(row_start && row_end); - /* - This assertion actually checks that there is at least as many - columns on the slave as on the master. - */ - DBUG_ASSERT(table->s->fields >= m_width); - /* We need to perform some juggling below since unpack_row() always unpacks into table->record[0]. For more information, see the diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc index d33d60300fd..db79a5dfd77 100644 --- a/sql/rpl_record.cc +++ b/sql/rpl_record.cc @@ -144,7 +144,8 @@ pack_row(TABLE *table, MY_BITMAP const* cols, @param rli Relay log info @param table Table to unpack into @param colcnt Number of columns to read from record - @param row Packed row data + @param row_data + Packed row data @param cols Pointer to columns data to fill in @param row_end Pointer to variable that will hold the value of the one-after-end position for the row @@ -239,6 +240,28 @@ unpack_row(RELAY_LOG_INFO const *rli, i++; } + /* + throw away master's extra fields + */ + uint max_cols= min(tabledef->size(), cols->n_bits); + for (; i < max_cols; i++) + { + if (bitmap_is_set(cols, i)) + { + if ((null_mask & 0xFF) == 0) + { + DBUG_ASSERT(null_ptr < row_data + master_null_byte_count); + null_mask= 1U; + null_bits= *null_ptr++; + } + DBUG_ASSERT(null_mask & 0xFF); // One of the 8 LSB should be set + + if (!((null_bits & null_mask) && tabledef->maybe_null(i))) + pack_ptr+= tabledef->calc_field_size(i, (uchar *) pack_ptr); + null_mask <<= 1; + } + } + /* We should now have read all the null bytes, otherwise something is really wrong. diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index 143251991b5..91d045b040b 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -133,21 +133,6 @@ table_def::compatible_with(RELAY_LOG_INFO const *rli_arg, TABLE *table) TABLE_SHARE const *const tsh= table->s; - /* - To get proper error reporting for all columns of the table, we - both check the width and iterate over all columns. - */ - if (tsh->fields < size()) - { - DBUG_ASSERT(tsh->db.str && tsh->table_name.str); - error= 1; - slave_print_msg(ERROR_LEVEL, rli, ER_BINLOG_ROW_WRONG_TABLE_DEF, - "Table width mismatch - " - "received %u columns, %s.%s has %u columns", - (uint) size(), tsh->db.str, tsh->table_name.str, - tsh->fields); - } - /* We now check for column type and size compatibility. */