diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index f2fa824baa4..60e2fb6f24f 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -1,3 +1,4 @@ -mwagner@evoq.mwagner.org heikki@donna.mysql.fi +mwagner@evoq.mwagner.org +sasha@mysql.sashanet.com serg@serg.mysql.com diff --git a/Docs/manual.texi b/Docs/manual.texi index c3c6e914bed..39e0c8dd0be 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -41660,6 +41660,8 @@ not yet 100 % confident in this code. @appendixsubsec Changes in release 3.23.34 @itemize @bullet @item +Improved error diagnostic for slave thread exit +@item Fixed bug in @code{ALTER TABLE ... ORDER BY}. @item Added option @code{max_user_connections} to @code{mysqld}. diff --git a/innobase/include/os0file.h b/innobase/include/os0file.h index a02cd947c28..6ec8c69594a 100644 --- a/innobase/include/os0file.h +++ b/innobase/include/os0file.h @@ -28,10 +28,14 @@ Created 10/21/1995 Heikki Tuuri #define POSIX_ASYNC_IO #endif -#ifndef S_IRWXU -#define S_IRWXU 00700 -#define S_IRWXG 00070 -#define S_IRWXO 00007 +#ifndef S_IRUSR +#define +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IROTH 00004 +#define S_IWOTH 00002 #endif #endif diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c index f155e15ac49..9e45c2981de 100644 --- a/innobase/os/os0file.c +++ b/innobase/os/os0file.c @@ -316,11 +316,8 @@ try_again: UT_NOT_USED(purpose); if (create_mode == OS_FILE_CREATE) { -#ifndef S_IRWXU - file = open(name, create_flag); -#else - file = open(name, create_flag, S_IRWXU | S_IRWXG | S_IRWXO); -#endif + file = open(name, create_flag, S_IRUSR | S_IRGRP | S_IROTH + | S_IWUSR | S_IWGRP | S_IWOTH); } else { file = open(name, create_flag); } diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 3e3061fcd4d..555c543664e 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -45,3 +45,21 @@ select t1.id FROM t2 as ttxt,t1 INNER JOIN t1 as ticket2 ON ticket2.id = ttxt.ti show keys from t2; show create table t2; drop table t1,t2; + +# check for bug reported by Stephan Skusa + +drop table if exists fulltextTEST; +CREATE TABLE fulltextTEST ( + field1 varchar(40) NOT NULL, + field2 varchar(20) NOT NULL, + field3 varchar(40) NOT NULL, + PRIMARY KEY (field1), + FULLTEXT idx_fulltext (field1, field2, field3) +); + +INSERT INTO fulltextTEST VALUES ( 'test1', 'test1.1', 'test1.1.1'); +INSERT INTO fulltextTEST VALUES ( 'test2', 'test2.1', 'test2.1.1'); +select * +from fulltextTEST +where MATCH (field1,field2,field3) AGAINST (NULL); +drop table fulltextTEST; diff --git a/sql/slave.cc b/sql/slave.cc index ebf757420a3..a5c66216366 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -588,7 +588,7 @@ int show_master_info(THD* thd) net_store_data(packet, (uint32) glob_mi.port); net_store_data(packet, (uint32) glob_mi.connect_retry); net_store_data(packet, glob_mi.log_file_name); - net_store_data(packet, (longlong) glob_mi.pos); + net_store_data(packet, (uint32) glob_mi.pos); pthread_mutex_unlock(&glob_mi.lock); pthread_mutex_lock(&LOCK_slave); net_store_data(packet, slave_running ? "Yes":"No"); @@ -1150,7 +1150,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) int error = 1; bool retried_once = 0; - ulonglong last_failed_pos = 0; + uint32 last_failed_pos = 0; // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); @@ -1160,7 +1160,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) pthread_detach_this_thread(); if (init_slave_thread(thd) || init_master_info(&glob_mi)) - goto err; + { + sql_print_error("Failed during slave thread initialization"); + goto err; + } thd->thread_stack = (char*)&thd; // remember where our stack is thd->temporary_tables = save_temporary_tables; // restore temp tables threads.append(thd); @@ -1175,7 +1178,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) goto err; } - thd->proc_info = "Connecting to master"; + thd->proc_info = "connecting to master"; #ifndef DBUG_OFF sql_print_error("Slave thread initialized"); #endif @@ -1187,7 +1190,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) RPL_LOG_NAME, glob_mi.pos); else - goto err; + { + sql_print_error("Slave thread killed while connecting to master"); + goto err; + } while (!slave_killed(thd)) { @@ -1196,9 +1202,13 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) { sql_print_error("Failed on request_dump()"); if(slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed while requesting master \ +dump"); + goto err; + } - thd->proc_info = "Waiting to reconnect after a failed dump request"; + thd->proc_info = "Waiiting to reconnect after a failed dump request"; if(mysql->net.vio) vio_close(mysql->net.vio); // first time retry immediately, assuming that we can recover @@ -1210,14 +1220,21 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) retried_once = 1; if(slave_killed(thd)) + { + sql_print_error("Slave thread killed while retrying master \ +dump"); goto err; + } thd->proc_info = "Reconnecting after a failed dump request"; sql_print_error("Slave: failed dump request, reconnecting to \ try again, log '%s' at postion %ld", RPL_LOG_NAME, last_failed_pos = glob_mi.pos ); if(safe_reconnect(thd, mysql, &glob_mi) || slave_killed(thd)) + { + sql_print_error("Slave thread killed during or after reconnect"); goto err; + } continue; } @@ -1228,7 +1245,10 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, thd->proc_info = "Reading master update"; uint event_len = read_event(mysql, &glob_mi); if(slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed while reading event"); + goto err; + } if (event_len == packet_error) { @@ -1241,13 +1261,21 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, retried_once = 1; if(slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed while waiting to \ +reconnect after a failed read"); + goto err; + } thd->proc_info = "Reconnecting after a failed read"; sql_print_error("Slave: Failed reading log event, \ reconnecting to retry, log '%s' position %ld", RPL_LOG_NAME, last_failed_pos = glob_mi.pos); if(safe_reconnect(thd, mysql, &glob_mi) || slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed during or after a \ +reconnect done to recover from failed read"); + goto err; + } break; } diff --git a/sql/slave.h b/sql/slave.h index 11c01a9fa03..d47ec22410c 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -4,7 +4,7 @@ typedef struct st_master_info { char log_file_name[FN_REFLEN]; - ulonglong pos,pending; + uint32 pos,pending; File fd; // we keep the file open, so we need to remember the file pointer IO_CACHE file; // the variables below are needed because we can change masters on the fly @@ -29,11 +29,11 @@ typedef struct st_master_info pthread_mutex_destroy(&lock); pthread_cond_destroy(&cond); } - inline void inc_pending(ulonglong val) + inline void inc_pending(uint32 val) { pending += val; } - inline void inc_pos(ulonglong val) + inline void inc_pos(uint32 val) { pthread_mutex_lock(&lock); pos += val + pending; @@ -43,7 +43,7 @@ typedef struct st_master_info } // thread safe read of position - not needed if we are in the slave thread, // but required otherwise - inline void read_pos(ulonglong& var) + inline void read_pos(uint32& var) { pthread_mutex_lock(&lock); var = pos;