into mats-laptop.(none):/home/bk/b29020-mysql-5.1-rpl
mysql-test/suite/binlog/r/binlog_base64_flag.result:
Auto merged
mysql-test/suite/binlog/t/binlog_base64_flag.test:
Auto merged
mysql-test/suite/rpl/r/rpl_row_create_table.result:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sql_insert.cc:
Auto merged
The bug allow multiple executing transactions working with non-transactional
to interfere with each others by interleaving the events of different trans-
actions.
Bug is fixed by writing non-transactional events to the transaction cache and
flushing the cache to the binary log at statement commit. To mimic the behavior
of normal statement-based replication, we flush the transaction cache in row-
based mode when there is no committed statements in the transaction cache,
which means we are committing the first one. This means that it will be written
to the binary log as a "mini-transaction" with just the rows for the statement.
Note that the changes here does not take effect when building the server with
HAVE_TRANSACTIONS set to false, but it is not clear if this was possible before
this patch either.
For row-based logging, we also have that when AUTOCOMMIT=1, the code now always
generates a BEGIN/COMMIT pair for single statements, or BEGIN/ROLLBACK pair in the
case of non-transactional changes in a statement that was rolled back. Note that
for the case where changes to a non-transactional table causes a rollback due
to error, the statement will now be logged with a BEGIN/ROLLBACK pair, even
though some changes has been committed to the non-transactional table.
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test:
Removing SHOW BINLOG EVENTS causing test to be non-deterministic.
mysql-test/r/ctype_cp932_binlog_row.result:
Result change.
mysql-test/suite/binlog/r/binlog_base64_flag.result:
Result change.
mysql-test/suite/binlog/r/binlog_multi_engine.result:
Result file change.
mysql-test/suite/binlog/r/binlog_row_binlog.result:
Result file change.
mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result:
Result file change.
mysql-test/suite/binlog/r/binlog_row_insert_select.result:
Result file change.
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
Result file change.
mysql-test/suite/binlog/r/binlog_stm_binlog.result:
Result file change.
mysql-test/suite/binlog/t/binlog_base64_flag.test:
Removing table that will be used in test to prevent failing if preceeding
tests forgot to drop the table.
mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_create_table.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_delayed_ins.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_log.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
Result file change.
mysql-test/suite/rpl/r/rpl_row_until.result:
Result file change.
mysql-test/suite/rpl/r/rpl_slave_skip.result:
Result file change.
mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
Result file change.
mysql-test/suite/rpl/r/rpl_truncate_2myisam.result:
Result file change.
mysql-test/suite/rpl/t/rpl_row_create_table.test:
Binlog position change.
mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test:
Binlog position change.
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Binlog position change. Added stop position to mysqlbinlog argments to prevent
extreneous output.
mysql-test/suite/rpl/t/rpl_row_until.test:
Binlog position change.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Binlog position change.
mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
Removing extreneous SHOW BINLOG EVENTS causing test to be non-deterministic.
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
Result change.
sql/log.cc:
Adding variable at_least_one_stmt to denote that there is at least one
statement committed to the transaction cache (but there might be more).
Removing duplicate checks from binlog_end_trans(). The transaction cache
should always be committed or rolled back when this function is called.
Correcting conditions for binlog_rollback() and binlog_commit() and removing
the previous "invisible commit" in favor of always using explicit commits
in the binary log.
sql/log_event.cc:
Marking table map event to be cached. Removing Muted_query_log_event from code.
sql/log_event.h:
Removing unused class Muted_query_log_event.
sql/sql_insert.cc:
Adding missing call to ha_autocommit_or_rollback() for delayed thread. Marking
CREATE-SELECT statements as transactional, since they don't need to be logged.
mysql-test/extra/rpl_tests/rpl_loaddata.test:
Removing SHOW MASTER STATUS that does not seem to make sense.
mysql-test/extra/rpl_tests/rpl_log.test:
Correcting test case to sync slave with master.
mysql-test/suite/binlog/r/binlog_unsafe.result:
Result change.
mysql-test/suite/binlog/t/binlog_unsafe.test:
Removing unsafe variable from list of safe variables.
mysql-test/suite/rpl/r/rpl_loaddata.result:
Result change.
mysql-test/suite/rpl/r/rpl_skip_error.result:
Result change.
mysql-test/suite/rpl/t/rpl_skip_error.test:
Correcting bad manual+automatic merge. Test is now only relevant for statement-
based replication.
sql/rpl_rli.cc:
Correcting automerge undoing previous change of return value.
Relay_log_info::wait_for_pos() should return -2 when not initialized to work
correctly.
There was a failure in that show slave status displayed a wrong message
when slave stopped at processing a row event inserting to a default-less
column.
The problem seem to have ceased after recent fixes in rbr code.
However, the test was not updated to carry testing of the case commented-out.
Uncommenting and editing the test.
Notice, Bug#23907 is most probably a duplicate of this one.
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
uncommenting the test that previously failed.
mysql-test/suite/rpl/r/rpl_extraCol_innodb.result:
results changed due to the correct expected error message of an added test
is displayed.
mysql-test/suite/rpl/r/rpl_extraCol_myisam.result:
results changed to reflect the test changes
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
results changed to reflect the uncommented test
sql/log_event.cc:
correcting of a merge with bug#12713 to use the correct object holding
the error code.
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl
mysql-test/r/ctype_ucs.result:
Auto merged
mysql-test/r/variables.result:
Auto merged
mysql-test/t/ctype_ucs.test:
Auto merged
mysql-test/t/variables.test:
Auto merged
sql/slave.cc:
Auto merged
irrelevant to execute since the charset information does not
affect replication for row-based replication. The row-based
versions of the tests were removed, and the statement-based
version of the test was made executable by all three modes.
This involves removing any lines that causes the test to be
dependent on the contents of the binary log, and instead we
just check that the replication works as it should.
BitKeeper/deleted/.del-rpl_ndb_charset.test:
Delete: mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test
BitKeeper/deleted/.del-rpl_ndb_charset.result:
Delete: mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result
BitKeeper/deleted/.del-rpl_row_charset.test:
Delete: mysql-test/extra/rpl_tests/rpl_row_charset.test
BitKeeper/deleted/.del-rpl_row_charset.test~739be9df1baaee3e:
Delete: mysql-test/suite/rpl/t/rpl_row_charset.test
BitKeeper/deleted/.del-rpl_row_charset_innodb.test:
Delete: mysql-test/suite/rpl/t/rpl_row_charset_innodb.test
BitKeeper/deleted/.del-rpl_row_charset_innodb-master.opt:
Delete: mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt
BitKeeper/deleted/.del-rpl_row_charset_innodb-slave.opt:
Delete: mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt
BitKeeper/deleted/.del-rpl_row_charset_innodb.result:
Delete: mysql-test/suite/rpl/r/rpl_row_charset_innodb.result
BitKeeper/deleted/.del-rpl_row_charset.result:
Delete: mysql-test/suite/rpl/r/rpl_row_charset.result
mysql-test/extra/rpl_tests/rpl_charset.test:
Test is not dependent on binlog format any more.
Using --echo instead of "select" to print text.
Removing lines causing the test to be dependent on binlog contents.
mysql-test/suite/rpl/r/rpl_charset.result:
Result change.
mysql-test/suite/rpl/t/rpl_charset.test:
Using renamed version of test file.
rpl_ndb_rep_ignore
Reason: previous test, rpl_ndb_2multi_eng, does not sync slave with master
after cleanup, so tables are sometimes left on slave
Fix: sync_slave_with_master
mysql-test/extra/rpl_tests/rpl_ndb_2multi_eng.test:
Wait until drop table is replicated to slave before terminating. (The
extra table caused sporadic errors in the next test case, causing
pushbuild to fail.)
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl
include/my_base.h:
Auto merged
mysql-test/include/show_binlog_events2.inc:
Auto merged
mysql-test/suite/binlog/t/binlog_old_versions.test:
Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Auto merged
mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt:
Auto merged
mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt:
Auto merged
sql/log_event_old.cc:
Auto merged
sql/sql_binlog.cc:
Auto merged
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
Manual merge.
mysql-test/suite/rpl/r/rpl_user.result:
Manual merge.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
Manual merge.
mysql-test/suite/rpl/t/rpl_user.test:
Manual merge.
sql/log_event.cc:
Manual merge.
sql/rpl_record.cc:
Manual merge.
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
client/client_priv.h:
Auto merged
include/my_sys.h:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/lib/mtr_report.pl:
Auto merged
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_view.cc:
Auto merged
mysql-test/suite/rpl/r/rpl_invoked_features.result:
Manual merge.
mysql-test/suite/rpl/t/rpl_invoked_features.test:
Manual merge.
sql/log.cc:
Manual merge.
into mysql1000.(none):/home/andrei/MySQL/FIXES/5.1/bug32971-rbr_error_prop
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
manual merge use local
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
manual merge use local
The error message due to lack of the default value for an extra field
was not as informative as it should be.
Fixed with improving the scheme of gathering, propagating and reporting
errors in applying rows events.
The scheme is in the following.
Any kind of error of processing of a row event incidents are to be
registered with my_error().
In the end Rows_log_event::do_apply_event() invokes rli->report() with the
message to display consisting of all the errors.
This mimics `show warnings' displaying.
A simple test checks three errors in processing an event.
Two hunks - a user level error and pushing it into the list -
have been devoted to already fixed Bug@31702.
Some open issues relating to this artifact listed on BUG@21842 page and
on WL@3679.
Todo: to synchronize the statement in the tests comments on Update and Delete
events may not stop when an extra field does not have a default with wl@3228 spec.
include/my_base.h:
A new handler level error code that is supposed to be mapped to a set of more
specific ER_ user level errors.
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
Adding yet another extra fields to see more than one error in show
slave status' report.
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
results changed (the error message etc)
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
results changed
sql/log_event.cc:
Refining slave_rows_error_report to iterate on the list of gathered errors;
Simplifying signature of prepare_record as the function does not call
rli->report to leave that duty to the event's top level code.
sql/log_event.h:
adding a corrupt event error pushing. The error will be seen with
show slave status.
sql/log_event_old.cc:
similar to log_event.cc changes
sql/rpl_record.cc:
prepare_record only pushes an error to the list
sql/rpl_record.h:
signature changed
sql/share/errmsg.txt:
The user level error code that corresponds to HA_ERR_CORRUPT_EVENT.
The error will be reported in show slave status if such a failure happens.
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
BitKeeper/deleted/.del-binlog_start_comment.result:
Auto merged
include/my_sys.h:
Auto merged
mysql-test/extra/binlog_tests/blackhole.test:
Auto merged
mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
Auto merged
mysql-test/r/case.result:
Auto merged
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
Auto merged
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
Auto merged
mysql-test/suite/rpl/r/rpl_000015.result:
Auto merged
mysql-test/suite/rpl/t/rpl_000015.test:
Auto merged
mysql-test/t/case.test:
Auto merged
sql/log_event.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
BitKeeper/deleted/.del-binlog_start_comment.test:
Using remote file.
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
Manual merge. Taking remote file to update result set after merge,
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Manual merge.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Manual merge.
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
Mask out error messages
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Mask out Error messages in reslut of show slave status
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Mask out Error messages in reslut of show slave status
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
mask out binlog position
Mask binlog positions, error, warning and other information that are not significant for the test
mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
Mask out binlog position and DBs in result of show master status
mysql-test/extra/rpl_tests/rpl_reset_slave.test:
Mask out log positions in tests to make them version independent
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
Mask out Error messages in reslut of show slave status
mysql-test/suite/rpl/r/rpl_000015.result:
Mask out log positions in tests to make them version independent
---
Mask out binlog position and DBs in result of show master status
mysql-test/suite/rpl/r/rpl_change_master.result:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/r/rpl_create_database.result:
fix for versional test
mysql-test/suite/rpl/r/rpl_grant.result:
fix for versional test
mysql-test/suite/rpl/r/rpl_init_slave.result:
fix for versional test
mysql-test/suite/rpl/r/rpl_load_from_master.result:
update result
mysql-test/suite/rpl/r/rpl_log_pos.result:
Mask out binlog position and DBs in result of show master status
mysql-test/suite/rpl/r/rpl_rotate_logs.result:
Mask out binlog position and DBs in result of show master status
mysql-test/suite/rpl/r/rpl_row_max_relay_size.result:
Mask out binlog position and DBs in result of show master status
mysql-test/suite/rpl/r/rpl_row_reset_slave.result:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/r/rpl_skip_error.result:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result:
Mask out log positions in tests to make them version independent
---
Mask out binlog position and DBs in result of show master status
mysql-test/suite/rpl/r/rpl_stm_reset_slave.result:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/r/rpl_stm_until.result:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
Mask out binlog positions
mysql-test/suite/rpl/t/rpl_000015.test:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/t/rpl_change_master.test:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/t/rpl_colSize.test:
fix for versional test
mysql-test/suite/rpl/t/rpl_create_database.test:
fix for versional test
mysql-test/suite/rpl/t/rpl_grant.test:
fix for versional test
mysql-test/suite/rpl/t/rpl_init_slave.test:
fix for versional test
mysql-test/suite/rpl/t/rpl_load_from_master.test:
fix for versional test
mysql-test/suite/rpl/t/rpl_log_pos.test:
Mask out binlog position and DBs
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/t/rpl_skip_error.test:
Mask out log positions in tests to make them version independent
mysql-test/suite/rpl/t/rpl_stm_until.test:
Mask out log positions in tests to make them version independent
mysql-test/include/show_binary_logs.inc:
Mask out log positions in tests to make them version independent
mysql-test/include/show_master_logs.inc:
Mask out log positions in tests to make them version independent
mysql-test/include/show_master_status.inc:
Mask out log positions in tests to make them version independent
---
Mask out binlog position and DBs in result of show master status
mysql-test/include/show_slave_status2.inc:
Mask out log positions in tests to make them version independent
into host.loc:/home/uchum/work/5.1-opt
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Auto merged
sql/sql_update.cc:
Auto merged
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
Merge with local tree (bug#33699).
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
Merge with local tree (bug#33699).
columns (default datatype value is assigned).
The mysql_update function has been modified to generate
an error when trying to set a NOT NULL field to NULL rather than a warning
in the set_field_to_null_with_conversions function.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Updated test case (for bug#33699).
mysql-test/include/ps_modify.inc:
Updated test case (for bug#33699).
mysql-test/r/auto_increment.result:
Updated test case (for bug#33699).
mysql-test/r/null.result:
Updated test case (for bug#33699).
mysql-test/r/ps_2myisam.result:
Updated test case (for bug#33699).
mysql-test/r/ps_3innodb.result:
Updated test case (for bug#33699).
mysql-test/r/ps_4heap.result:
Updated test case (for bug#33699).
mysql-test/r/ps_5merge.result:
Updated test case (for bug#33699).
mysql-test/r/warnings.result:
Updated test case (for bug#33699).
mysql-test/suite/ndb/r/ps_7ndb.result:
Updated test case (for bug#33699).
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
Updated test case (for bug#33699).
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
Updated test case (for bug#33699).
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
Updated test case (for bug#33699).
mysql-test/t/auto_increment.test:
Updated test case (for bug#33699).
mysql-test/t/null.test:
Updated test case (for bug#33699).
mysql-test/t/warnings.test:
Updated test case (for bug#33699).
sql/sql_update.cc:
Bug#33699: The mysql_update function has been modified to generate
an error when trying to set a NOT NULL field to NULL rather than
a warning in the set_field_to_null_with_conversions function.
tests/mysql_client_test.c:
Updated test case (for bug#33699).
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
mysql-test/include/have_multi_ndb.inc:
Auto merged
mysql-test/lib/mtr_cases.pl:
Auto merged
mysql-test/lib/mtr_report.pl:
Auto merged
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
Auto merged
mysql-test/suite/rpl_ndb/t/disabled.def:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event_old.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/rpl_rli.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_binlog.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_string.cc:
Auto merged
mysql-test/Makefile.am:
SCCS merged
mysql-test/mysql-test-run.pl:
Manual merge.
mysql-test/suite/binlog/t/disabled.def:
Manual merge.
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Manual merge.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Manual merge.
sql/log_event.cc:
Manual merge.
,
mysql-test/extra/rpl_tests/rpl_row_basic.test:
changes due to the strict mode gets default. This hunk is being added after merging
with changes from another bug fixes.
mysql-test/suite/rpl/r/rpl_ignore_table.result:
results changed
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
results changed
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
results changed
mysql-test/suite/rpl/t/rpl_ignore_table.test:
two queries on mysql db tables are replicated according to binlog_format, ie
in row-based when that is requested. Due to cancelling the idempotent default
row based events that previously exectuted successfully now stop the slave sql
thread.
We have to explicitly request the idempotent slave execution mode.
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result:
results changed. They are being committed only now since there was another
bug which fixes my working clone did not have.
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
results changed
sql/log_event.cc:
typo in manual merge earlier
into dl145j.mysql.com:/tmp/andrei/bug31552
mysql-test/extra/rpl_tests/rpl_row_basic.test:
Auto merged
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
Auto merged
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/share/errmsg.txt:
Auto merged
sql/sql_class.h:
Auto merged
sql/log_event.cc:
manual merge
without PK
Bug#31609 Not all RBR slave errors reported as errors
bug#32468 delete rows event on a table with foreign key constraint fails
The first two bugs comprise idempotency issues.
First, there was no error code reported under conditions of the bug
description although the slave sql thread halted.
Second, executions were different with and without presence of prim key in
the table.
Third, there was no way to instruct the slave whether to ignore an error
and skip to the following event or to halt.
Fourth, there are handler errors which might happen due to idempotent
applying of binlog but those were not listed among the "idempotent" error
list.
All the named issues are addressed.
Wrt to the 3rd, there is the new global system variable, changeble at run
time, which controls the slave sql thread behaviour.
The new variable allows further extensions to mimic the sql_mode
session/global variable.
To address the 4th, the new bug#32468 had to be fixed as it was staying
in the way.
include/my_bitmap.h:
basic operations with bits of an integer type are added.
mysql-test/extra/rpl_tests/rpl_foreign_key.test:
regression test for bug#32468
mysql-test/extra/rpl_tests/rpl_row_basic.test:
changes due to bug#31552/31609 idempotency is not default any longer
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
changes due to bug#31552/31609 idempotency is not default any longer
mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result:
results changed
mysql-test/suite/rpl/r/rpl_idempotency.result:
results changed
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
results changed
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
results changed
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
results changed
mysql-test/suite/rpl/r/rpl_row_mystery22.result:
results changed
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
results changed
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
results changed
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
results changed
mysql-test/suite/rpl/t/rpl_idempotency.test:
extenstions to the test providing testing of complements to the
idempotent error set and checking how slave halts when it faces an error
from the list when the mode is STRICT.
mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
changes due to bug#31552/31609 idempotency is not default any longer.
mysql-test/suite/rpl/t/rpl_row_mystery22.test:
changes due to bug#31552/31609 idempotency is not default any longer
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
changes due to bug#31552/31609 idempotency is not default any longer
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result:
results changed
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
results changed
sql/log_event.cc:
the fix for bug#32468 delete rows event on a table with foreign key constraint fails
ensures the flags are set at proper time so that their values will be caught
by innodb.
reseting the flags is done along the common error and errorless execution
path.
The list of idempotent error is extended with foreign keys related items.
NDB engine write events are designed with the replace sematics in mind.
Therefore the corrsponding ndb handler's flag are (re)set regardless of
the slave's execution mode.
Rows_log_event::write_row() starts using the bool replace argument as its
caller sets it depending on the event's execution mode.
sql/log_event.h:
adding a new member to hold the slave's mode during execution of the event.
sql/mysql_priv.h:
changes to link the command line option with the new global sys var.
sql/mysqld.cc:
introduction of the new command line option.
providing its initialization to a default.
changes to link the command line option with the new global sys var.
sql/rpl_rli.cc:
rli post-event-execution cleanup restores the default bits.
sql/set_var.cc:
The new "standard" sys_var_set class' and the new global system var related
declarations and definitions.
fix_slave_exec_mode() is used as with the update method of a new class so
as at time of the command line arguments parsing.
sql/set_var.h:
new declarations. The class for the new global sys var is based on
yet another new "standard" one.
sql/share/errmsg.txt:
slave_exec_mode setting error;
slave inconsistency error which may be not an error when the intention
is "idempotent". I.e consisting of row-based events binlog is being
applied for the 2nd (more) time.
sql/sql_class.h:
The names for the bits of the new sever slave_exec_mode_options.
mysql-test/suite/rpl/t/rpl_idempotency-master.opt:
innodb is necessary
mysql-test/suite/rpl/t/rpl_idempotency-slave.opt:
innodb is necessary, as well as the tests start with non-default
IDEMPOTENT slave execution mode.
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraColMaster.result:
Auto merged
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
manual merge
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
manual merge
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
Auto merged
mysql-test/suite/rpl/r/rpl_bug31076.result:
Auto merged
mysql-test/suite/rpl/t/rpl_bug31076.test:
Auto merged
mysql-test/suite/rpl/t/rpl_innodb_bug28430.test:
Auto merged
mysql-test/suite/rpl_ndb/t/disabled.def:
Auto merged
sql/field.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event_old.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
mysql-test/t/partition.test:
Manual merge.
BitKeeper/deleted/.del-rpl_row_extraColmaster_ndb.result~a2c64bae75b49d2:
Manual merge.
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
Manual merge.
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
Manual merge.
mysql-test/suite/rpl/t/disabled.def:
Manual merge.
sql/sql_delete.cc:
Manual merge.
Pushing test case for bug only. Bug already fixed as a result of the patch for BUG#19958.
mysql-test/extra/rpl_tests/rpl_row_basic.test:
Adding test to see that no error is given on slave when deleting
rows that don't exist on table without primary key.
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
Result change.
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
Result change.
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
Result change.
Actually, the failure happened with 3innodb as well. Most probably
the reason is in failing to delete a binlog file on __NT__ so that
that master increments the index of the binlog file.
The test results hide valueable warning that windows could generate
about that.
The scope of this fix is to make sure we have such warning and
to lessen chances for binlog file being held at time of closing.
The dump thread is getting a good chance to leave and
release the file for its successful deletion.
We shall watch over the two tests as regression is not excluded.
In that case we would have an extra info possibly explaining why
__NT__ env can not close/delete the file.
However, regardless of that reason, there is alwasy workaround to mask out
non-deterministic binlog index number.
mysql-test/extra/rpl_tests/rpl_truncate_helper.test:
enable warnings for other than DROP queries;
wait for slave's full stop which ensures io thread left and that
will be regarded by dump thread to leave and close the binlog file;
relocating reset master to the end of the test so that the caller of
this helper should start with the binlog name which has not yet been
affected/reset since its creation.
mysql-test/suite/rpl/r/rpl_truncate_2myisam.result:
results changed
mysql-test/suite/rpl/r/rpl_truncate_3innodb.result:
results changed
into mysql.com:/usr/clones/rpl-push
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Auto merged
mysql-test/suite/rpl/r/rpl_extraCol_innodb.result:
Auto merged
mysql-test/suite/rpl/r/rpl_extraCol_myisam.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
Auto merged
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
mysql-test/suite/rpl/r/rpl_bug31076.result:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/sql_update.cc:
Auto merged
storage/ndb/include/ndbapi/Ndb.hpp:
Auto merged
mysql-test/suite/rpl/t/rpl_bug31076.test:
manual merge
into kindahl-laptop.dnsalias.net:/home/bk/b28618-mysql-5.1-rpl
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/rpl_rli.h:
Auto merged
sql/slave.cc:
Auto merged
is possible):
When skipping the beginning of a transaction starting with BEGIN, the OPTION_BEGIN
flag was not set correctly, which caused the slave to not recognize that it was
inside a group. This patch sets the OPTION_BEGIN flag for BEGIN, COMMIT, ROLLBACK,
and XID events. It also adds checks if inside a group before decreasing the
slave skip counter to zero.
Begin_query_log_event was not marked that it could not end a group, which is now
corrected.
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Correcting slave skip counter to get the correct behaviour.
mysql-test/suite/rpl/r/rpl_slave_skip.result:
Result change.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Adding tests to check that skipping works for transactions:
- Skipping one group with BEGIN first
- Skipping two groups with BEGIN first
- Skipping one group without BEGIN first but with AUTOCOMMIT=0
- LOAD DATA INFILE under statement-based replication
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
Result change.
sql/log_event.cc:
Adding checks if we're in a group when the slave skip counter is 1.
In that case, we should keep going.
Adding helping member function Log_event::continue_group() denoting
that this event cannot end a group, and if the skip counter indicates
that the group ends after this event, it should not decrease the skip
counter.
Query_log_event will change the OPTION_BEGIN flag for BEGIN, COMMIT, and
ROLLBACK, even when skipping because of a positive skip count, and
Xid_log_event will also affect the OPTION_BEGIN flag, even when being
skipped.
Begin_load_query_log_event cannot end a group, so it is marked to
continue the group.
sql/log_event.h:
Adding helper function Log_event::continue_group().
sql/rpl_rli.h:
Adding Relay_log_info::get_flag() to get the value of a
replication flag.
sql/slave.cc:
Adding debug output and changing debug message.
mysql-test/suite/rpl/data/rpl_bug28618.dat:
New BitKeeper file ``mysql-test/suite/rpl/data/rpl_bug28618.dat''
mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt:
New BitKeeper file ``mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt''
Refactoring code to add parameter to pack() and unpack() functions with
purpose of indicating if data should be packed in little-endian or
native order. Using new functions to always pack data for binary log
in little-endian order. The purpose of this refactoring is to allow
proper implementation of endian-agnostic pack() and unpack() functions.
Eliminating several versions of virtual pack() and unpack() functions
in favor for one single virtual function which is overridden in
subclasses.
Implementing pack() and unpack() functions for some field types that
packed data in native format regardless of the value of the
st_table_share::db_low_byte_first flag.
The field types that were packed in native format regardless are:
Field_real, Field_decimal, Field_tiny, Field_short, Field_medium,
Field_long, Field_longlong, and Field_blob.
Before the patch, row-based logging wrote the rows incorrectly on
big-endian machines where the storage engine defined its own
low_byte_first() to be FALSE on big-endian machines (the default
is TRUE), while little-endian machines wrote the fields in correct
order. The only known storage engine that does this is NDB. In effect,
this means that row-based replication from or to a big-endian
machine where the table was using NDB as storage engine failed if the
other engine was either non-NDB or on a little-endian machine.
With this patch, row-based logging is now always done in little-endian
order, while ORDER BY uses the native order if the storage engine
defines low_byte_first() to return FALSE for big-endian machines.
In addition, the max_data_length() function available in Field_blob
was generalized to the entire Field hierarchy to give the maximum
number of bytes that Field::pack() will write.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Sorting by columns that produces deterministic order.
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
Result change.
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
Result change.
mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result:
Result change.
mysql-test/suite/rpl/t/disabled.def:
Enabling tests.
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Adding missing sync_slave_with_master causing slave to keep tables
after shutdown.
mysql-test/suite/rpl_ndb/t/disabled.def:
Enabling tests.
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb-slave.opt:
Adding --new option
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test:
Adding have_log_bin.
mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb-slave.opt:
Adding --new option
mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test:
Adding have_log_bin
mysql-test/t/partition.test:
Adding have_archive, since that is used in the test.
sql/field.cc:
Eliminating all two-argument pack() and unpack() functions and moving
functionality into the four-argument version. The four argument version
is introduced so that it is possible to avoid using the storage engine
default when writing and reading the packed format (the unpacked format
still uses the storage engine's default). This is used by row-based
replication to write the fields in a storage engine- and endian-agnostic
format.
Packing integral and floating-point numbers in little-endian format
(if requested).
Using pad_char for the field instead of spaces (0x20) when unpacking.
Adding some Doxygen documentation.
---
Adding max_data_length() to denote the maximum number of bytes that
pack() will write.
Adding casts to remove warnings for debug printouts.
sql/field.h:
Eliminating all virtual pack() and unpack() functions except the four-
argument version, which now is the function that shall be overridden.
The two-argument versions are convenience functions, to prevent changes
to code that uses these.
Adding code to pack integer numbers and floating-point numbers in
little-endian format, if requested.
---
Adding max_data_length() to denote the maximum number of bytes that
pack() will write.
sql/log.cc:
Removing debug printout causing crash when starting NDB on Solaris.
sql/log_event.cc:
Adding missing #ifndef causing compile failure. Adding debug printouts.
sql/rpl_record.cc:
Debriding code. Using new pack() and unpack() functions to always pack
fields little-endian. Adding debug printouts.
---
Using max_data_length() when packing field into row.
Adding casts to debug printouts.
sql/sql_show.cc:
Adding code that causes crash on Solaris machines since printf() cannot
handle NULL values for strings properly.
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result:
New BitKeeper file ``mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result''
mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result:
New BitKeeper file ``mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result''
Delete: mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test
.del-rpl_row_extraColmaster_ndb.result~a2c64bae75b49d2:
Delete: mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
.del-rpl_row_extraColmaster_ndb.test~523b0954869c4423:
Delete: mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test
Many files:
merged and cleanup of test cases
BitKeeper/deleted/.del-rpl_row_extraColmaster_ndb.test~523b0954869c4423:
Delete: mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test
BitKeeper/deleted/.del-rpl_stm_extraColmaster_ndb.test~5ac81fa1ec366ba:
Delete: mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test
BitKeeper/deleted/.del-rpl_row_extraColmaster_ndb.result~a2c64bae75b49d2:
Delete: mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
merged and cleanup of test cases
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
merged and cleanup of test cases
mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test:
merged and cleanup of test cases
mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test:
merged and cleanup of test cases
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
merged and cleanup of test cases
mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test:
Updated test to run for both row and mixed replication testing
mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result:
Updated results file
mysql-test/extra/rpl_tests/rpl_row_charset.test:
Updated test to specify the engine in the create. In addition had to add BIG SQL for NDB
mysql-test/suite/rpl/r/rpl_row_charset.result:
Updated results file
mysql-test/suite/rpl/t/rpl_row_charset_innodb.test:
Created a wrapper to test innodb storage engine as well
mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt:
Option file to ensure innodb on master
mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt:
Option file to ensure innodb on slave
mysql-test/suite/rpl/r/rpl_row_charset_innodb.result:
New results file for innodb test case
into sita.local:/Users/tsmith/m/bk/maint/51
sql/field.cc:
Auto merged
sql/log_event_old.cc:
Auto merged
sql/rpl_record.h:
Auto merged
sql/rpl_utility.cc:
Auto merged
sql/rpl_utility.h:
Auto merged
sql/slave.h:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
sql/log_event.cc:
Manual merge
sql/log_event.h:
Manual merge
sql/log_event_old.h:
Manual merge
sql/rpl_record.cc:
Manual merge
sql/slave.cc:
Manual merge
into quant.(none):/ext/mysql/bk/mysql-5.1-bug21842-rpl
mysql-test/suite/ndb/r/ndb_dd_basic.result:
Auto merged
sql/field.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event_old.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/rpl_record.cc:
Auto merged
sql/rpl_record.h:
Auto merged
sql/rpl_utility.cc:
Auto merged
sql/rpl_utility.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_string.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/unireg.h:
Auto merged
sql/log_event.cc:
Manual merge.
sql/log_event.h:
Manual merge.
sql/log_event_old.h:
Manual merge.
using TPC-B):
Problem: A RBR event can contain incomplete row data (only key value and
fields which have been changed). In that case, when the row is unpacked
into record and written to a table, the missing fields get incorrect NULL
values leading to master-slave inconsistency.
Solution: Use values found in slave's table for columns which are not given
in the rows event. The code for writing a single row uses the following
algorithm:
1. unpack row_data into table->record[0],
2. try to insert record,
3. if duplicate record found, fetch it into table->record[0],
4. unpack row_data into table->record[0],
5. write table->record[0] into the table.
Where row_data is the row as stored in the data area of a rows event.
Thus:
a) unpacking of row_data happens at the time when row is written into
a table,
b) when unpacking (in step 4), only columns present in row_data are
overwritten - all other columns remain as they were found in the table.
Since all data needed for the above algorithm is stored inside
Rows_log_event class, functions which locate and write rows are turned
into methods of that class.
replace_record() -> Rows_log_event::write_row()
find_and_fetch_row() -> Rows_log_event::find_row()
Both methods take row data from event's data buffer - the row being
processed is pointed by m_curr_row. They unpack the data as needed into
table's record buffers record[0] or record[1]. When row is unpacked,
m_curr_row_end is set to point at next row in the data buffer.
Other changes introduced in this changeset:
- Change signature of unpack_row(): don't report errors and don't
setup table's rw_set here. Errors can happen only when setting default
values in prepare_record() function and are detected there.
- In Rows_log_event and derived classes, don't pass arguments to
the execution primitives (do_...() member functions) but use class
members instead.
- Move old row handling code into log_event_old.cc to be used by
*_rows_log_event_old classes.
Also, a new test rpl_ndb_2other is added which tests basic replication
from master using ndb tables to slave storing the same tables using
(possibly) different engine (myisam,innodb).
Test is based on existing tests rpl_ndb_2myisam and rpl_ndb_2innodb.
However, these tests doesn't work for various reasons and currently are
disabled (see BUG#19227).
The new test differs from the ones it is based on as follows:
1. Single test tests replication with different storage engines on slave
(myisam, innodb, ndb).
2. Include file extra/rpl_tests/rpl_ndb_2multi_eng.test containing
original tests is replaced by extra/rpl_tests/rpl_ndb_2multi_basic.test
which doesn't contain tests using partitioned tables as these don't work
currently. Instead, it tests replication to a slave which has more or
less columns than master.
3. Include file include/rpl_multi_engine3.inc is replaced with
include/rpl_multi_engine2.inc. The later differs by performing slightly
different operations (updating more than one row in the table) and
clearing table with "TRUNCATE TABLE" statement instead of "DELETE FROM"
as replication of "DELETE" doesn't work well in this setting.
4. Slave must use option --log-slave-updates=0 as otherwise execution of
replication events generated by ndb fails if table uses a different
storage engine on slave (see BUG#29569).
sql/log_event.cc:
- Initialization of new Rows_log_event members.
- Fixing some typos in documentation.
In Rows_log_event::do_apply_event:
- Set COMPLETE_ROWS_F flag (when master and slave have the same number of
columns and all colums are present in the row)
- Move initialization of tables write/read sets here, outside the rows
processing loop (and out of unpack_row() function).
- Remove calls to do_prepare_row() - no longer needed.
- Add code managing m_curr_row and m_curr_row_end pointers.
- Change signatures of row processing methods of Rows_log_event and it
descendants - now most arguments are taken from class members.
- Remove do_prepare_row() methods which are no longer used.
- The auto_afree_ptr template is moved to rpl_utility.h (so that it can
be used in log_event_old.cc).
- Removed copy_extra_fields() function - no longer used.
In Rows_log_event::write_row (former replace_record):
- The old code is moved to log_event_old.cc.
- Use prepare_record() and non-destructive unpack_current_row() to fill record
with data.
- In case a record being inserted already exists on slave and row data is
incomplete use the record found and non-destructive unpack_current_row() to
combine new column values with existing ones.
- More debug info added.
In Rows_log_event::find_row (former find_and_fetch_row function):
- The old code is moved to log_event_old.cc.
- Unpacking of the row is moved here.
- In case of search using PK, the key data is prepared here.
- More debug info added.
- Remove initialization of Rows_log_event::m_after_image buffer which is no
longer used.
- Use new row unpacking methods in Update_rows_log_event::do_exec_row() to
create before and after image.
Note: all existing code used by Rows_log_event::do_apply_event() has been moved
to log_event_old.cc to be used by *_rows_log_event_old classes.
sql/log_event.h:
- Add new COMPLETE_ROWS_F flag in Rows_log_event.
- Add Rows_log_event members describing the row being processed.
- Add a pointer to key buffer which is used in derived classes.
- Add new methods: find__row(), write_row() and unpack_current_row().
- Change signatures of do_...() methods (replace method arguments by
class members).
- Remove do_prepare_row() method which is no longer used.
- Update method documentation.
- Add Old_rows_log_event class, which contains the old row processing code, as
a friend of Rows_log_event so that it can access all members of an event
instance.
sql/log_event_old.cc:
Move here old implementation of Rows_log_event::do_apply_event() and
helper methods.
sql/log_event_old.h:
- Define new class Old_rows_log_event encapsulating old version of
Rows_log_event::do_apply_event() and the helper methods.
- Add the Old_rows_log_event class as a base for *_old versions of RBR event
classes, ensure that the old version of do_apply_event() is called.
- For *_old classes, declare the helper methods used in the old version of
do_apply_event().
sql/rpl_record.cc:
- Make unpack_row non-destructive for columns not present in the row.
- Don't fill read/write set here as it is done outside these functions.
- Move initialization of a record with default values to a separate
function prepare_record().
sql/rpl_record.h:
- Change signature of unpack_row().
- Declare function prepare_record().
sql/rpl_utility.cc:
Make tabe_def::calc_field_size() a const method.
sql/rpl_utility.h:
Make table_def::calc_field_size() a const method.
Move auto_afree_ptr template here so that it can be re-used (currently
in log_event.cc and log_event_old.cc). Similar with DBUG_PRINT_BITSET
macro.
mysql-test/extra/rpl_tests/rpl_ndb_2multi_basic.test:
Modification of rpl_ndb_2multi_eng test. Tests with partitioned tables
are removed and a setup with slave having different number of columns
than master is added.
mysql-test/include/rpl_multi_engine2.inc:
Modification of rpl_multi_engine3.inc which operates on more rows and
replaces "DELETE FROM t1" with "TRUNCATE TABLE t1" as the first form
doesn't replicate in NDB -> non-NDB setting (BUG#28538).
mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result:
Results of the test.
mysql-test/suite/rpl_ndb/t/rpl_ndb_2other-slave.opt:
Test options. --log-slave-updates=0 is compulsory as otherwise non-NDB
slave applying row events from NDB master will fail when trying to log
them.
mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test:
Test replication of NDB table to slave using other engine. The main test
is in extra/rpl_tests/rpl_ndb_2multi_basic.test. It is included here
several times with different settings of default storage engine on slave.
into mysql_cab_desk.:C:/source/c++/mysql-5.1_BUG_22086
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/log_event.cc:
Auto merged
sql/rpl_utility.cc:
Auto merged
sql/rpl_utility.h:
Auto merged
This patch adds functionality to row-based replication to ensure the
slave's column sizes are >= to that of the master.
It also includes some refactoring for the code from WL#3228.
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
Removed commented out portion of test referenced in bug report. This
test supports the original request of the bug report.
mysql-test/suite/rpl/r/rpl_extraCol_innodb.result:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
New result file for additional test.
mysql-test/suite/rpl/r/rpl_extraCol_myisam.result:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
New result file for additional test.
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
New result file for additional test.
sql/field.cc:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch refactors the additions made by this bug patch and those
made by WL#3228. The effort consolidates the large switches on type()
into functions within the field classes.
sql/field.h:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch refactors the additions made by this bug patch and those
made by WL#3228. The effort consolidates the large switches on type()
into functions within the field classes.
sql/log_event.cc:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch refactors the calc_field_size() method to use the new
methods implemented in the field classes. It also corrects comments
concerning how replication of field metadata works.
sql/log_event.h:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch refactors out the calc_field_size() method into the method
save_field_metadata().
sql/rpl_utility.cc:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch adds a method to check the size of the field on the master
using the field metadata from WL#3228. Each column is checked to ensure
the slave's column is >= to the master's column in size.
sql/rpl_utility.h:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch changes the table_def class so that it records the size of
the metadata. This is a result of refactoring out the calc_field_size()
method into the method save_field_metadata(). Prevents access via
field_metadata(col) to unitialized memory when there is no metadata
transmitted from the master.
mysql-test/suite/rpl/r/rpl_row_colSize.result:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
New result file for additional test.
mysql-test/suite/rpl/t/rpl_row_colSize.test:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
Added a test file to test each variable type that relies on field
metadata from the master.
mysql-test/include/test_fieldsize.inc:
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
Sub unit file to test each variable type that relies on field
metadata from the master.
into mysql_cab_desk.:C:/source/c++/mysql-5.1-new-rpl-merge
mysql-test/lib/mtr_report.pl:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/log_event.cc:
Auto merged
mysql-test/suite/rpl/r/rpl_row_create_table.result:
Merge with 5.1 main.
Corrective patch to fix test failures in pushbuild and add assertions
to help debug rpl_extraColmaster test failures.
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
WL#3915 : (NDB) master's cols > slave
Change test to omit the port numbers in the result file.
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
WL#3915 : (NDB) master's cols > slave
Corrected result file.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
WL#3915 : (NDB) master's cols > slave
Corrected result file.
sql/rpl_utility.cc:
WL#3915 : (NDB) master's cols > slave
Added assertions to assist in debugging.
Changed test to enable easier debugging.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
WL#3915 : (NDB) master's cols > slave
Changes to test in order to aide debugging.
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
WL#3915 : (NDB) master's cols > slave
New result file for test changes.
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
WL#3915 : (NDB) master's cols > slave
New result file for test changes.
mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result:
WL#3915 : (NDB) master's cols > slave
New result file for test changes.
Fixing tests and results to work when replicating to fewer columns on
slave than on master. One test that previously should fail, now works,
and some log positions have changed as a result of adding metadata to
the events.
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test:
Replication to fewer columns on slave now works.
mysql-test/include/wait_for_slave_to_stop.inc:
Adding subsitutions for SHOW SLAVE STATUS
mysql-test/suite/binlog/r/binlog_row_binlog.result:
Result change.
mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
Result change.
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Result change.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Result change.
mysql-test/suite/rpl/r/rpl_slave_skip.result:
Result change.
mysql-test/suite/rpl/t/rpl_skip_error-slave.opt:
Error number changed [!]
This patch adds the ability to store extra field metadata in the table
map event. This data can include pack_length() or field_lenght() for
fields such as CHAR or VARCHAR enabling developers to add code that
can check for compatibilty between master and slave columns. More
importantly, the extra field metadata can be used to store data from the
master correctly should a VARCHAR field on the master be <= 255 bytes
while the same field on the slave is > 255 bytes.
The patch also includes the needed changes to unpack to ensure that data
which is smaller on the master can be unpacked correctly on the slave.
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.
mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test:
WL#3228 : RBR using different table defs on slave/master
This patch changes the test to coincide with changes to binlog
size of table map event.
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_create_table.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_log.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_max_relay_size.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_row_until.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/r/rpl_skip_error.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/t/disabled.def:
WL#3915 master's cols > slave
Disabled the rpl_stm_extraColmaster_ndb test because statement-based
replication is not supported in NDB at this time. It can be enabled
when statement-based replication for NDB is released.
mysql-test/suite/rpl/t/rpl_row_create_table.test:
WL#3228 : RBR using different table defs on slave/master
This patch corrects binlog positions a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test:
WL#3228 : RBR using different table defs on slave/master
This patch corrects binlog positions a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new result file as a result of the change to the
size of the tablemap log event.
sql/field.cc:
WL#3228 : RBR using different table defs on slave/master
This patch includes updates to the unpack() methods for the variable
length fields. A new parameter was added (from_length) that is the
value stored in the field_metadata of the table map from the table_def
class. If the value is non-zero and less than what the field on the
slave is then use the from_length else use the original value from the
field on the slave.
sql/field.h:
L#3228 : RBR using different table defs on slave/master
This patch includes updates to the unpack() methods for the variable
length fields. A new parameter was added (from_length) that is the
value stored in the field_metadata of the table map from the table_def
class.
sql/log_event.cc:
WL#3228 : RBR using different table defs on slave/master
This patch adds methods to calculate the field metadata size, prepare
the field metadata for writing to the binlog, and additions to the
Table_map_log_event::write_body method to include the field metadata
in the table map that is written to the binlog.
WL#3915 master's cols > slave
copying extra (slave's) fields returns early if master's table version is wider;
removing assert in the way of master > slave cols.
sql/log_event.h:
WL#3228 : RBR using different table defs on slave/master
This patch adds method declarations and variables needed to support
storing field metadata in the table map that is written to the binlog.
sql/rpl_record.cc:
WL#3228 : RBR using different table defs on slave/master
This patch modifies the unpack_row() method to unpack fields passing in
the value from the table_def class. This value is the extra field
metadata stored there from the master.
WL#3915 master's cols > slave
adding a snippet that shift exectution curson donw the row skipping unknown by slave
fields' data.
sql/rpl_rli.h:
WL#3228 : RBR using different table defs on slave/master
This patch adds a helper function to retrieve the table_def for a given
table in the RPL_TABLE_LIST structure.
sql/rpl_utility.cc:
WL#3228 : RBR using different table defs on slave/master
This patch adds a helper method that retrieves the correct size
parameter for the field. This method is used to compare the size as
sent by the master with that on the slave for all types of fields that
can vary in size and storage requirements.
WL#3915 master's cols > slave
Remove warning message for master's cols > slave.
sql/rpl_utility.h:
WL#3228 : RBR using different table defs on slave/master
This patch changes the table_def class constructor to pass in the raw
data read from the table map and extract it into an array of dimension
size (number of fields). It also adds a method to return the field
metadata for any field. The method returns the data stored in the table
map or 0 if no data was stored for that field. Lastly, a method to return
the results of field->maybe_null() is included so that the slave can
determine if a field that is not on the slave is null.
mysql-test/suite/rpl/t/rpl_colSize.test:
WL#3228 : RBR using different table defs on slave/master
This patch contains a new test designed to test the feature of having
columns on the master that are smaller than what is on the slave.
mysql-test/suite/rpl/t/rpl_extraColmaster_innodb-master.opt:
WL#3915 master's cols > slave
option for innodb
mysql-test/suite/rpl/t/rpl_extraColmaster_innodb-slave.opt:
WL#3915 master's cols > slave
option for innodb
mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test:
WL#3915 master's cols > slave
Test of innodb. Test runs in both statement- and row-based replication.
mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test:
WL#3915 master's cols > slave
Test of myisam. Test runs in both statement- and row-based replication.
mysql-test/suite/rpl/r/rpl_colSize.result:
WL#3228 : RBR using different table defs on slave/master
This patch contains a result file for the new test designed to test the
feature of having columns on the master that are smaller than what is
on the slave.
mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test:
WL#3915 master's cols > slave
Test of ndb. Test runs in row-based replication.
mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test:
WL#3915 master's cols > slave
Test of ndb. Test runs in statement-based replication.
mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result:
WL#3915 master's cols > slave
new results
mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result:
WL#3915 master's cols > slave
new results
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
WL#3915 master's cols > slave
basic tests checking altering and skipping extra fields by slave.
The fields can be of any possible types.
mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result:
WL#3915 master's cols > slave
new results
- reset the logs before and after the test.
- cleanup from the previous tests : use the correct schema.
mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
5.0-opt -> 5.1-opt merge of the test case for bug 29571.
mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result:
5.0-opt -> 5.1-opt merge of the test case for bug 29571.