MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Petr Chardin Date:September 15 2006 9:07am
Subject:bk commit into 5.1 tree (petr:1.2307) BUG#18559
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cps. When cps does a push these changes will
be propagated 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://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-09-15 13:07:23+04:00, petr@stripped +8 -0
  Post-review fixes for
  Bug #18559 "log tables cannot change engine, and
              gets deadlocked when dropping w/ log on":
  1) Add more generic error messages
  2) Add new handlerton flag for engines, which support
     log tables
  3) Remove (log-tables related) mutex lock in myisam to
     improve performance

  mysql-test/r/log_tables.result@stripped, 2006-09-15 13:07:07+04:00, petr@stripped +9 -9
    update result file to use new error messages

  mysql-test/t/log_tables.test@stripped, 2006-09-15 13:07:07+04:00, petr@stripped +9 -9
    update test file with new error messages

  sql/handler.h@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +1 -0
    Add new handlerton flag, to mark whether engine
    supports log tables

  sql/share/errmsg.txt@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +4 -0
    Add more generic error messages

  sql/sql_table.cc@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +4 -5
    Update error messages

  storage/csv/ha_tina.cc@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +1 -1
    CSV supports log tables

  storage/myisam/ha_myisam.cc@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +1 -1
    MyISAM supports log tables

  storage/myisam/mi_write.c@stripped, 2006-09-15 13:07:08+04:00, petr@stripped +4 -4
    remove mutex lock to improve performance

# 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:	petr
# Host:	owlet.local
# Root:	/home/cps/mysql/trees/5.1-runtime-new

--- 1.59/storage/myisam/mi_write.c	2006-09-15 13:07:40 +04:00
+++ 1.60/storage/myisam/mi_write.c	2006-09-15 13:07:40 +04:00
@@ -167,13 +167,13 @@ int mi_write(MI_INFO *info, byte *record
   /*
     Update status of the table. We need to do so after each row write
     for the log tables, as we want the new row to become visible to
-    other threads as soon as possible. We lock mutex here to follow
-    pthread memory visibility rules.
+    other threads as soon as possible. We don't lock mutex here
+    (as it is required by pthread memory visibility rules) as (1) it's
+    not critical to use outdated share->is_log_table value (2) locking
+    mutex here for every write is too expensive.
   */
-  pthread_mutex_lock(&share->intern_lock);
   if (share->is_log_table)
     mi_update_status((void*) info);
-  pthread_mutex_unlock(&share->intern_lock);
 
   allow_break();				/* Allow SIGHUP & SIGINT */
   DBUG_RETURN(0);

--- 1.190/storage/myisam/ha_myisam.cc	2006-09-15 13:07:40 +04:00
+++ 1.191/storage/myisam/ha_myisam.cc	2006-09-15 13:07:40 +04:00
@@ -1783,7 +1783,7 @@ static int myisam_init()
   myisam_hton.db_type=DB_TYPE_MYISAM;
   myisam_hton.create=myisam_create_handler;
   myisam_hton.panic=mi_panic;
-  myisam_hton.flags=HTON_CAN_RECREATE;
+  myisam_hton.flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
   return 0;
 }
 

--- 1.235/sql/handler.h	2006-09-15 13:07:40 +04:00
+++ 1.236/sql/handler.h	2006-09-15 13:07:40 +04:00
@@ -681,6 +681,7 @@ struct handlerton
 #define HTON_FLUSH_AFTER_RENAME      (1 << 4)
 #define HTON_NOT_USER_SELECTABLE     (1 << 5)
 #define HTON_TEMPORARY_NOT_SUPPORTED (1 << 6) //Having temporary tables not supported
+#define HTON_SUPPORT_LOG_TABLES      (1 << 7) //Engine supports log tables
 
 typedef struct st_thd_trans
 {

--- 1.366/sql/sql_table.cc	2006-09-15 13:07:40 +04:00
+++ 1.367/sql/sql_table.cc	2006-09-15 13:07:40 +04:00
@@ -1628,7 +1628,7 @@ int mysql_rm_table_part2(THD *thd, TABLE
          (!my_strcasecmp(system_charset_info, table->table_name, "slow_log")
           && opt_slow_log && logger.is_slow_log_table_enabled())))
     {
-      my_error(ER_CANT_DROP_LOG_TABLE, MYF(0));
+      my_error(ER_BAD_LOG_STATEMENT, MYF(0), "drop");
       DBUG_RETURN(1);
     }
   }
@@ -5174,7 +5174,7 @@ bool mysql_alter_table(THD *thd,char *ne
        (table_kind == SLOW_LOG && opt_slow_log &&
          logger.is_slow_log_table_enabled()))
     {
-      my_error(ER_CANT_ALTER_LOG_TABLE, MYF(0));
+      my_error(ER_BAD_LOG_STATEMENT, MYF(0), "alter");
       DBUG_RETURN(TRUE);
     }
 
@@ -5182,10 +5182,9 @@ bool mysql_alter_table(THD *thd,char *ne
     if ((table_kind == GENERAL_LOG || table_kind == SLOW_LOG) &&
         (lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
         (!lex_create_info->db_type || /* unknown engine */
-        !(lex_create_info->db_type->db_type == DB_TYPE_MYISAM ||
-          lex_create_info->db_type->db_type == DB_TYPE_CSV_DB)))
+        !(lex_create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
     {
-      my_error(ER_BAD_LOG_ENGINE, MYF(0));
+      my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
       DBUG_RETURN(TRUE);
     }
   }

--- 1.120/sql/share/errmsg.txt	2006-09-15 13:07:40 +04:00
+++ 1.121/sql/share/errmsg.txt	2006-09-15 13:07:40 +04:00
@@ -5960,3 +5960,7 @@ ER_HOSTNAME
 	eng "host name"
 ER_WRONG_STRING_LENGTH
 	eng "String '%-.70s' is too long for %s (should be no longer than %d)"
+ER_UNSUPORTED_LOG_ENGINE
+        eng "This storage engine cannot be used for log tables""
+ER_BAD_LOG_STATEMENT
+        eng "You cannot %s a log table if logging is enabled"

--- 1.58/storage/csv/ha_tina.cc	2006-09-15 13:07:40 +04:00
+++ 1.59/storage/csv/ha_tina.cc	2006-09-15 13:07:40 +04:00
@@ -162,7 +162,7 @@ static int tina_init_func()
     tina_hton.db_type= DB_TYPE_CSV_DB;
     tina_hton.create= tina_create_handler;
     tina_hton.panic= tina_end;
-    tina_hton.flags= HTON_CAN_RECREATE;
+    tina_hton.flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
   }
   return 0;
 }

--- 1.8/mysql-test/r/log_tables.result	2006-09-15 13:07:40 +04:00
+++ 1.9/mysql-test/r/log_tables.result	2006-09-15 13:07:40 +04:00
@@ -73,16 +73,16 @@ select * from mysql.slow_log;
 start_time	user_host	query_time	lock_time	rows_sent	rows_examined	db	last_insert_id	insert_id	server_id	sql_text
 TIMESTAMP	USER_HOST	QUERY_TIME	00:00:00	1	0	test	0	0	1	select sleep(2)
 alter table mysql.general_log engine=myisam;
-ERROR HY000: You can't alter a log table if logging is enabled
+ERROR HY000: You cannot alter a log table if logging is enabled
 alter table mysql.slow_log engine=myisam;
-ERROR HY000: You can't alter a log table if logging is enabled
+ERROR HY000: You cannot alter a log table if logging is enabled
 drop table mysql.general_log;
-ERROR HY000: Cannot drop log table if log is enabled
+ERROR HY000: You cannot drop a log table if logging is enabled
 drop table mysql.slow_log;
-ERROR HY000: Cannot drop log table if log is enabled
+ERROR HY000: You cannot drop a log table if logging is enabled
 set global general_log='OFF';
 alter table mysql.slow_log engine=myisam;
-ERROR HY000: You can't alter a log table if logging is enabled
+ERROR HY000: You cannot alter a log table if logging is enabled
 set global slow_query_log='OFF';
 show create table mysql.general_log;
 Table	Create Table
@@ -173,13 +173,13 @@ unlock tables;
 set global general_log='OFF';
 set global slow_query_log='OFF';
 alter table mysql.slow_log engine=ndb;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
 alter table mysql.slow_log engine=innodb;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
 alter table mysql.slow_log engine=archive;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
 alter table mysql.slow_log engine=blackhole;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
 drop table mysql.slow_log;
 drop table mysql.general_log;
 drop table mysql.general_log;

--- 1.12/mysql-test/t/log_tables.test	2006-09-15 13:07:40 +04:00
+++ 1.13/mysql-test/t/log_tables.test	2006-09-15 13:07:40 +04:00
@@ -178,21 +178,21 @@ select * from mysql.slow_log;
 
 # check that appropriate error messages are given when one attempts to alter
 # or drop a log tables, while corresponding logs are enabled
---error ER_CANT_ALTER_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
 alter table mysql.general_log engine=myisam;
---error ER_CANT_ALTER_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
 alter table mysql.slow_log engine=myisam;
 
---error ER_CANT_DROP_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
 drop table mysql.general_log;
---error ER_CANT_DROP_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
 drop table mysql.slow_log;
 
 # check that one can alter log tables to MyISAM
 set global general_log='OFF';
 
 # cannot convert another log table
---error ER_CANT_ALTER_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
 alter table mysql.slow_log engine=myisam;
 
 # alter both tables
@@ -252,13 +252,13 @@ set global general_log='OFF';
 set global slow_query_log='OFF';
 
 # check that alter table doesn't work for other engines
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
 alter table mysql.slow_log engine=ndb;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
 alter table mysql.slow_log engine=innodb;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
 alter table mysql.slow_log engine=archive;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
 alter table mysql.slow_log engine=blackhole;
 
 drop table mysql.slow_log;
Thread
bk commit into 5.1 tree (petr:1.2307) BUG#18559Petr Chardin15 Sep