MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Guilhem Bichot Date:March 5 2010 1:08pm
Subject:bzr commit into mysql-next-mr-bugfixing branch (guilhem:3111) Bug#51215
View as plain text  
#At file:///home/mysql_src/bzrrepos/mysql-next-mr-bugfixing3/ based on revid:alik@stripped

 3111 Guilhem Bichot	2010-03-05
      Fix for BUG#51215 "log-error partially works with version 5.5": WL 4738 (reengineering of server variables)
      had broken the 5.1 behaviour of --log-error: --log-error without argument sent to stderr instead of writing
      to a file with an autogenerated name.
     @ mysql-test/suite/sys_vars/t/log_error_func.test
        test that error log is created and shown in SHOW VARIABLES.
        Interestingly the error log's path is apparently relative if --log-error=argument is used, but
        may be absolute or relative if --log-error(no argument) is used (because then the path is derived from
        that of pidfile_name, which can be absolute or relative, depending on if autogenerated or not).
     @ mysql-test/suite/sys_vars/t/log_error_func2.test
        test that error log is created and shown in SHOW VARIABLES
     @ mysql-test/suite/sys_vars/t/log_error_func3.test
        test that error log is empty in SHOW VARIABLES
     @ sql/mysql_priv.h
        id for option --log-error
     @ sql/mysqld.cc
        No --log-error means "write errors to stderr", whereas --log-error
        without argument means "write errors to a file". So we cannot use the default logic
        of class sys_var_charptr, which treats "option not used" the same as "option used
        without argument" and uses the same default for both. We need to catch "option used",
        in mysqld_get_one_option(), and then "without argument". Setting to "" makes sure
        that init_server_components() will create the log, with an autogenerated name.
     @ sql/sys_vars.cc
        need to give the option a numeric id so that we can catch it in mysqld_get_one_option()

    added:
      mysql-test/suite/sys_vars/r/log_error_func.result
      mysql-test/suite/sys_vars/r/log_error_func2.result
      mysql-test/suite/sys_vars/r/log_error_func3.result
      mysql-test/suite/sys_vars/t/log_error_func.cnf
      mysql-test/suite/sys_vars/t/log_error_func.test
      mysql-test/suite/sys_vars/t/log_error_func2.cnf
      mysql-test/suite/sys_vars/t/log_error_func2.test
      mysql-test/suite/sys_vars/t/log_error_func3.test
    modified:
      sql/mysql_priv.h
      sql/mysqld.cc
      sql/sys_vars.cc
=== added file 'mysql-test/suite/sys_vars/r/log_error_func.result'
--- a/mysql-test/suite/sys_vars/r/log_error_func.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/r/log_error_func.result	2010-03-05 13:08:21 +0000
@@ -0,0 +1,6 @@
+select (@err_log:=variable_value)*0 from information_schema.global_variables where variable_name="log_error";
+(@err_log:=variable_value)*0
+0
+select instr(@err_log, "some_random_name5435413.err")>0;
+instr(@err_log, "some_random_name5435413.err")>0
+1

=== added file 'mysql-test/suite/sys_vars/r/log_error_func2.result'
--- a/mysql-test/suite/sys_vars/r/log_error_func2.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/r/log_error_func2.result	2010-03-05 13:08:21 +0000
@@ -0,0 +1,6 @@
+select (@err_log:=variable_value)*0 from information_schema.global_variables where variable_name="log_error";
+(@err_log:=variable_value)*0
+0
+select instr(@err_log, ".err")>0;
+instr(@err_log, ".err")>0
+1

=== added file 'mysql-test/suite/sys_vars/r/log_error_func3.result'
--- a/mysql-test/suite/sys_vars/r/log_error_func3.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/r/log_error_func3.result	2010-03-05 13:08:21 +0000
@@ -0,0 +1,3 @@
+select variable_value from information_schema.global_variables where variable_name="log_error";
+variable_value
+

=== added file 'mysql-test/suite/sys_vars/t/log_error_func.cnf'
--- a/mysql-test/suite/sys_vars/t/log_error_func.cnf	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/t/log_error_func.cnf	2010-03-05 13:08:21 +0000
@@ -0,0 +1,5 @@
+# Use default setting for mysqld processes
+!include include/default_mysqld.cnf
+
+[mysqld.1]
+log-error=some_random_name5435413

=== added file 'mysql-test/suite/sys_vars/t/log_error_func.test'
--- a/mysql-test/suite/sys_vars/t/log_error_func.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/t/log_error_func.test	2010-03-05 13:08:21 +0000
@@ -0,0 +1,20 @@
+# Test for BUG#51215 "log-error partially works with version 5.5"
+# when --log-error is used without argument
+
+# check displayed value. We can check only the base name, the rest
+# depends on paths, symbolic links, --vardir, etc...
+select (@err_log:=variable_value)*0 from information_schema.global_variables where variable_name="log_error";
+select instr(@err_log, "some_random_name5435413.err")>0;
+
+# Check file's existence. The displayed value may be relative or not.
+let $err_log=`select @err_log`;
+let $err_log_relative=`select instr(@err_log, ".")=1`;
+if ($err_log_relative)
+{
+  let $MYSQLD_DATADIR= `SELECT @@datadir`;
+  file_exists $MYSQLD_DATADIR/$err_log;
+}
+if (!$err_log_relative)
+{
+  file_exists $err_log;
+}

=== added file 'mysql-test/suite/sys_vars/t/log_error_func2.cnf'
--- a/mysql-test/suite/sys_vars/t/log_error_func2.cnf	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/t/log_error_func2.cnf	2010-03-05 13:08:21 +0000
@@ -0,0 +1,5 @@
+# Use default setting for mysqld processes
+!include include/default_mysqld.cnf
+
+[mysqld.1]
+log-error

=== added file 'mysql-test/suite/sys_vars/t/log_error_func2.test'
--- a/mysql-test/suite/sys_vars/t/log_error_func2.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/t/log_error_func2.test	2010-03-05 13:08:21 +0000
@@ -0,0 +1,20 @@
+# Test for BUG#51215 "log-error partially works with version 5.5"
+# when --log-error is used without argument
+
+# check displayed value. We can check only the suffix, because
+# the rest depends on paths, symbolic links, --vardir, etc...
+select (@err_log:=variable_value)*0 from information_schema.global_variables where variable_name="log_error";
+select instr(@err_log, ".err")>0;
+
+# Check file's existence. The displayed value may be relative or not.
+let $err_log=`select @err_log`;
+let $err_log_relative=`select instr(@err_log, ".")=1`;
+if ($err_log_relative)
+{
+  let $MYSQLD_DATADIR= `SELECT @@datadir`;
+  file_exists $MYSQLD_DATADIR/$err_log;
+}
+if (!$err_log_relative)
+{
+  file_exists $err_log;
+}

=== added file 'mysql-test/suite/sys_vars/t/log_error_func3.test'
--- a/mysql-test/suite/sys_vars/t/log_error_func3.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/sys_vars/t/log_error_func3.test	2010-03-05 13:08:21 +0000
@@ -0,0 +1,5 @@
+# Test for BUG#51215 "log-error partially works with version 5.5"
+# when --log-error is not used
+
+# check displayed value. Should be empty.
+select variable_value from information_schema.global_variables where variable_name="log_error";

=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h	2010-03-03 19:22:02 +0000
+++ b/sql/mysql_priv.h	2010-03-05 13:08:21 +0000
@@ -2687,7 +2687,8 @@ enum options_mysqld
   OPT_SSL_CIPHER,
   OPT_SSL_KEY,
   OPT_WANT_CORE,
-  OPT_ENGINE_CONDITION_PUSHDOWN
+  OPT_ENGINE_CONDITION_PUSHDOWN,
+  OPT_LOG_ERROR
 };
 
 #endif /* MYSQL_SERVER */

=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2010-03-03 19:22:02 +0000
+++ b/sql/mysqld.cc	2010-03-05 13:08:21 +0000
@@ -3962,6 +3962,11 @@ static int init_server_components()
     else
       fn_format(log_error_file, log_error_file_ptr, mysql_data_home, ".err",
                 MY_UNPACK_FILENAME | MY_SAFE_PATH);
+    /*
+      _ptr may have been set to my_disabled_option or "" if no argument was
+      passed, but we need to show the real name in SHOW VARIABLES:
+    */
+    log_error_file_ptr= log_error_file;
     if (!log_error_file[0])
       opt_error_log= 0;                         // Too long file name
     else
@@ -7357,6 +7362,14 @@ mysqld_get_one_option(int optid,
       global_system_variables.optimizer_switch&=
         ~OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN;
     break;
+  case OPT_LOG_ERROR:
+    /*
+      "No --log-error" == "write errors to stderr",
+      "--log-error without argument" == "write errors to a file".
+    */
+    if (argument == NULL) /* no argument */
+      log_error_file_ptr= const_cast<char*>("");
+    break;
   }
   return 0;
 }

=== modified file 'sql/sys_vars.cc'
--- a/sql/sys_vars.cc	2010-03-03 19:22:02 +0000
+++ b/sql/sys_vars.cc	2010-03-05 13:08:21 +0000
@@ -895,7 +895,8 @@ static Sys_var_mybool Sys_trust_function
 
 static Sys_var_charptr Sys_log_error(
        "log_error", "Error log file",
-       READ_ONLY GLOBAL_VAR(log_error_file_ptr), CMD_LINE(OPT_ARG),
+       READ_ONLY GLOBAL_VAR(log_error_file_ptr),
+       CMD_LINE(OPT_ARG, OPT_LOG_ERROR),
        IN_FS_CHARSET, DEFAULT(disabled_my_option));
 
 static Sys_var_mybool Sys_log_queries_not_using_indexes(


Attachment: [text/bzr-bundle] bzr/guilhem@mysql.com-20100305130821-02n9vd5e42toro05.bundle
Thread
bzr commit into mysql-next-mr-bugfixing branch (guilhem:3111) Bug#51215Guilhem Bichot5 Mar