List:Commits« Previous MessageNext Message »
From:tim Date:May 6 2006 1:41am
Subject:bk commit into 5.1 tree (tim:1.2383) BUG#6061
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of tim. When tim 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
  1.2383 06/05/05 19:06:00 tim@stripped +2 -0
  Bug #6061 mysql-log-rotate script - error logging doesn't use new file
  
  - Fix mysqld_safe so that it always passes correct --log-error argument to mysqld
  - A few other minor clean-ups to mysqld_safe

  scripts/mysqld_safe.sh
    1.83 06/05/05 19:05:45 tim@stripped +52 -16
    Bug #6061 mysql-log-rotate script - error logging doesn't use new file
    
    - Change mysqld_safe to pass --log-error to mysqld in all cases.  The old behavior was to usually "swallow" the --log-error=file.name argument, which caused mysqld to write to stderr and not be able to flush the error log file.  Ironically, passing --log-error (with no file name) seemed to work fine, because mysqld_safe didn't recognize it and passed it on to mysqld as an unknown option.
    - Ensure that the error log file matches what mysqld uses; in particular, add ".err" if given a --log-error argument with no extension
    - Various other mysqld_safe clean-ups while there - quote arguments properly, remove some redundant code

  BitKeeper/etc/ignore
    1.241 06/05/05 19:05:45 tim@stripped +1 -0
    Added log to the ignore list

# 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:	tim
# Host:	siva.hindu.god
# Root:	/usr/home/tim/m/51/a

--- 1.82/scripts/mysqld_safe.sh	2006-03-31 06:23:19 -07:00
+++ 1.83/scripts/mysqld_safe.sh	2006-05-05 19:05:45 -06:00
@@ -31,7 +31,6 @@
   --defaults-file=FILE       Use the specified defaults file
   --defaults-extra-file=FILE Also use defaults from the specified file
   --ledir=DIRECTORY          Look for mysqld in the specified directory
-  --log-error=FILE           Log errors to the specified log file
   --open-files-limit=LIMIT   Limit the number of open files
   --core-file-size=LIMIT     Limit core files to the specified size
   --timezone=TZ              Set the system timezone
@@ -46,6 +45,11 @@
         exit 1
 }
 
+shell_quote_string() {
+  # This sed command makes sure that any special chars are quoted,
+  # so the arg gets passed exactly to the server.
+  echo "$1" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g'
+}
 
 parse_arguments() {
   # We only need to pass arguments through to the server if we don't
@@ -69,14 +73,14 @@
       --pid-file=*) pid_file=`echo "$arg" | sed -e "s;--pid-file=;;"` ;;
       --user=*) user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 ;;
 
-      # these two might have been set in a [mysqld_safe] section of my.cnf
+      # these might have been set in a [mysqld_safe] section of my.cnf
       # they are added to mysqld command line to override settings from my.cnf
+      --log-error=*) err_log=`echo "$arg" | sed -e "s;--log-error=;;"` ;;
       --socket=*)  mysql_unix_port=`echo "$arg" | sed -e "s;--socket=;;"` ;;
       --port=*)    mysql_tcp_port=`echo "$arg" | sed -e "s;--port=;;"` ;;
 
       # mysqld_safe-specific options - must be set in my.cnf ([mysqld_safe])!
       --ledir=*)   ledir=`echo "$arg" | sed -e "s;--ledir=;;"` ;;
-      --log-error=*) err_log=`echo "$arg" | sed -e "s;--log-error=;;"` ;;
       --open-files-limit=*) open_files=`echo "$arg" | sed -e "s;--open-files-limit=;;"` ;;
       --core-file-size=*) core_file_size=`echo "$arg" | sed -e "s;--core-file-size=;;"` ;;
       --timezone=*) TZ=`echo "$arg" | sed -e "s;--timezone=;;"` ; export TZ; ;;
@@ -97,9 +101,7 @@
       *)
         if test -n "$pick_args"
         then
-          # This sed command makes sure that any special chars are quoted,
-          # so the arg gets passed exactly to the server.
-          args="$args "`echo "$arg" | sed -e 's,\([^a-zA-Z0-9_.-]\),\\\\\1,g'`
+          append_arg_to_args "$arg"
         fi
         ;;
     esac
@@ -194,6 +196,10 @@
   print_defaults="my_print_defaults"
 fi
 
+append_arg_to_args () {
+  args="$args "`shell_quote_string "$1"`
+}
+
 args=
 SET_USER=2
 parse_arguments `$print_defaults $defaults --loose-verbose mysqld server`
@@ -239,15 +245,39 @@
     * )  pid_file="$DATADIR/$pid_file" ;;
   esac
 fi
-test -z "$err_log"  && err_log=$DATADIR/`@HOSTNAME@`.err
+append_arg_to_args "--pid-file=$pid_file"
+
+if [ -n "$err_log" ]
+then
+  # mysqld adds ".err" if there is no extension on the --log-err
+  # argument; must match that here, or mysqld_safe will write to a
+  # different log file than mysqld
+
+  # mysqld does not add ".err" to "--log-error=foo."; it considers a
+  # trailing "." as an extension
+  if expr "$err_log" : '.*\.[^/]*$' > /dev/null
+  then
+      :
+  else
+    err_log="$err_log".err
+  fi
+
+  case "$err_log" in
+    /* ) ;;
+    * ) err_log="$DATADIR/$err_log" ;;
+  esac
+else
+  err_log=$DATADIR/`@HOSTNAME@`.err
+fi
+append_arg_to_args "--log-error=$err_log"
 
 if test -n "$mysql_unix_port"
 then
-  args="--socket=$mysql_unix_port $args"
+  append_arg_to_args "--socket=$mysql_unix_port"
 fi
 if test -n "$mysql_tcp_port"
 then
-  args="--port=$mysql_tcp_port $args"
+  append_arg_to_args "--port=$mysql_tcp_port"
 fi
 
 if test $niceness -eq 0
@@ -314,7 +344,7 @@
   if test -n "$open_files"
   then
     ulimit -n $open_files
-    args="--open-files-limit=$open_files $args"
+    append_arg_to_args "--open-files-limit=$open_files"
   fi
   if test -n "$core_file_size"
   then
@@ -372,12 +402,18 @@
 while true
 do
   rm -f $safe_mysql_unix_port $pid_file	# Some extra safety
-  if test -z "$args"
-  then
-    $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file @MYSQLD_DEFAULT_SWITCHES@ >> $err_log 2>&1
-  else
-    eval "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file @MYSQLD_DEFAULT_SWITCHES@ $args >> $err_log 2>&1"
-  fi
+
+  cmd="$NOHUP_NICENESS"
+
+  for i in  "$ledir/$MYSQLD" "$defaults" "--basedir=$MY_BASEDIR_VERSION" \
+    "--datadir=$DATADIR" "$USER_OPTION"
+  do
+    cmd="$cmd "`shell_quote_string "$i"`
+  done
+  cmd="$cmd $args >> "`shell_quote_string "$err_log"`" 2>&1"
+  #echo "Running mysqld: [$cmd]"
+  eval "$cmd"
+
   if test ! -f $pid_file		# This is removed if normal shutdown
   then
     echo "STOPPING server from pid file $pid_file"

--- 1.240/BitKeeper/etc/ignore	2006-05-01 23:45:16 -06:00
+++ 1.241/BitKeeper/etc/ignore	2006-05-05 19:05:45 -06:00
@@ -1770,3 +1770,4 @@
 vio/viotest.cpp
 zlib/*.ds?
 zlib/*.vcproj
+log
Thread
bk commit into 5.1 tree (tim:1.2383) BUG#6061tim6 May