diff options
author | unknown <sasha@mysql.sashanet.com> | 2002-01-22 15:05:11 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2002-01-22 15:05:11 -0700 |
commit | 11f04648f2ff2deaa00fe85ea0317c2f3d6679a9 (patch) | |
tree | 18fac541370eed6d6619f07e64d288a8a6742b12 | |
parent | 1e0f2b7a4288b85d6b1d287056e2acfb3257f284 (diff) | |
download | mariadb-git-11f04648f2ff2deaa00fe85ea0317c2f3d6679a9.tar.gz |
post-merge fixes, including slave-skip-errors backport
fixed too quick timeout in mysql-test-run which caused a race with the
new server getting started before the old one completely finished
shutdown. This should fix the pid warning we've been getting as well as
inconsistent results when running tests with the manager
libmysqld/lib_sql.cc:
post-merge fix
mysql-test/mysql-test-run.sh:
fixed start/stop timeout and cleanup of log directory
mysql-test/r/rpl000014.result:
post-merge fix
mysql-test/r/rpl000015.result:
post-merge fix
mysql-test/r/rpl000016.result:
post-merge fix
mysql-test/r/rpl_log.result:
post-merge fix
sql/log_event.cc:
post-merge fix
sql/slave.cc:
post-merge fix
sql/slave.h:
post-merge fix
sql/sql_class.h:
post-merge fix
tools/mysqlmanager.c:
added debug message
-rw-r--r-- | libmysqld/lib_sql.cc | 8 | ||||
-rw-r--r-- | mysql-test/mysql-test-run.sh | 10 | ||||
-rw-r--r-- | mysql-test/r/rpl000014.result | 8 | ||||
-rw-r--r-- | mysql-test/r/rpl000015.result | 8 | ||||
-rw-r--r-- | mysql-test/r/rpl000016.result | 10 | ||||
-rw-r--r-- | mysql-test/r/rpl_log.result | 21 | ||||
-rw-r--r-- | sql/log_event.cc | 11 | ||||
-rw-r--r-- | sql/slave.cc | 33 | ||||
-rw-r--r-- | sql/slave.h | 6 | ||||
-rw-r--r-- | sql/sql_class.h | 1 | ||||
-rw-r--r-- | tools/mysqlmanager.c | 2 |
11 files changed, 71 insertions, 47 deletions
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 368e8909bbf..0097aa5068d 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -402,9 +402,6 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) (void) pthread_mutex_init(&LOCK_bytes_sent,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_bytes_received,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_timezone,MY_MUTEX_INIT_FAST); - (void) pthread_mutex_init(&LOCK_slave_io, MY_MUTEX_INIT_FAST); - (void) pthread_mutex_init(&LOCK_slave_sql, MY_MUTEX_INIT_FAST); - (void) pthread_mutex_init(&LOCK_server_id, MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_user_conn, MY_MUTEX_INIT_FAST); (void) pthread_cond_init(&COND_thread_count,NULL); (void) pthread_cond_init(&COND_refresh,NULL); @@ -412,11 +409,6 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) (void) pthread_cond_init(&COND_flush_thread_cache,NULL); (void) pthread_cond_init(&COND_manager,NULL); (void) pthread_cond_init(&COND_binlog_update, NULL); - (void) pthread_cond_init(&COND_slave_log_update, NULL); - (void) pthread_cond_init(&COND_slave_sql_stop, NULL); - (void) pthread_cond_init(&COND_slave_sql_start, NULL); - (void) pthread_cond_init(&COND_slave_sql_stop, NULL); - (void) pthread_cond_init(&COND_slave_sql_start, NULL); if (set_default_charset_by_name(default_charset, MYF(MY_WME))) { diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 3c8760ad7e5..b9ebac4445d 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -149,6 +149,7 @@ SLAVE_LOAD_TMPDIR=../../var/tmp #needs to be same length to test logging RES_SPACE=" " MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \ myisammrg heap sql" +MY_LOG_DIR="$MYSQL_TEST_DIR/var/log" # # Set LD_LIBRARY_PATH if we are using shared libraries # @@ -181,8 +182,8 @@ SLEEP_TIME_FOR_FIRST_SLAVE=400 SLEEP_TIME_FOR_SECOND_SLAVE=30 CHARACTER_SET=latin1 DBUSER="" -START_WAIT_TIMEOUT=3 -STOP_WAIT_TIMEOUT=3 +START_WAIT_TIMEOUT=10 +STOP_WAIT_TIMEOUT=10 while test $# -gt 0; do case "$1" in @@ -521,7 +522,7 @@ report_stats () { deci=`$EXPR $raw - $xwhole` $ECHO "Failed ${TOT_FAIL}/${TOT_TEST} tests, ${whole}.${deci}% successful." $ECHO "" - $ECHO "The log files in $MYSQL_TEST_DIR/var/log may give you some hint" + $ECHO "The log files in $MY_LOG_DIR may give you some hint" $ECHO "of what when wrong." $ECHO "If you want to report this error, please read first the documentation at" $ECHO "http://www.mysql.com/doc/M/y/MySQL_test_suite.html" @@ -530,8 +531,7 @@ report_stats () { mysql_install_db () { $ECHO "Removing Stale Files" - $RM -rf $MASTER_MYDDIR $SLAVE_MYDDIR $SLAVE_MYLOG $MASTER_MYLOG \ - $SLAVE_MYERR $MASTER_MYERR + $RM -rf $MASTER_MYDDIR $SLAVE_MYDDIR $MY_LOG_DIR/* $ECHO "Installing Master Databases" $INSTALL_DB if [ $? != 0 ]; then diff --git a/mysql-test/r/rpl000014.result b/mysql-test/r/rpl000014.result index a0646b9c39f..78e44d824e5 100644 --- a/mysql-test/r/rpl000014.result +++ b/mysql-test/r/rpl000014.result @@ -8,21 +8,21 @@ File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 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 9306 1 master-bin.001 79 mysql-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 +127.0.0.1 root MASTER_PORT 1 master-bin.001 79 mysql-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 change master to master_log_pos=73; slave stop; change master to master_log_pos=73; 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 9306 1 master-bin.001 73 mysql-relay-bin.001 4 master-bin.001 No No 0 0 73 +127.0.0.1 root MASTER_PORT 1 master-bin.001 73 mysql-relay-bin.001 4 master-bin.001 No No 0 0 73 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 9306 1 master-bin.001 73 mysql-relay-bin.001 4 master-bin.001 Yes Yes 0 0 73 +127.0.0.1 root MASTER_PORT 1 master-bin.001 73 mysql-relay-bin.001 4 master-bin.001 Yes Yes 0 0 73 change master to master_log_pos=173; 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 9306 1 master-bin.001 173 mysql-relay-bin.001 4 master-bin.001 Yes Yes 0 0 173 +127.0.0.1 root MASTER_PORT 1 master-bin.001 173 mysql-relay-bin.001 4 master-bin.001 Yes Yes 0 0 173 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 diff --git a/mysql-test/r/rpl000015.result b/mysql-test/r/rpl000015.result index 571c4c0b1e3..23f90ecde1f 100644 --- a/mysql-test/r/rpl000015.result +++ b/mysql-test/r/rpl000015.result @@ -9,16 +9,16 @@ Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Lo 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 3306 60 4 mysql-relay-bin.001 4 No No 0 0 0 +127.0.0.1 test MASTER_PORT 60 4 mysql-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=9306; +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 9306 60 4 mysql-relay-bin.001 4 No No 0 0 0 +127.0.0.1 root MASTER_PORT 60 4 mysql-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 9306 60 master-bin.001 79 mysql-relay-bin.001 120 master-bin.001 Yes Yes 0 0 79 +127.0.0.1 root MASTER_PORT 60 master-bin.001 79 mysql-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); diff --git a/mysql-test/r/rpl000016.result b/mysql-test/r/rpl000016.result index e3510ec2d94..dae60021157 100644 --- a/mysql-test/r/rpl000016.result +++ b/mysql-test/r/rpl000016.result @@ -2,11 +2,11 @@ slave start; Could not initialize master info structure, check permisions on master.info slave start; Could not initialize master info structure, check permisions on master.info -change master to master_host='127.0.0.1',master_port=9306, +change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; Could not initialize master info reset slave; -change master to master_host='127.0.0.1',master_port=9306, +change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; reset master; slave start; @@ -15,7 +15,7 @@ create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); 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 9306 60 master-bin.001 234 mysql-relay-bin.001 275 master-bin.001 Yes Yes 0 0 234 +127.0.0.1 root MASTER_PORT 60 master-bin.001 234 mysql-relay-bin.001 275 master-bin.001 Yes Yes 0 0 234 select * from t1; s Could not break slave @@ -43,7 +43,7 @@ master-bin.003 insert into t2 values (65); 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 9306 60 master-bin.003 155 mysql-relay-bin.001 793 master-bin.003 Yes Yes 0 0 155 +127.0.0.1 root MASTER_PORT 60 master-bin.003 155 mysql-relay-bin.001 793 master-bin.003 Yes Yes 0 0 155 select * from t2; m 34 @@ -66,7 +66,7 @@ slave stop; 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 9306 60 master-bin.006 445 mysql-relay-bin.004 1376 master-bin.006 Yes Yes 0 0 445 +127.0.0.1 root MASTER_PORT 60 master-bin.006 445 mysql-relay-bin.004 1312 master-bin.006 Yes Yes 0 0 445 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) diff --git a/mysql-test/r/rpl_log.result b/mysql-test/r/rpl_log.result index 4e6588d39f2..9b7ff276828 100644 --- a/mysql-test/r/rpl_log.result +++ b/mysql-test/r/rpl_log.result @@ -16,7 +16,7 @@ load data infile '../../std_data/words.dat' into table t1; drop table t1; show binlog events; Log_name Pos Event_type Server_id Orig_log_pos Info -master-bin.001 4 Start 1 4 Server ver: 4.0.1-alpha-debug-log, Binlog ver: 3 +master-bin.001 4 Start 1 4 Server ver: VERSION, Binlog ver: 3 master-bin.001 79 Query 1 79 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 172 INSERT_ID=1 master-bin.001 200 Query 1 200 use test; insert into t1 values (NULL) @@ -41,7 +41,7 @@ insert into t1 values (1); drop table t1; show binlog events; Log_name Pos Event_type Server_id Orig_log_pos Info -master-bin.001 4 Start 1 4 Server ver: 4.0.1-alpha-debug-log, Binlog ver: 3 +master-bin.001 4 Start 1 4 Server ver: VERSION, Binlog ver: 3 master-bin.001 79 Query 1 79 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 172 INSERT_ID=1 master-bin.001 200 Query 1 200 use test; insert into t1 values (NULL) @@ -67,28 +67,15 @@ Log_name slave-bin.001 slave-bin.002 show binlog events in 'slave-bin.001' from 4; -Log_name Pos Event_type Server_id Orig_log_pos Info -slave-bin.001 4 Start 2 4 Server ver: 4.0.1-alpha-debug-log, Binlog ver: 3 -slave-bin.001 79 Slave 2 79 host=127.0.0.1,port=9306,log=master-bin.001,pos=4 -slave-bin.001 132 Query 1 79 use test; create table t1(n int not null auto_increment primary key) -slave-bin.001 225 Intvar 1 200 INSERT_ID=1 -slave-bin.001 253 Query 1 200 use test; insert into t1 values (NULL) -slave-bin.001 316 Query 1 263 use test; drop table t1 -slave-bin.001 364 Query 1 311 use test; create table t1 (word char(20) not null) -slave-bin.001 439 Create_file 1 386 db=test;table=t1;file_id=1;block_len=81 -slave-bin.001 618 Exec_load 1 556 ;file_id=1 -slave-bin.001 641 Query 1 579 use test; drop table t1 -slave-bin.001 689 Rotate 1 627 slave-bin.002;pos=4; forced by master -slave-bin.001 729 Stop 2 729 show binlog events in 'slave-bin.002' from 4; Log_name Pos Event_type Server_id Orig_log_pos Info -slave-bin.002 4 Slave 2 627 host=127.0.0.1,port=9306,log=master-bin.002,pos=4 +slave-bin.002 4 Slave 2 627 host=127.0.0.1,port=MASTER_PORT,log=master-bin.002,pos=4 slave-bin.002 57 Query 1 4 use test; create table t1 (n int) slave-bin.002 115 Query 1 62 use test; insert into t1 values (1) slave-bin.002 175 Query 1 122 use test; drop table t1 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 9306 1 master-bin.002 170 mysql-relay-bin.002 935 master-bin.002 Yes Yes 0 0 170 +127.0.0.1 root MASTER_PORT 1 master-bin.002 170 mysql-relay-bin.002 935 master-bin.002 Yes Yes 0 0 170 show new master for slave with master_log_file='master-bin.001' and master_log_pos=4 and master_server_id=1; Log_name Log_pos diff --git a/sql/log_event.cc b/sql/log_event.cc index 7eb7c57ae40..e10352e6c48 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -53,6 +53,11 @@ static void pretty_print_str(FILE* file, char* str, int len) #ifndef MYSQL_CLIENT +inline int ignored_error_code(int err_code) +{ + return use_slave_mask && bitmap_is_set(&slave_error_mask, err_code); +} + static void pretty_print_str(String* packet, char* str, int len) { @@ -1564,7 +1569,8 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli) // sanity check to make sure the master did not get a really bad // error on the query - if (!check_expected_error(thd,rli,(expected_error = error_code))) + if (ignored_error_code((expected_error = error_code)) || + !check_expected_error(thd,rli,expected_error)) { mysql_parse(thd, thd->query, q_len); if (expected_error != @@ -1578,7 +1584,8 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli) actual_error); thd->query_error = 1; } - else if (expected_error == actual_error) + else if (expected_error == actual_error + || ignored_error_code(actual_error)) { thd->query_error = 0; *rli->last_slave_error = 0; diff --git a/sql/slave.cc b/sql/slave.cc index e68741e7434..3d38a7e6f4b 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -26,6 +26,9 @@ #include <my_dir.h> #include <assert.h> +bool use_slave_mask = 0; +MY_BITMAP slave_error_mask; + volatile bool slave_sql_running = 0, slave_io_running = 0; char* slave_load_tmpdir = 0; MASTER_INFO main_mi; @@ -219,6 +222,36 @@ err: return (*errmsg) ? 1 : 0; } +/* called from get_options() in mysqld.cc on start-up */ +void init_slave_skip_errors(char* arg) +{ + char* p; + my_bool last_was_digit = 0; + if (bitmap_init(&slave_error_mask,MAX_SLAVE_ERROR,0)) + { + fprintf(stderr, "Badly out of memory, please check your system status\n"); + exit(1); + } + use_slave_mask = 1; + for (;isspace(*arg);++arg) + /* empty */; + if (!my_casecmp(arg,"all",3)) + { + bitmap_set_all(&slave_error_mask); + return; + } + for (p= arg ; *p; ) + { + long err_code; + if (!(p= str2int(p, 10, 0, LONG_MAX, &err_code))) + break; + if (err_code < MAX_SLAVE_ERROR) + bitmap_set_bit(&slave_error_mask,(uint)err_code); + while (!isdigit(*p) && *p) + p++; + } +} + // we assume we have a run lock on rli and that the both slave thread // are not running int purge_relay_logs(RELAY_LOG_INFO* rli, bool just_reset, const char** errmsg) diff --git a/sql/slave.h b/sql/slave.h index 9ad5c75a556..f1dd0130500 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -5,6 +5,7 @@ #include "my_list.h" #define SLAVE_NET_TIMEOUT 3600 #define MAX_SLAVE_ERRMSG 1024 +#define MAX_SLAVE_ERROR 2000 /* The replication is accomplished by starting two threads - I/O @@ -24,12 +25,16 @@ */ extern ulong slave_net_timeout, master_retry_count; +extern MY_BITMAP slave_error_mask; +extern bool use_slave_mask; extern char* slave_load_tmpdir; extern my_string master_info_file,relay_log_info_file; extern my_string opt_relay_logname, opt_relaylog_index_name; extern bool opt_skip_slave_start; struct st_master_info; +// TODO: this needs to be redone, but for now it does not matter since +// we do not have multi-master yet. #define LOCK_ACTIVE_MI { pthread_mutex_lock(&LOCK_active_mi); \ ++active_mi_in_use; \ pthread_mutex_unlock(&LOCK_active_mi);} @@ -286,6 +291,7 @@ typedef struct st_table_rule_ent */ int init_slave(); +void init_slave_skip_errors(char* arg); int flush_master_info(MASTER_INFO* mi); int flush_relay_log_info(RELAY_LOG_INFO* rli); int register_slave_on_master(MYSQL* mysql); diff --git a/sql/sql_class.h b/sql/sql_class.h index 5b155e6b3d4..a34975bc77e 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -312,7 +312,6 @@ public: struct st_my_thread_var *mysys_var; enum enum_server_command command; uint32 server_id; - uint32 file_id; // for LOAD DATA INFILE uint32 file_id; // for LOAD DATA INFILE const char *where; time_t start_time,time_after_lock,user_time; diff --git a/tools/mysqlmanager.c b/tools/mysqlmanager.c index c8b7803790c..bd43c6bc0ec 100644 --- a/tools/mysqlmanager.c +++ b/tools/mysqlmanager.c @@ -1155,7 +1155,7 @@ static int client_msg_raw(NET* net, int err_code, int pre, const char* fmt, p=buf_end - 2; *p++='\r'; *p++='\n'; - + log_debug("message to client: %-.*s",p-buf-2,buf); if (my_net_write(net,buf,(uint)(p-buf)) || net_flush(net)) { p[-2]=0; |