Loading include/my_global.h +10 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,16 @@ #endif #endif /* _WIN32... */ /* sometimes we want to make sure that the variable is not put into a register in debugging mode so we can see its value in the core */ #ifndef DBUG_OFF #define dbug_volatile volatile #else #define dbug_volatile #endif /* The macros below are borrowed from include/linux/compiler.h in the Linux kernel. Use them to indicate the likelyhood of the truthfulness Loading mysql-test/t/rpl000001.test +20 −3 Original line number Diff line number Diff line Loading @@ -27,21 +27,38 @@ sync_with_master; connection master; reset master; connection slave; slave stop; reset slave; connection master; drop table if exists t1,t2; create table t1(n int); let $1=10; #we want the log to exceed 16K to test deal with the log that is bigger than #IO_SIZE let $1=5000; disable_query_log; while ($1) { eval insert into t1 values($1); eval insert into t1 values($1+get_lock("hold_slave",10)*0); dec $1; } enable_query_log; #try to cause a large relay log lag on the slave connection slave; select get_lock("hold_slave",10); slave start; #hope this is long enough for I/O thread to fetch over 16K relay log data sleep 1; select release_lock("hold_slave"); unlock tables; connection master; create table t2(id int); insert into t2 values(connection_id()); save_master_pos; connection master1; #avoid generating result create temporary table t1_temp(n int); Loading @@ -60,7 +77,7 @@ reap; connection slave; sync_with_master ; #give the slave a chance to exit sleep 0.5; wait_for_slave_to_stop; # The following test can't be done because the result of Pos will differ # on different computers Loading mysys/mf_iocache.c +1 −0 Original line number Diff line number Diff line Loading @@ -823,6 +823,7 @@ int my_b_append(register IO_CACHE *info, const byte *Buffer, uint Count) } Count-=length; Buffer+=length; info->end_of_file+=length; } end: Loading mysys/mf_iocache2.c +8 −2 Original line number Diff line number Diff line Loading @@ -27,7 +27,10 @@ my_off_t my_b_append_tell(IO_CACHE* info) { my_off_t res; /* prevent optimizer from putting res in a register when debugging we need this to be able to see the value of res when the assert fails */ dbug_volatile my_off_t res; /* we need to lock the append buffer mutex to keep flush_io_cache() from messing with the variables that we need in order to provide the answer to the question. Loading @@ -35,8 +38,11 @@ my_off_t my_b_append_tell(IO_CACHE* info) #ifdef THREAD pthread_mutex_lock(&info->append_buffer_lock); #endif /* save the value of my_tell in res so we can see it when studying coredump */ DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) == my_tell(info->file,MYF(0))); == (res=my_tell(info->file,MYF(0)))); res = info->end_of_file + (info->write_pos-info->append_read_pos); #ifdef THREAD pthread_mutex_unlock(&info->append_buffer_lock); Loading sql/item_func.cc +3 −0 Original line number Diff line number Diff line Loading @@ -1433,16 +1433,19 @@ void item_user_lock_release(ULL *ull) if (mysql_bin_log.is_open()) { THD *thd = current_thd; uint save_query_length; char buf[256]; String tmp(buf,sizeof(buf)); tmp.length(0); tmp.append("DO RELEASE_LOCK(\""); tmp.append(ull->key,ull->key_length); tmp.append("\")"); save_query_length=thd->query_length; thd->query_length=tmp.length(); Query_log_event qev(thd,tmp.ptr()); qev.error_code=0; // this query is always safe to run on slave mysql_bin_log.write(&qev); thd->query_length=save_query_length; } if (--ull->count) pthread_cond_signal(&ull->cond); Loading Loading
include/my_global.h +10 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,16 @@ #endif #endif /* _WIN32... */ /* sometimes we want to make sure that the variable is not put into a register in debugging mode so we can see its value in the core */ #ifndef DBUG_OFF #define dbug_volatile volatile #else #define dbug_volatile #endif /* The macros below are borrowed from include/linux/compiler.h in the Linux kernel. Use them to indicate the likelyhood of the truthfulness Loading
mysql-test/t/rpl000001.test +20 −3 Original line number Diff line number Diff line Loading @@ -27,21 +27,38 @@ sync_with_master; connection master; reset master; connection slave; slave stop; reset slave; connection master; drop table if exists t1,t2; create table t1(n int); let $1=10; #we want the log to exceed 16K to test deal with the log that is bigger than #IO_SIZE let $1=5000; disable_query_log; while ($1) { eval insert into t1 values($1); eval insert into t1 values($1+get_lock("hold_slave",10)*0); dec $1; } enable_query_log; #try to cause a large relay log lag on the slave connection slave; select get_lock("hold_slave",10); slave start; #hope this is long enough for I/O thread to fetch over 16K relay log data sleep 1; select release_lock("hold_slave"); unlock tables; connection master; create table t2(id int); insert into t2 values(connection_id()); save_master_pos; connection master1; #avoid generating result create temporary table t1_temp(n int); Loading @@ -60,7 +77,7 @@ reap; connection slave; sync_with_master ; #give the slave a chance to exit sleep 0.5; wait_for_slave_to_stop; # The following test can't be done because the result of Pos will differ # on different computers Loading
mysys/mf_iocache.c +1 −0 Original line number Diff line number Diff line Loading @@ -823,6 +823,7 @@ int my_b_append(register IO_CACHE *info, const byte *Buffer, uint Count) } Count-=length; Buffer+=length; info->end_of_file+=length; } end: Loading
mysys/mf_iocache2.c +8 −2 Original line number Diff line number Diff line Loading @@ -27,7 +27,10 @@ my_off_t my_b_append_tell(IO_CACHE* info) { my_off_t res; /* prevent optimizer from putting res in a register when debugging we need this to be able to see the value of res when the assert fails */ dbug_volatile my_off_t res; /* we need to lock the append buffer mutex to keep flush_io_cache() from messing with the variables that we need in order to provide the answer to the question. Loading @@ -35,8 +38,11 @@ my_off_t my_b_append_tell(IO_CACHE* info) #ifdef THREAD pthread_mutex_lock(&info->append_buffer_lock); #endif /* save the value of my_tell in res so we can see it when studying coredump */ DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) == my_tell(info->file,MYF(0))); == (res=my_tell(info->file,MYF(0)))); res = info->end_of_file + (info->write_pos-info->append_read_pos); #ifdef THREAD pthread_mutex_unlock(&info->append_buffer_lock); Loading
sql/item_func.cc +3 −0 Original line number Diff line number Diff line Loading @@ -1433,16 +1433,19 @@ void item_user_lock_release(ULL *ull) if (mysql_bin_log.is_open()) { THD *thd = current_thd; uint save_query_length; char buf[256]; String tmp(buf,sizeof(buf)); tmp.length(0); tmp.append("DO RELEASE_LOCK(\""); tmp.append(ull->key,ull->key_length); tmp.append("\")"); save_query_length=thd->query_length; thd->query_length=tmp.length(); Query_log_event qev(thd,tmp.ptr()); qev.error_code=0; // this query is always safe to run on slave mysql_bin_log.write(&qev); thd->query_length=save_query_length; } if (--ull->count) pthread_cond_signal(&ull->cond); Loading