mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge work:/home/bk/mysql-4.0
into mysql.sashanet.com:/reiser-data/mysql-4.0
This commit is contained in:
@ -51,6 +51,16 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif /* _WIN32... */
|
#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
|
The macros below are borrowed from include/linux/compiler.h in the
|
||||||
Linux kernel. Use them to indicate the likelyhood of the truthfulness
|
Linux kernel. Use them to indicate the likelyhood of the truthfulness
|
||||||
|
@ -27,21 +27,38 @@ sync_with_master;
|
|||||||
connection master;
|
connection master;
|
||||||
reset master;
|
reset master;
|
||||||
connection slave;
|
connection slave;
|
||||||
|
slave stop;
|
||||||
reset slave;
|
reset slave;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
drop table if exists t1,t2;
|
drop table if exists t1,t2;
|
||||||
create table t1(n int);
|
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)
|
while ($1)
|
||||||
{
|
{
|
||||||
eval insert into t1 values($1);
|
eval insert into t1 values($1+get_lock("hold_slave",10)*0);
|
||||||
dec $1;
|
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);
|
create table t2(id int);
|
||||||
insert into t2 values(connection_id());
|
insert into t2 values(connection_id());
|
||||||
save_master_pos;
|
save_master_pos;
|
||||||
|
|
||||||
|
|
||||||
connection master1;
|
connection master1;
|
||||||
#avoid generating result
|
#avoid generating result
|
||||||
create temporary table t1_temp(n int);
|
create temporary table t1_temp(n int);
|
||||||
@ -60,7 +77,7 @@ reap;
|
|||||||
connection slave;
|
connection slave;
|
||||||
sync_with_master ;
|
sync_with_master ;
|
||||||
#give the slave a chance to exit
|
#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
|
# The following test can't be done because the result of Pos will differ
|
||||||
# on different computers
|
# on different computers
|
||||||
|
@ -823,6 +823,7 @@ int my_b_append(register IO_CACHE *info, const byte *Buffer, uint Count)
|
|||||||
}
|
}
|
||||||
Count-=length;
|
Count-=length;
|
||||||
Buffer+=length;
|
Buffer+=length;
|
||||||
|
info->end_of_file+=length;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
@ -27,7 +27,10 @@
|
|||||||
|
|
||||||
my_off_t my_b_append_tell(IO_CACHE* info)
|
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()
|
/* 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
|
from messing with the variables that we need in order to provide the
|
||||||
answer to the question.
|
answer to the question.
|
||||||
@ -35,8 +38,11 @@ my_off_t my_b_append_tell(IO_CACHE* info)
|
|||||||
#ifdef THREAD
|
#ifdef THREAD
|
||||||
pthread_mutex_lock(&info->append_buffer_lock);
|
pthread_mutex_lock(&info->append_buffer_lock);
|
||||||
#endif
|
#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)
|
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);
|
res = info->end_of_file + (info->write_pos-info->append_read_pos);
|
||||||
#ifdef THREAD
|
#ifdef THREAD
|
||||||
pthread_mutex_unlock(&info->append_buffer_lock);
|
pthread_mutex_unlock(&info->append_buffer_lock);
|
||||||
|
@ -1433,16 +1433,19 @@ void item_user_lock_release(ULL *ull)
|
|||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
THD *thd = current_thd;
|
THD *thd = current_thd;
|
||||||
|
uint save_query_length;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
String tmp(buf,sizeof(buf));
|
String tmp(buf,sizeof(buf));
|
||||||
tmp.length(0);
|
tmp.length(0);
|
||||||
tmp.append("DO RELEASE_LOCK(\"");
|
tmp.append("DO RELEASE_LOCK(\"");
|
||||||
tmp.append(ull->key,ull->key_length);
|
tmp.append(ull->key,ull->key_length);
|
||||||
tmp.append("\")");
|
tmp.append("\")");
|
||||||
|
save_query_length=thd->query_length;
|
||||||
thd->query_length=tmp.length();
|
thd->query_length=tmp.length();
|
||||||
Query_log_event qev(thd,tmp.ptr());
|
Query_log_event qev(thd,tmp.ptr());
|
||||||
qev.error_code=0; // this query is always safe to run on slave
|
qev.error_code=0; // this query is always safe to run on slave
|
||||||
mysql_bin_log.write(&qev);
|
mysql_bin_log.write(&qev);
|
||||||
|
thd->query_length=save_query_length;
|
||||||
}
|
}
|
||||||
if (--ull->count)
|
if (--ull->count)
|
||||||
pthread_cond_signal(&ull->cond);
|
pthread_cond_signal(&ull->cond);
|
||||||
|
@ -2010,7 +2010,7 @@ static int queue_old_event(MASTER_INFO *mi, const char *buf,
|
|||||||
mi->master_log_pos += event_len;
|
mi->master_log_pos += event_len;
|
||||||
if (unlikely(processed_stop_event))
|
if (unlikely(processed_stop_event))
|
||||||
mi->ignore_stop_event=1;
|
mi->ignore_stop_event=1;
|
||||||
pthread_mutex_lock(&mi->data_lock);
|
pthread_mutex_unlock(&mi->data_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user