List:Commits« Previous MessageNext Message »
From:Chuck Bell Date:July 1 2011 4:34pm
Subject:bzr push into mysql-5.5 branch (chuck.bell:3423 to 3424) Bug#12664302
Bug#12707948
View as plain text  
 3424 Chuck Bell	2011-07-01 [merge]
      Merge of BUG#12707948 and BUG#12664302 for testing.

    removed:
      mysql-test/include/daemon_example.ini
    added:
      mysql-test/include/daemon_example_bad_soname.ini
    modified:
      client/mysql_plugin.c
      mysql-test/include/daemon_example_bad_format.ini
      mysql-test/r/mysql_plugin.result
      mysql-test/t/mysql_plugin.test
 3423 Chuck Bell	2011-06-23
      WL#5710 : Enable and disable plugins (mysql_plugin)
      
      This patch changes the plugin configuration file format to make it
      easier to add new plugins and remove complexity. It also adds more
      information when plugin configuration file reads fail.

    modified:
      client/mysql_plugin.c
      mysql-test/r/mysql_plugin.result
      plugin/daemon_example/daemon_example.ini
=== modified file 'client/mysql_plugin.c'
--- a/client/mysql_plugin.c	2011-06-23 12:04:30 +0000
+++ b/client/mysql_plugin.c	2011-07-01 16:32:40 +0000
@@ -228,6 +228,69 @@ static int run_command(char* cmd, const
 }
 
 
+#ifdef __WIN__
+/**
+  Check to see if there are spaces in a path.
+  
+  @param[in]  path  The Windows path to examine.
+
+  @retval int spaces found = 1, no spaces = 0
+*/
+static int has_spaces(const char *path)
+{
+  if (strchr(path, ' ') != NULL)
+    return 1;
+  return 0;
+}
+
+
+/**
+  Convert a Unix path to a Windows path.
+ 
+  @param[in]  path  The Windows path to examine.
+
+  @returns string containing path with / changed to \\
+*/
+static char *convert_path(const char *argument)
+{
+  /* Convert / to \\ to make Windows paths */
+  char *winfilename= my_strdup(argument, MYF(MY_FAE));
+  char *pos, *end;
+  int length= strlen(argument);
+
+  for (pos= winfilename, end= pos+length ; pos < end ; pos++)
+  {
+    if (*pos == '/')
+    {
+      *pos= '\\';
+    }
+  }
+  return winfilename;
+}
+
+
+/**
+  Add quotes if the path has spaces in it.
+
+  @param[in]  path  The Windows path to examine.
+
+  @returns string containing excaped quotes if spaces found in path
+*/
+static char *add_quotes(const char *path)
+{
+  char windows_cmd_friendly[FN_REFLEN];
+
+  if (has_spaces(path))
+    snprintf(windows_cmd_friendly, sizeof(windows_cmd_friendly),
+             "\"%s\"", path);
+  else
+    snprintf(windows_cmd_friendly, sizeof(windows_cmd_friendly),
+             "%s", path);
+  return my_strdup(windows_cmd_friendly, MYF(MY_FAE));
+}
+#endif
+
+
 /**
   Get the default values from the my.cnf file.
 
@@ -259,11 +322,26 @@ static int get_default_values()
   {
     if ((error= make_tempfile(defaults_file, "txt")))
       goto exit;
+
+#ifdef __WIN__
+    {
+      char *format_str= 0;
+  
+      if (has_spaces(tool_path) || has_spaces(defaults_file))
+        format_str = "\"%s mysqld > %s\"";
+      else
+        format_str = "%s mysqld > %s";
+  
+      snprintf(defaults_cmd, sizeof(defaults_cmd), format_str,
+               add_quotes(tool_path), add_quotes(defaults_file));
+    }
+#else
     snprintf(defaults_cmd, sizeof(defaults_cmd),
              "%s mysqld > %s", tool_path, defaults_file);
+#endif
 
     /* Execute the command */
-    if (opt_verbose > 1)
+    if (opt_verbose)
     {
       printf("# Command: %s\n", defaults_cmd);
     }
@@ -517,14 +595,14 @@ static int load_plugin_data(char *plugin
   }
   if (!file_exists(opt_plugin_ini))
   {
-    reason= "File does not exist.";
+    reason= (char *)"File does not exist.";
     goto error;
   }
 
   file_ptr= fopen(opt_plugin_ini, "r");
   if (file_ptr == NULL)
   {
-    reason= "Cannot open file.";
+    reason= (char *)"Cannot open file.";
     goto error;
   }
 
@@ -542,6 +620,12 @@ static int load_plugin_data(char *plugin
     }
     if (res == NULL)
     {
+      if (i < 1)
+      {
+        reason= (char *)"Bad format in plugin configuration file.";
+        fclose(file_ptr);
+        goto error;        
+      }
       break;
     }
     if ((line[0] == '#') || (line[0] == '\n')) // skip comment and blank lines
@@ -552,11 +636,6 @@ static int load_plugin_data(char *plugin
     {
       /* save so_name */
       plugin_data.so_name= my_strdup(line, MYF(MY_WME));
-      if (plugin_data.so_name == NULL)
-      {
-        reason= "Cannot read library name.";
-        goto error;
-      }
       /* Add proper file extension for soname */
       strcat((char *)plugin_data.so_name, FN_SOEXT);
       i++;
@@ -574,6 +653,7 @@ static int load_plugin_data(char *plugin
       }
     }
   }
+  
   fclose(file_ptr);
   return 0;
 
@@ -735,6 +815,18 @@ static int process_options(int argc, cha
     goto exit;
   }
 
+  /* Add a trailing directory separator if not present */
+  if (opt_basedir)
+  {
+    i= (int)strlength(opt_basedir);
+    if (opt_basedir[i-1] != FN_LIBCHAR || opt_basedir[i-1] != FN_LIBCHAR2)
+#ifdef __WIN__
+      strcat(opt_basedir, "//");
+#else
+      strcat(opt_basedir, FN_DIRSEP);
+#endif
+  }
+  
   /*
     If the user did not specify the option to skip loading defaults from a
     config file and the required options are not present or there was an error
@@ -758,13 +850,6 @@ static int process_options(int argc, cha
     goto exit;
   }
 
-  /* Add a trailing directory separator if not present */
-  i= (int)strlength(opt_basedir);
-  if (opt_basedir[i-1] != FN_LIBCHAR || opt_basedir[i-1] != FN_LIBCHAR2)
-  {
-    strcat(opt_basedir, FN_DIRSEP);
-  }
-
   if (opt_verbose)
   {
     printf("#    basedir = %s\n", opt_basedir);
@@ -1029,12 +1114,30 @@ static int bootstrap_server(char *server
   int error= 0;
   int ret= 0;
 
+#ifdef __WIN__
+  char *format_str= 0;
+  char *verbose_str= "";
+  
+  if (opt_verbose)
+    strcat(verbose_str, "--console");
+  if (has_spaces(opt_datadir) || has_spaces(opt_basedir) ||
+      has_spaces(bootstrap_file))
+    format_str= "\"%s %s --bootstrap --datadir=%s --basedir=%s < %s\"";
+  else 
+    format_str= "%s %s --bootstrap --datadir=%s --basedir=%s < %s";
+
+  snprintf(bootstrap_cmd, sizeof(bootstrap_cmd), format_str,
+           add_quotes(convert_path(server_path)), verbose_str,
+           add_quotes(opt_datadir), add_quotes(opt_basedir),
+           add_quotes(bootstrap_file));
+#else
   snprintf(bootstrap_cmd, sizeof(bootstrap_cmd),
            "%s --no-defaults --bootstrap --datadir=%s --basedir=%s"
            " < %s", server_path, opt_datadir, opt_basedir, bootstrap_file);
+#endif
 
   /* Execute the command */
-  if (opt_verbose > 1)
+  if (opt_verbose)
   {
     printf("# Command: %s\n", bootstrap_cmd);
   }

=== removed file 'mysql-test/include/daemon_example.ini'
--- a/mysql-test/include/daemon_example.ini	2011-06-14 20:00:51 +0000
+++ b/mysql-test/include/daemon_example.ini	1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
-#
-# Plugin initialization file. Format using comma-separated values:
-# name, libname, symbol, [symbol, ]
-# Note: trailing comma is required.
-#
-# File is used by mysql_plugin.test for testing missing library error.
-#
-daemon_example, libdaemon_example, daemon_example,

=== modified file 'mysql-test/include/daemon_example_bad_format.ini'
--- a/mysql-test/include/daemon_example_bad_format.ini	2011-06-14 20:00:51 +0000
+++ b/mysql-test/include/daemon_example_bad_format.ini	2011-06-30 12:12:58 +0000
@@ -1,8 +1,8 @@
 #
-# Plugin initialization file. Format using comma-separated values:
-# name, libname, symbol, [symbol, ]
-# Note: trailing comma is required.
+# Plugin configuration file. Place the following on a separate line:
 #
-# File is used by mysql_plugin.test for testing bad library name.
+# library binary file name (without .so or .dll)
+# component_name
+# [component_name] - additional components in plugin
 #
-daemon_BADNAME, libdaemon_example, daemon_example,
+libdaemon_example   

=== added file 'mysql-test/include/daemon_example_bad_soname.ini'
--- a/mysql-test/include/daemon_example_bad_soname.ini	1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/daemon_example_bad_soname.ini	2011-06-30 12:12:58 +0000
@@ -0,0 +1,9 @@
+#
+# Plugin configuration file. Place the following on a separate line:
+#
+# library binary file name (without .so or .dll)
+# component_name
+# [component_name] - additional components in plugin
+#
+libdaemon_BADNAME
+daemon_BADNAME

=== modified file 'mysql-test/r/mysql_plugin.result'
--- a/mysql-test/r/mysql_plugin.result	2011-06-23 12:04:30 +0000
+++ b/mysql-test/r/mysql_plugin.result	2011-07-01 16:32:40 +0000
@@ -55,7 +55,7 @@ ERROR: The plugin library is missing or
 # 
 # Bad format for config file
 #
-ERROR: The plugin library is missing or in a different location.
+ERROR: Cannot read plugin config file daemon_example. Bad format in plugin configuration file.
 # 
 # Missing base_dir option
 #

=== modified file 'mysql-test/t/mysql_plugin.test'
--- a/mysql-test/t/mysql_plugin.test	2011-06-14 20:00:51 +0000
+++ b/mysql-test/t/mysql_plugin.test	2011-06-30 12:12:58 +0000
@@ -149,7 +149,7 @@ let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN
 --echo # 
 --echo # Missing library
 --echo #
-let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR/sql --plugin-dir=$MYSQL_TEST_DIR/include/;
+let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR/sql --plugin-dir=$DAEMONEXAMPLE_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_soname.ini;
 --error 1,2,256
 --exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.5 branch (chuck.bell:3423 to 3424) Bug#12664302Bug#12707948Chuck Bell4 Jul