The test uses show binlog event which is not deterministic due to the single insert delayed
query can generate up to number of inserted rows row-events pair (table_map + Write_row)
The solution is to leave the current binlogging behaviour as it is and change
the test as spliting arguments of insert delayed query. Note, that such fix was applied
earlier for binlog_insert_delayed.test :
https://intranet.mysql.com/secure/apps/irclog.php?channel=22&start_time=2006-09-27
There are no tests with insert delayed and show binlog events combination requiring
this fix.
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test:
splitting insert delayed per rows
This patch is an additional code change to the get_str_len_and_pointer
method in log_events.cc. This change is necessary to correct a problem
encountered on 64-bit SUSE where the auto_increment_* variables were
being overwritten. The change corrects a cast mismatch which caused
the problem.
sql/log_event.cc:
BUG#22645 - LC_TIME_NAMES: Statement not replicated
This patch is an additional code change to the get_str_len_and_pointer,
copy_str_and_move methods and the Query_leg_event constructor to
correct a type mismatch encountered during testing on SUSE 64-bit. The patch changes
the data type of the buffer variables was changed to a new typedef
defined in the Log_event class. The new type is:
typedef unsigned char Byte;
The variables changed include:
pos, start, end, and data_buf
sql/log_event.h:
This patch adds a new type definition to the Log_event class. The new
type is typedef unsigned char Byte. It is used in place of the uchar
and usigned char definitions in the Query_log_event constructor to
eliminate type conversion problems encountere on SUSE 64-bit.
correctly in some cases", from 5.0.
In short, calls to a stored function located in another database
than the default database, may fail to replicate if the call was made
by SET, SELECT, or DO.
sp_head.cc automerged, only the test and test's result had to be hand-merged.
mysql-test/r/rpl_sp.result:
manual merge of the result of the test for BUG#19725
mysql-test/r/rpl_switch_stm_row_mixed.result:
the bugfix changes results as expected
mysql-test/t/rpl_sp.test:
manual merge of the test for BUG#19725
into gbichot3.local:/home/mysql_src/mysql-5.1-rpl-19725
sql/sp_head.cc:
Auto merged
mysql-test/r/rpl_sp.result:
using 5.1's version, will merge by hand after running the new test
mysql-test/t/rpl_sp.test:
using 5.1's version, will re-insert the new test portion by hand
correctly in some cases".
In short, calls to a stored function located in another database
than the default database, may fail to replicate if the call was made
by SET, SELECT, or DO.
Longer: when a stored function is called from a statement which does not go
to binlog ("SET @a=somedb.myfunc()", "SELECT somedb.myfunc()",
"DO somedb.myfunc()"), this crafted statement is binlogged:
"SELECT myfunc();" (accompanied with a mention of the default database
if there is one). So, if "somedb" is not the default database,
the slave would fail to find myfunc(). The fix is to specify the
function's database name in the crafted binlogged statement, like this:
"SELECT somedb.myfunc();". Test added in rpl_sp.test.
mysql-test/r/rpl_sp.result:
Because I moved the SHOW BINLOG EVENTS down a bit, big portions of its
output move. Also, the function's database name appears in
SELECT statements.
mysql-test/t/rpl_sp.test:
Adding test for BUG#19725.
Moving the SHOW BINLOG EVENTS down, it is run at the very end to
test everything.
sql/sp_head.cc:
When binlogging a "SELECT myfunc()" (when a stored function is executed
inside a statement which does not go to the binlog (like a SET,
SELECT, DO), we need to write "SELECT db_of_myfunc().myfunc()",
because the function may be in a database which is not the default
database.
On loaded boxes it is possible a INSERT with sleep of 1.5s to take
more time.
mysql-test/r/events_logs_tests.result:
update result file
mysql-test/t/events_logs_tests.test:
fix test case to be proof of loaded boxes. 20 seconds is reasonable time
not to get a sleep of 1.5s to sleep for 20s
into romeo.(none):/home/bk/merge-b22864-myql-5.1-new-rpl
sql/log.h:
Auto merged
sql/log_event.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/log.cc:
Merge with mysql-5.1-new-rpl
sql/slave.cc:
Merge with mysql-5.1-new-rpl
sql/sql_insert.cc:
Merge with mysql-5.1-new-rpl
from log):
When row-based logging is used, the CREATE-SELECT is written as two
parts: as a CREATE TABLE statement and as the rows for the table. For
both transactional and non-transactional tables, the CREATE TABLE
statement was written to the transaction cache, as were the rows, and
on statement end, the entire transaction cache was written to the binary
log if the table was non-transactional. For transactional tables, the
events were kept in the transaction cache until end of transaction (or
statement that were not part of a transaction).
For the case when AUTOCOMMIT=0 and we are creating a transactional table
using a create select, we would then keep the CREATE TABLE statement and
the rows for the CREATE-SELECT, while executing the following statements.
On a rollback, the transaction cache would then be cleared, which would
also remove the CREATE TABLE statement. Hence no table would be created
on the slave, while there is an empty table on the master.
This relates to BUG#22865 where the table being created exists on the
master, but not on the slave during insertion of rows into the newly
created table. This occurs since the CREATE TABLE statement were still
in the transaction cache until the statement finished executing, and
possibly longer if the table was transactional.
This patch changes the behaviour of the CREATE-SELECT statement by
adding an implicit commit at the end of the statement when creating
non-temporary tables. Hence, non-temporary tables will be written to the
binary log on completion, and in the even of AUTOCOMMIT=0, a new
transaction will be started. Temporary tables do not commit an ongoing
transaction: neither as a pre- not a post-commit.
The events for both transactional and non-transactional tables are
saved in the transaction cache, and written to the binary log at end
of the statement.
mysql-test/r/rpl_row_create_table.result:
Result change
mysql-test/t/rpl_row_create_table.test:
Requring InnoDB for slave as well.
Adding test CREATE-SELECT that is rolled back explicitly.
Changing binlog positions.
sql/log.cc:
Adding helper class to handle lock/unlock of mutexes using RAII.
Factoring out code into write_cache() function to transaction cache
to binary log.
Adding function THD::binlog_flush_transaction_cache() to flush the
transaction cache to the binary log file.
Factoring out code into binlog_set_stmt_begin() to set the beginning
of statement savepoint.
Clearing before statement point when transaction cache is truncated
so that these points are out of range.
sql/log.h:
Adding method MYSQL_BIN_LOG::write_cache()
sql/log_event.h:
Replicating OPTION_NOT_AUTOCOMMIT flag (see changeset comment)
sql/mysql_priv.h:
Although left-shifting signed integer values is well-defined,
it has potential for strange errors. Using unsigned long long
instead of signed long long since this is the type of the options
flags.
sql/slave.cc:
Adding printout of transaction-critical thread flags.
sql/sql_class.h:
Adding function THD::binlog_flush_transaction_cache()
Adding function THD::binlog_set_stmt_begin()
sql/sql_insert.cc:
Adding code to cache events for a CREATE-SELECT statement.
Disabling binlog for SBR (but not RBR) when sending error for select part
of CREATE-SELECT statement.
Adding implicit commit at end of statement for non-temporary tables.
mysql-test/t/rpl_row_create_table-slave.opt:
New BitKeeper file ``mysql-test/t/rpl_row_create_table-slave.opt''
into mysql.com:/usr/home/bar/mysql-5.1.b22645
mysql-test/t/mysqlbinlog.test:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
mysql-test/t/disabled.def:
SCCS merged
into mysql.com:/usr/home/bar/mysql-5.0.b22645
mysql-test/t/disabled.def:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
mysql-test/r/mysqlbinlog.result:
After merge fix
mysql-test/t/mysqlbinlog.test:
After merge fix
Problem: mysqlbinlog_base64 failed sporadically.
Reason: Missing "flush logs" before running $MYSQL_BINLOG,
which could start dumping the log file before server
has finished writting into it.
Fix:
- implementing --force-if-open option to "mysqlbinlog"
- adding --disable-force-if-open to make $MYSQL_BINLOG
fail on non-closed log files, to garantee that nobody
will forget "flush logs" in the future.
- adding "flush logs" into all affected tests.
client/mysqlbinlog.cc:
Implementing --force-if-open option with TRUE by default
mysql-test/mysql-test-run.pl:
Using --disable-force-if-open for all tests to avoid
sporadic test failures because of running "mysqlbinlog"
on a non-flushed binlog files.
mysql-test/r/binlog_row_mix_innodb_myisam.result:
FLush log before running dumping.
mysql-test/r/binlog_stm_mix_innodb_myisam.result:
FLush log before running dumping.
mysql-test/r/mysqlbinlog.result:
FLush log before running dumping.
mysql-test/r/mysqlbinlog2.result:
FLush log before running dumping.
mysql-test/r/mysqlbinlog_base64.result:
FLush log before running dumping.
mysql-test/r/user_var-binlog.result:
FLush log before running dumping.
mysql-test/t/binlog_row_mix_innodb_myisam.test:
FLush log before running dumping.
mysql-test/t/binlog_stm_mix_innodb_myisam.test:
FLush log before running dumping.
mysql-test/t/mysqlbinlog.test:
FLush log before running dumping.
Adding new tests:
- checking that $MYSQL_BINLOG returns an error on a non-closed binlog
file because of --disable-force-if-open
- checking that it does not return an error with --force-if-open
mysql-test/t/mysqlbinlog2.test:
FLush log before running dumping.
mysql-test/t/mysqlbinlog_base64.test:
FLush log before running dumping.
mysql-test/t/user_var-binlog.test:
FLush log before running dumping.
into mysql.com:/home/bk/MERGE/mysql-5.1-merge
client/mysqlbinlog.cc:
Auto merged
client/mysqldump.c:
Auto merged
mysql-test/r/mysqldump.result:
Auto merged
mysql-test/r/rpl_timezone.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
mysql-test/t/mysqldump.test:
Auto merged
mysys/my_thr_init.c:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/set_var.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
include/my_pthread.h:
Manual merge
into mysql.com:/home/bk/MERGE/mysql-5.1-merge
client/mysqlbinlog.cc:
Auto merged
client/mysqldump.c:
Auto merged
config/ac-macros/ha_ndbcluster.m4:
Auto merged
configure.in:
Auto merged
include/my_global.h:
Auto merged
mysql-test/r/mysqldump.result:
Auto merged
mysql-test/r/rpl_timezone.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/handler.cc:
Auto merged
sql/item_create.cc:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log.h:
Auto merged
sql/log_event.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/rpl_injector.h:
Auto merged
sql/set_var.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
mysql-test/t/mysqldump.test:
Manual merge
sql/log_event.cc:
manual merge
into mysql.com:/home/bk/MERGE/mysql-5.0-merge
client/mysqldump.c:
Auto merged
include/my_pthread.h:
Auto merged
mysql-test/r/mysqldump.result:
Auto merged
mysql-test/r/rpl_timezone.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
mysql-test/t/mysqldump.test:
Auto merged
mysys/my_thr_init.c:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/set_var.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
into mysql.com:/usr/home/bar/mysql-5.1.b20396
mysql-test/r/rpl_do_grant.result:
Auto merged
mysql-test/t/rpl_do_grant.test:
Auto merged
sql/sql_acl.cc:
Auto merged
into quant.(none):/ext/mysql/bk/mysql-5.0-bug24507
client/mysqlbinlog.cc:
Auto merged
client/mysqldump.c:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_parse.cc:
Auto merged
The problem was located to lie inside current NPTL pthread_exit()
implementation. Race conditions in this code can lead to segmentation
fault. Hovewer, this can happen only in a race between first thread
calling pthread_exit() and other threads.
Workaround implemented in this patch spawns a dummy thread, which
exits immediately, during thread lib initialization. This will exclude
segment violations when further threads exit.
include/my_pthread.h:
define macro NPTL_PTHREAD_EXIT_BUG which controls whether workaround
in my_thread_global_init() is included or not.
mysys/my_thr_init.c:
Spawn a dummy thread in my_thread_global_init() to initialize pthread
lib internal variables.
client/mysqlbinlog.cc:
Auto merged
mysql-test/r/user_var-binlog.result:
Auto merged
mysql-test/t/mysqlbinlog.test:
Auto merged
BitKeeper/deleted/.del-ctype_ucs_binlog.result~280d136b1a0bcf17:
Auto merged
mysql-test/r/binlog_stm_mix_innodb_myisam.result:
Auto merged
mysql-test/r/rpl_stm_charset.result:
Auto merged
mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
after merge fix.
into suse.vabb.com:/home/Chuck/development/mysql-5.1_WL_3618
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/set_var.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/table.cc:
Auto merged
mysql-test/t/events_bugs.test:
let events_bugs not fail because of timing
sql/sql_table.cc:
if the db or name has been changed ALTER_RENAME,
then fix table_list
Solution by having the second table added in the parser to the
list of used tables, won't work because checking of rights of merge
tables goes over table_list->next_local and checks the rights, so
we will fail there.
sql/sql_yacc.yy:
fix name - prevents ddd from correct working
Implementing event based replication of LC_TIME_NAMES for 5.0
(as a replacement of previously made ONE_SHOT replication)
mysql-test/r/mysqlbinlog.result:
Fixing results
mysql-test/r/rpl_locale.result:
Fixing results
mysql-test/t/disabled.def:
Enabling rpl_locale
mysql-test/t/mysqlbinlog.test:
Check "mysqlbinlog | mysql" reproduces lc_time_names correctly.
mysql-test/t/rpl_locale.test:
Adding new test: that setting lc_time_names back to en_US works fine.
sql/log_event.cc:
Implementing event based replication of LC_TIME_NAMES for 5.0
(as a replacement of previously made ONE_SHOT replication)
sql/log_event.h:
Adding new Q_*_CODE
Adding "lc_time_names_number" members into Query_log_event and PRINT_EVENT_INFO
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-maint
client/mysqltest.c:
Auto merged
mysys/my_getopt.c:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
mysql-test/t/disabled.def:
Manual merge
Remove DBUG_ENTER in my_end
client/mysqltest.c:
Call 'mysql_server_end' as last function in 'free_used_memory'
Don't use DBUG_VOID_RETURN after mysql_server_end in free_used_memory
Only call mysql_server_end if mysql_server_init has been called