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.
the include file.
fixed with correcting the offset.
mysql-test/include/show_binlog_events2.inc:
correcting 5.1 specific offset (which appeared to 5.0's)
into dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl-merge
include/my_sys.h:
Auto merged
sql/log.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
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
mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt:
Rename: mysql-test/t/rpl_loaddata_map-master.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt:
Rename: mysql-test/t/rpl_loaddata_map-slave.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
mysql-test/include/show_binlog_events2.inc:
Binlog position change.
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
Result change.
mysql-test/suite/rpl/r/rpl_user.result:
Result change.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
Test is only sensible to execute for statement and mixed mode.
mysql-test/suite/rpl/t/rpl_user.test:
Test assumed that binary log is identical for row- and statement-
based logging, which it was not. Deleting users individually
on master and slave respectively, without involving binary
log.
'Wrong parameters to functi
START SLAVE reports vague error when it fails to register on master:
"Wrong parameters to function register_slave".
If master failed to register slave because of too long
'report-host'/'report-user'/'report-password', return better error
messages:
"Failed to register slave: too long 'report-host'"
"Failed to register slave: too long 'report-user'"
"Failed to register slave; too long 'report-password'"
No test case for this fix.
sql/repl_failsafe.cc:
Report descriptive error when master fails to register slave.
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.
mysql-test/include/have_local_infile.inc:
BitKeeper file /data0/mkindahl/mysql-5.0-rpl-merge/mysql-test/include/have_local_infile.inc
mysql-test/r/have_local_infile.require:
BitKeeper file /data0/mkindahl/mysql-5.0-rpl-merge/mysql-test/r/have_local_infile.require
mysql-test/t/binlog_start_comment.test:
Test requires that local_infile is on, so added require for that.
mysql-test/t/rpl_sp.test:
Adding missing sync_slave_with_master causing following tests to fail.
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
BitKeeper/deleted/.del-rpl_transaction.test:
Auto merged
include/my_sys.h:
Auto merged
mysql-test/extra/binlog_tests/blackhole.test:
Auto merged
mysql-test/r/case.result:
Auto merged
mysql-test/r/mysqlbinlog2.result:
Auto merged
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
Auto merged
mysql-test/t/case.test:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
pre-locking.
The crash was caused by an implicit assumption in check_table_access() that
table_list parameter is always a part of lex->query_tables.
When iterating over the passed list of tables, check_table_access() used
to stop only when lex->query_tables_last_not_own was reached.
In case of pre-locking, lex->query_tables_last_own is not NULL and points
to some element of lex->query_tables. When the parameter
of check_table_access() was not part of lex->query_tables, loop invariant
could never be violated and a crash would happen when the current table
pointer would point beyond the end of the provided list.
The fix is to change the signature of check_table_access() to also accept
a numeric limit of loop iterations, similarly to check_grant(), and
supply this limit in all places when we want to check access of tables
that are outside lex->query_tables, or just want to check access to one table.
mysql-test/r/information_schema.result:
Update test results (Bug#34166).
mysql-test/t/information_schema.test:
Add a test case for Bug#34166.
sql/mysql_priv.h:
Change signature of check_table_access() to accept a numeric limit
of tables to check.
sql/sp_head.cc:
Update to the new signature of check_table_access().
sql/sql_acl.cc:
Improve code clarity: if there is a numeric limit, we should not need
to look at first_not_own_table.
sql/sql_base.cc:
Update to the new signature of check_table_access().
sql/sql_cache.cc:
Update to the new signature of check_table_access().
sql/sql_parse.cc:
Update to the new signature of check_table_access().
Change check_table_access() to accept an optional numeric limit of tables
to check. A crash would happen when check_table_access() was
passed a list of tables that is not part of lex->query_tables and
lex->query_tables_last_own was not NULL.
sql/sql_plugin.cc:
Update to the new signature of check_table_access().
sql/sql_prepare.cc:
Update to the new signature of check_table_access().
sql/sql_show.cc:
Update to the new signature of check_table_access().
Ensure that check_table_access() only checks access to the first
table in the table list when called from list_open_tables().
list_open_tables() supplies a table list that is created on stack,
whereas check_table_access() used to assume that the supplied list is a part
of thd->lex.
sql/sql_trigger.cc:
Update to the new signature of check_table_access().
sql/sql_view.cc:
Update to the new signature of check_table_access().
into dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
BitKeeper/deleted/.del-show_binlog_events2.inc:
Auto merged
sql-common/client.c:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/slave.cc:
Auto merged
BitKeeper/deleted/.del-show_binlog_events2.inc:
Delete: mysql-test/include/show_binlog_events2.inc
client/mysqlbinlog.cc:
char -> uchar for raw memory.
sql/item_cmpfunc.cc:
Adding cast to remove warning when converting negative integer
to unsigned type.
sql/log_event.cc:
char -> uchar for raw memory.
sql/log_event.h:
char -> uchar for raw memory.
sql/rpl_utility.cc:
Adding cast to remove warning when converting negative integer
to unsigned type.
sql/slave.cc:
char -> uchar for raw memory.
sql/sql_repl.cc:
char -> uchar for raw memory.
sql-common/client.c:
char -> uchar for raw memory.
mysql-test/r/bdb_notembedded.result:
Result change.
mysql-test/r/rpl_loaddata_map.result:
Result change.
mysql-test/t/rpl_loaddata_map.test:
Blanking out file id as well.
Main problem: mysql 5.1 cannot read binlogs from 4.1.
Subproblem 1: There is a mistake in sql_ex_info::init. The read_str()
function updates its first argument to point to the next character to
read. However, it is applied only to a copy of the buffer pointer, so the
real buffer pointer is not updated.
Fix 1: do not take a copy of the buffer pointer. The copy was needed
because sql_ex_info::init does not use the const attribute on some of its
arguments. So we add the const attribute, too.
Subproblem 2: The first BINLOG statement is asserted to be a
FORMAT_DESCRIPTION_LOG_EVENT, but 4.1 binlogs begin with START_EVENT_V3.
Fix 2: allow START_EVENT_V3 too.
mysql-test/suite/binlog/std_data/binlog_old_version_4_1.000001:
New BitKeeper file ``mysql-test/suite/binlog/std_data/binlog_old_version_4_1.000001''
mysql-test/suite/binlog/r/binlog_old_versions.result:
Updated result file.
mysql-test/suite/binlog/t/binlog_old_versions.test:
Added a test reading an old 4.1 binlog.
sql/log_event.cc:
1. Added const keyword at the following places:
- input buffer for pretty_print_str
- input buffer for write_str
- input buffer, end pointer, and return value from sql_ex_info::init
2. Fixed the bug by not taking a copy of buf before calling read_str in
sql_ex_info::init().
sql/log_event.h:
Added const keyword to fields of the sql_ex_info struct.
Added const keyword to arguments and return value of sql_ex_info::init
sql/sql_binlog.cc:
The first BINLOG statement must describe the format for future BINLOG
statements. Otherwise, we do not know how to read the BINLOG statement.
Problem: only FORMAT_DESCRIPTION_EVENT is currently allowed as the first
event. Binlogs from 4.1 begin with a START_EVENT_V3, which serves the
same purpose.
Fix: We now allow the first BINLOG statement to be a START_EVENT_V3, as
well as a FORMAT_DESCRIPTION_EVENT.
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.
into dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl-merge
include/my_sys.h:
Auto merged
mysql-test/r/blackhole.result:
Auto merged
mysql-test/r/case.result:
Auto merged
mysql-test/r/mysqlbinlog2.result:
Auto merged
mysql-test/t/blackhole.test:
Auto merged
mysql-test/t/case.test:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
Problem: When slave reads format_description_log_event, it checks if the
master is a version that uses an old binlog format. See also BUG#27779.
Not all possible server_versions were listed.
Fix: Check for all server_versions which use the old binlog_format.
sql/log_event.cc:
In the place where we check if server_version indicates that master is
the alcatel branch, we now check all currently possible alcatel versions,
not just a subset. Added comment to explain which clones are affected.
mysql-test/include/show_binlog_events.inc:
Replacing file_id=N with file_id=# to avoid result mismatches
mysql-test/suite/binlog/r/binlog_killed_simulate.result:
Result change
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
Result change
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
Result change
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
Result change
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test:
Binlog positions differ between mixed and statement based replication.
mysql-test/suite/rpl/r/rpl_stm_log.result:
Result change
mysql-test/r/lock_multi.result:
Update test case result.
mysql-test/t/lock_multi.test:
Don't print the value of Table_lock_waited, check the
precedence instead. Unlock the table before dropping.
into stella.local:/home2/mydev/mysql-5.1-axmrg
sql/sql_parse.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/table.cc:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
storage/myisam/mi_open.c:
Auto merged
Here is the scenario that causes the failure.(by Mats)
1. The to-be corrupt log event (let's call it X), is split into two
packets B and C on the network level (net_write_buff()). The parts
are X = (x',x''). The part x' ends up in packet B and part x''
ends up in packet C. Prior to the corrupt event X, the event Y has
been written successfully, but has been split into two packets as
well, which we call (y',y'').
2. The master sends packet A = (y'',x') to the slave, increases the
packet sequence number, the slave receives the packet, but fails
to reply before the master gets a timeout.
3. Since the master got a timeout, it reports failure, and aborts
sending the binary log by exiting mysql_binlog_send(). However, it
leaves the buffer intact, still holding y'' (but not x', since the
write_pos is not increased).
4. After exiting mysql_binlog_send(), the master does a
disconnection of the client thread, which involves sending an
error message e to the client (i.e., the slave).
5. In this case, net_write_buff() is used again, but this time the
old contents of the packet is used so that the new packet is
D = (y'',e). Note that this will use a new packet sequence number,
since the packet number was increased in step 2.
6. The slave receives the tail y'' of the Y log event, concatenates
this with x' (which it already received), and writes the event
(x',y'') it to the relay log since it hasn't noticed anything is
amiss.
7. It then tries to read more bytes, which is either e (if the length
given for X just happened to match the length given for Y, or just
plain garbage because the slave is out of sync with what is
actually sent.
8. After a while, the SQL thread tries to execute the event (x',y''),
which is very likely to be just nonsense.
The problem can be fixed by not resetting net->error after the call of
mysql_binlog_send, so the error message will not be sent and the connection
will be closed.
sql/sql_parse.cc:
Do not reset net->error, if net->error == 2, we should not try to use the connection again
mysql-test/r/partition.result:
New test case to validate that '/' is no longer allowed,
only integer division is allowed
mysql-test/t/partition.test:
New test case to validate that '/' is no longer allowed,
only integer division is allowed
sql/item_func.h:
+,-,*, mod is allowed
/ is disallowed
mysql-test/r/partition_range.result:
Added new test cases
mysql-test/t/partition_range.test:
Added new test cases
sql/sql_partition.cc:
Added check that last partition hasn't got maxvalue defined when
executing ADD PARTITION
mysql-test/r/partition_range.result:
Added new test cases for lock tables and ALTER TABLE for
partitions, also added a test case with a trigger.
mysql-test/t/partition_range.test:
Added new test cases for lock tables and ALTER TABLE for
partitions, also added a test case with a trigger.
sql/mysql_priv.h:
Added WFRM_KEEP_SHARE for use of code not to be used otherwise
sql/sql_partition.cc:
Removed get_name_lock and release_name_lock, use
close_data_files_and_morph_locks which leaves an
exclusive name lock after completing.
Reopen table after completing if under lock tables
Updated comments
sql/sql_table.cc:
Ensure that code to set partition syntax isn't used other than
when specifically asked to do it.
The problem is that the Table_locks_waited was incremented only
when the lock request succeed. If a thread waiting for the lock
gets killed or the lock request is aborted, the variable would
not be incremented, leading to inaccurate values in the variable.
The solution is to increment the Table_locks_waited whenever the
lock request is queued. This reflects better the intended behavior
of the variable -- show how many times a lock was waited.
mysql-test/r/lock_multi.result:
Add test case result for Bug#30331
mysql-test/t/lock_multi.test:
Add test case for Bug#30331
mysys/thr_lock.c:
Increment locks_waited whenever the thread is supposed
to wait for the lock.