summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2002-01-31 11:04:49 -0700
committerunknown <sasha@mysql.sashanet.com>2002-01-31 11:04:49 -0700
commit8612588aeb74cc1a3252206da9c14cd83f392b4e (patch)
treebd625aaa09009624436017b04d9f7584655ced93
parentf5a75e7965c781389128b3163e1c37c6f5fc71bd (diff)
parent1d76e90c1b61981e284bd583e54345cce9fe3551 (diff)
downloadmariadb-git-8612588aeb74cc1a3252206da9c14cd83f392b4e.tar.gz
Merge work:/home/bk/mysql-4.0
into mysql.sashanet.com:/reiser-data/mysql-4.0 sql/item_func.cc: Auto merged sql/slave.cc: Auto merged
-rw-r--r--include/my_global.h10
-rw-r--r--mysql-test/t/rpl000001.test23
-rw-r--r--mysys/mf_iocache.c1
-rw-r--r--mysys/mf_iocache2.c10
-rw-r--r--sql/item_func.cc3
-rw-r--r--sql/slave.cc2
6 files changed, 43 insertions, 6 deletions
diff --git a/include/my_global.h b/include/my_global.h
index a5fe99d5271..6a7385e18a2 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -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
diff --git a/mysql-test/t/rpl000001.test b/mysql-test/t/rpl000001.test
index 57b81cb9e33..597b1c69b1e 100644
--- a/mysql-test/t/rpl000001.test
+++ b/mysql-test/t/rpl000001.test
@@ -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);
@@ -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
diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c
index 6095cc23716..872757f77c5 100644
--- a/mysys/mf_iocache.c
+++ b/mysys/mf_iocache.c
@@ -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:
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index a343829d32e..00ebf1e6846 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -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.
@@ -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);
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 5dcc638235f..1818a755a43 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -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);
diff --git a/sql/slave.cc b/sql/slave.cc
index f9dbf4641e6..8884e5de778 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -2010,7 +2010,7 @@ static int queue_old_event(MASTER_INFO *mi, const char *buf,
mi->master_log_pos += event_len;
if (unlikely(processed_stop_event))
mi->ignore_stop_event=1;
- pthread_mutex_lock(&mi->data_lock);
+ pthread_mutex_unlock(&mi->data_lock);
return 0;
}