Below is the list of changes that have just been committed into a
4.0 repository of sasha. When sasha does a push, they will be propogated to
the main repository and within 24 hours after the push to the public repository.
For information on how to access the public repository
see http://www.mysql.com/doc/I/n/Installing_source_tree.html
ChangeSet@stripped, 2002-03-15 18:44:44-07:00, sasha@stripped
replication updates and bugfixes. Still not perfect - there is some strange
memory corruption I can only repeat on one system.
mysql-test/r/multi_update.result
1.7 02/03/15 18:44:43 sasha@stripped +27 -0
extended test trying to find why the old one was failing
mysql-test/r/rpl000015.result
1.18 02/03/15 18:44:43 sasha@stripped +3 -3
result update
mysql-test/t/multi_update.test
1.9 02/03/15 18:44:43 sasha@stripped +11 -0
updated test to do more intermediate result checks
mysql-test/t/rpl000014.test
1.16 02/03/15 18:44:43 sasha@stripped +1 -0
cosmetic change
mysql-test/t/rpl000015-slave-master-info.opt
1.3 02/03/15 18:44:43 sasha@stripped +1 -1
reduce connect retry trying to simulate a bug
mysql-test/t/rpl000015.test
1.20 02/03/15 18:44:43 sasha@stripped +1 -0
cosmetic change
sql/lex.h
1.68 02/03/15 18:44:43 sasha@stripped +2 -0
added RELAY_LOG_FILE and RELAY_LOG_POS to CHANGE MASTER TO
sql/log.cc
1.78 02/03/15 18:44:43 sasha@stripped +1 -0
fixed replication bug
sql/log_event.cc
1.76 02/03/15 18:44:43 sasha@stripped +2 -1
properly ignore replication errors according to error mask
sql/mysqld.cc
1.285 02/03/15 18:44:43 sasha@stripped +1 -0
handle SIGFPE in the coredump handler
sql/slave.cc
1.161 02/03/15 18:44:43 sasha@stripped +9 -1
do not kick slave if it has already exited and freed the structures
sql/sql_lex.cc
1.32 02/03/15 18:44:43 sasha@stripped +1 -0
fixed initialization bug in CHANGE MASTER TO
sql/sql_lex.h
1.66 02/03/15 18:44:43 sasha@stripped +2 -0
CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS=
sql/sql_repl.cc
1.73 02/03/15 18:44:43 sasha@stripped +39 -8
CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS=
sql/sql_yacc.yy
1.150 02/03/15 18:44:43 sasha@stripped +16 -0
CHANGE MASTER TO .. RELAY_LOG_FILE=,RELAY_LOG_POS=
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: sasha
# Host: mysql.sashanet.com
# Root: /reiser-data/mysql-4.0
--- 1.67/sql/lex.h Sat Mar 9 21:48:05 2002
+++ 1.68/sql/lex.h Fri Mar 15 18:44:43 2002
@@ -280,6 +280,8 @@
{ "READ", SYM(READ_SYM),0,0},
{ "REAL", SYM(REAL),0,0},
{ "REFERENCES", SYM(REFERENCES),0,0},
+ { "RELAY_LOG_FILE", SYM(RELAY_LOG_FILE_SYM),0,0},
+ { "RELAY_LOG_POS", SYM(RELAY_LOG_POS_SYM),0,0},
{ "RELOAD", SYM(RELOAD),0,0},
{ "REGEXP", SYM(REGEXP),0,0},
{ "RENAME", SYM(RENAME),0,0},
--- 1.77/sql/log.cc Fri Mar 1 17:12:14 2002
+++ 1.78/sql/log.cc Fri Mar 15 18:44:43 2002
@@ -479,6 +479,7 @@
rli->relay_log_pos = 4;
strnmov(rli->relay_log_name,rli->linfo.log_file_name,
sizeof(rli->relay_log_name));
+ flush_relay_log_info(rli);
}
/*
No need to free io_buf because we allocated both fname and io_buf in
--- 1.75/sql/log_event.cc Thu Feb 7 15:29:44 2002
+++ 1.76/sql/log_event.cc Fri Mar 15 18:44:43 2002
@@ -1607,7 +1607,8 @@
{
mysql_parse(thd, thd->query, q_len);
if (expected_error !=
- (actual_error = thd->net.last_errno) && expected_error)
+ (actual_error = thd->net.last_errno) && expected_error &&
+ !ignored_error_code(actual_error))
{
const char* errmsg = "Slave: did not get the expected error\
running query from master - expected: '%s' (%d), got '%s' (%d)";
--- 1.284/sql/mysqld.cc Sat Mar 9 05:07:27 2002
+++ 1.285/sql/mysqld.cc Fri Mar 15 18:44:43 2002
@@ -1377,6 +1377,7 @@
sigaction(SIGBUS, &sa, NULL);
#endif
sigaction(SIGILL, &sa, NULL);
+ sigaction(SIGFPE, &sa, NULL);
}
(void) sigemptyset(&set);
#ifdef THREAD_SPECIFIC_SIGPIPE
--- 1.160/sql/slave.cc Sat Mar 9 13:50:06 2002
+++ 1.161/sql/slave.cc Fri Mar 15 18:44:43 2002
@@ -345,7 +345,13 @@
}
}
DBUG_ASSERT(thd != 0);
- KICK_SLAVE(thd);
+ /* is is criticate to test if the slave is running. Otherwise, we might
+ be referening freed memory trying to kick it
+ */
+ if (*slave_running)
+ {
+ KICK_SLAVE(thd);
+ }
while (*slave_running)
{
/* there is a small chance that slave thread might miss the first
@@ -367,7 +373,9 @@
DBUG_ASSERT_LOCK(cond_lock);
pthread_cond_timedwait(term_cond, cond_lock, &abstime);
if (*slave_running)
+ {
KICK_SLAVE(thd);
+ }
}
if (term_lock)
pthread_mutex_unlock(term_lock);
--- 1.31/sql/sql_lex.cc Sat Mar 9 21:48:05 2002
+++ 1.32/sql/sql_lex.cc Fri Mar 15 18:44:43 2002
@@ -151,6 +151,7 @@
lex->yacc_yyss=lex->yacc_yyvs=0;
lex->ignore_space=test(thd->sql_mode & MODE_IGNORE_SPACE);
lex->slave_thd_opt=0;
+ bzero(&lex->mi,sizeof(lex->mi));
return lex;
}
--- 1.65/sql/sql_lex.h Sat Mar 9 21:48:05 2002
+++ 1.66/sql/sql_lex.h Fri Mar 15 18:44:43 2002
@@ -98,6 +98,8 @@
uint port, connect_retry;
ulonglong pos;
ulong server_id;
+ char* relay_log_name;
+ ulong relay_log_pos;
} LEX_MASTER_INFO;
--- 1.149/sql/sql_yacc.yy Sat Mar 9 21:48:05 2002
+++ 1.150/sql/sql_yacc.yy Fri Mar 15 18:44:43 2002
@@ -241,6 +241,8 @@
%token MASTER_PORT_SYM
%token MASTER_CONNECT_RETRY_SYM
%token MASTER_SERVER_ID_SYM
+%token RELAY_LOG_FILE_SYM
+%token RELAY_LOG_POS_SYM
%token MATCH
%token MAX_ROWS
%token MAX_QUERIES_PER_HOUR
@@ -700,6 +702,16 @@
{
Lex->mi.connect_retry = $3;
}
+ |
+ RELAY_LOG_FILE_SYM EQ TEXT_STRING
+ {
+ Lex->mi.relay_log_name = $3.str;
+ }
+ |
+ RELAY_LOG_POS_SYM EQ ULONG_NUM
+ {
+ Lex->mi.relay_log_pos = $3;
+ }
/* create a table */
@@ -3002,6 +3014,7 @@
| ISSUER_SYM {}
| INNOBASE_SYM {}
| INSERT_METHOD {}
+ | IO_THREAD {}
| LAST_SYM {}
| LEVEL_SYM {}
| LOCAL_SYM {}
@@ -3044,6 +3057,8 @@
| RAID_CHUNKSIZE {}
| RAID_STRIPED_SYM {}
| RAID_TYPE {}
+ | RELAY_LOG_FILE_SYM {}
+ | RELAY_LOG_POS_SYM {}
| RELOAD {}
| REPAIR {}
| REPEATABLE_SYM {}
@@ -3063,6 +3078,7 @@
| SQL_CACHE_SYM {}
| SQL_NO_CACHE_SYM {}
| SQL_QUERY_CACHE_TYPE_SYM {}
+ | SQL_THREAD {}
| START_SYM {}
| STATUS_SYM {}
| STOP_SYM {}
--- 1.6/mysql-test/r/multi_update.result Wed Dec 26 07:49:08 2001
+++ 1.7/mysql-test/r/multi_update.result Fri Mar 15 18:44:43 2002
@@ -2,7 +2,34 @@
create table t1(id1 int not null auto_increment primary key, t char(12));
create table t2(id2 int not null, t char(12));
create table t3(id3 int not null, t char(12), index(id3));
+select count(*) from t1 where id1 > 95;
+count(*)
+5
+select count(*) from t2 where id2 > 95;
+count(*)
+25
+select count(*) from t3 where id3 > 95;
+count(*)
+250
update t1,t2,t3 set t1.t="aaa", t2.t="bbb", t3.t="cc" where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 90;
+select count(*) from t1 where t = "aaa";
+count(*)
+10
+select count(*) from t1 where id1 > 90;
+count(*)
+10
+select count(*) from t2 where t = "bbb";
+count(*)
+10
+select count(*) from t2 where id2 > 90;
+count(*)
+50
+select count(*) from t3 where t = "cc";
+count(*)
+500
+select count(*) from t3 where id3 > 90;
+count(*)
+500
delete t1.*, t2.*, t3.* from t1,t2,t3 where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 95;
check table t1, t2, t3;
Table Op Msg_type Msg_text
--- 1.17/mysql-test/r/rpl000015.result Sat Jan 26 22:26:22 2002
+++ 1.18/mysql-test/r/rpl000015.result Fri Mar 15 18:44:43 2002
@@ -9,16 +9,16 @@
change master to master_host='127.0.0.1';
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos
-127.0.0.1 test MASTER_PORT 60 4 slave-relay-bin.001 4 No No 0 0 0
+127.0.0.1 test MASTER_PORT 7 4 slave-relay-bin.001 4 No No 0 0 0
change master to master_host='127.0.0.1',master_user='root',
master_password='',master_port=MASTER_PORT;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos
-127.0.0.1 root MASTER_PORT 60 4 slave-relay-bin.001 4 No No 0 0 0
+127.0.0.1 root MASTER_PORT 7 4 slave-relay-bin.001 4 No No 0 0 0
slave start;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos
-127.0.0.1 root MASTER_PORT 60 master-bin.001 79 slave-relay-bin.001 120 master-bin.001 Yes Yes 0 0 79
+127.0.0.1 root MASTER_PORT 7 master-bin.001 79 slave-relay-bin.001 120 master-bin.001 Yes Yes 0 0 79
drop table if exists t1;
create table t1 (n int);
insert into t1 values (10),(45),(90);
--- 1.8/mysql-test/t/multi_update.test Wed Dec 26 07:49:08 2001
+++ 1.9/mysql-test/t/multi_update.test Fri Mar 15 18:44:43 2002
@@ -29,7 +29,18 @@
dec $1;
}
enable_query_log;
+
+select count(*) from t1 where id1 > 95;
+select count(*) from t2 where id2 > 95;
+select count(*) from t3 where id3 > 95;
+
update t1,t2,t3 set t1.t="aaa", t2.t="bbb", t3.t="cc" where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 90;
+select count(*) from t1 where t = "aaa";
+select count(*) from t1 where id1 > 90;
+select count(*) from t2 where t = "bbb";
+select count(*) from t2 where id2 > 90;
+select count(*) from t3 where t = "cc";
+select count(*) from t3 where id3 > 90;
delete t1.*, t2.*, t3.* from t1,t2,t3 where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 95;
check table t1, t2, t3;
--- 1.15/mysql-test/t/rpl000014.test Fri Dec 14 19:41:20 2001
+++ 1.16/mysql-test/t/rpl000014.test Fri Mar 15 18:44:43 2002
@@ -8,6 +8,7 @@
show slave status;
change master to master_log_pos=73;
slave stop;
+
change master to master_log_pos=73;
--replace_result 3306 MASTER_PORT 9306 MASTER_PORT 3334 MASTER_PORT 3336 MASTER_PORT
show slave status;
--- 1.2/mysql-test/t/rpl000015-slave-master-info.opt Wed Oct 10 18:59:42 2001
+++ 1.3/mysql-test/t/rpl000015-slave-master-info.opt Fri Mar 15 18:44:43 2002
@@ -1 +1 @@
---server-id=2
+--server-id=22 --master-connect-retry=7
--- 1.19/mysql-test/t/rpl000015.test Fri Dec 14 19:41:20 2001
+++ 1.20/mysql-test/t/rpl000015.test Fri Mar 15 18:44:43 2002
@@ -8,6 +8,7 @@
reset slave;
--replace_result $MASTER_MYPORT MASTER_PORT
show slave status;
+
change master to master_host='127.0.0.1';
# The following needs to be cleaned up when change master is fixed
--replace_result $MASTER_MYPORT MASTER_PORT 3306 MASTER_PORT 3334 MASTER_PORT
--- 1.72/sql/sql_repl.cc Sat Mar 9 21:48:05 2002
+++ 1.73/sql/sql_repl.cc Fri Mar 15 18:44:43 2002
@@ -690,6 +690,7 @@
{
int error=0,restart_thread_mask;
const char* errmsg=0;
+ bool need_relay_log_purge=1;
// kill slave thread
lock_slave_threads(mi);
@@ -742,17 +743,47 @@
if (lex_mi->connect_retry)
mi->connect_retry = lex_mi->connect_retry;
+ if (lex_mi->relay_log_name)
+ {
+ need_relay_log_purge = 0;
+ strnmov(mi->rli.relay_log_name,lex_mi->relay_log_name,
+ sizeof(mi->rli.relay_log_name));
+ }
+
+ if (lex_mi->relay_log_pos)
+ {
+ need_relay_log_purge=0;
+ mi->rli.relay_log_pos=lex_mi->relay_log_pos;
+ }
+
flush_master_info(mi);
- pthread_mutex_unlock(&mi->data_lock);
- thd->proc_info="purging old relay logs";
- if (purge_relay_logs(&mi->rli,0 /* not only reset, but also reinit*/,
- &errmsg))
+ if (need_relay_log_purge)
{
- send_error(&thd->net, 0, "Failed purging old relay logs");
- unlock_slave_threads(mi);
- return 1;
+ pthread_mutex_unlock(&mi->data_lock);
+ thd->proc_info="purging old relay logs";
+ if (purge_relay_logs(&mi->rli,0 /* not only reset, but also reinit*/,
+ &errmsg))
+ {
+ send_error(&thd->net, 0, "Failed purging old relay logs");
+ unlock_slave_threads(mi);
+ return 1;
+ }
+ pthread_mutex_lock(&mi->rli.data_lock);
+ }
+ else
+ {
+ const char* msg;
+ if (init_relay_log_pos(&mi->rli,0/*log already inited*/,
+ 0 /*pos already inited*/,
+ 0 /*no data lock*/,
+ &msg))
+ {
+ net_printf(&thd->net,0,"Failed initializing relay log position: %s",msg);
+ unlock_slave_threads(mi);
+ return 1;
+ }
+
}
- pthread_mutex_lock(&mi->rli.data_lock);
mi->rli.master_log_pos = mi->master_log_pos;
strnmov(mi->rli.master_log_name,mi->master_log_name,
sizeof(mi->rli.master_log_name));
| Thread |
|---|
| • bk commit into 4.0 tree | sasha | 16 Mar |