summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/t/rpl000001.test23
-rw-r--r--mysys/mf_iocache.c1
-rw-r--r--sql/slave.cc2
3 files changed, 22 insertions, 4 deletions
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/sql/slave.cc b/sql/slave.cc
index 59e07040528..41df1b28fc5 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -1999,7 +1999,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;
}