List:Internals« Previous MessageNext Message »
From:sasha Date:March 16 2002 1:44am
Subject:bk commit into 4.0 tree
View as plain text  
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 treesasha16 Mar