summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/my_sys.h8
-rw-r--r--mysys/default.c42
-rw-r--r--server-tools/instance-manager/instance.cc5
-rw-r--r--server-tools/instance-manager/instance.h2
-rw-r--r--server-tools/instance-manager/instance_map.cc31
-rw-r--r--server-tools/instance-manager/instance_map.h4
-rw-r--r--server-tools/instance-manager/instance_options.cc19
-rw-r--r--server-tools/instance-manager/instance_options.h2
-rw-r--r--server-tools/instance-manager/manager.cc2
-rw-r--r--server-tools/instance-manager/options.cc11
-rw-r--r--server-tools/instance-manager/options.h2
-rw-r--r--support-files/Makefile.am1
-rw-r--r--support-files/my.cnf2
13 files changed, 70 insertions, 61 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index 72d4bec74b1..7d3b402bc6f 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -531,7 +531,7 @@ typedef uint32 ha_checksum;
/* Define the type of function to be passed to process_default_option_files */
typedef int (*Process_option_func)(void *ctx, const char *group_name,
- const char *option);
+ const char *option);
#include <my_alloc.h>
@@ -776,9 +776,9 @@ extern void get_defaults_files(int argc, char **argv,
char **defaults, char **extra_defaults);
extern int load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
-extern int process_default_option_files(const char *conf_file,
- Process_option_func func,
- void *func_ctx);
+extern int my_search_option_files(const char *conf_file, int *argc,
+ char ***argv, uint *args_used,
+ Process_option_func func, void *func_ctx);
extern void free_defaults(char **argv);
extern void print_defaults(const char *conf_file, const char **groups);
extern my_bool my_compress(byte *, ulong *, ulong *);
diff --git a/mysys/default.c b/mysys/default.c
index 73dca3b6c2f..1c06feec634 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -83,7 +83,7 @@ static char *remove_end_comment(char *ptr);
Process config files in default directories.
SYNOPSIS
- search_files()
+ my_search_option_files()
conf_file Basename for configuration file to search for.
If this is a path, then only this file is read.
argc Pointer to argc of original program
@@ -103,13 +103,13 @@ static char *remove_end_comment(char *ptr);
1 given cinf_file doesn't exist
*/
-static int search_files(const char *conf_file, int *argc, char ***argv,
+int my_search_option_files(const char *conf_file, int *argc, char ***argv,
uint *args_used, Process_option_func func,
void *func_ctx)
{
const char **dirs, *forced_default_file;
int error= 0;
- DBUG_ENTER("search_files");
+ DBUG_ENTER("my_search_option_files");
/* Check if we want to force the use a specific default file */
get_defaults_files(*argc, *argv,
@@ -181,40 +181,6 @@ err:
/*
- Simplified version of search_files (no argv, argc to process).
-
- SYNOPSIS
- process_default_option_files()
- conf_file Basename for configuration file to search for.
- If this is a path, then only this file is read.
- func Pointer to the function to process options
- func_ctx It's context. Usually it is the structure to
- store additional options.
-
- DESCRIPTION
-
- Often we want only to get options from default config files. In this case we
- don't want to provide any argc and argv parameters. This function is a
- simplified variant of search_files which allows us to forget about
- argc, argv.
-
- RETURN
- 0 ok
- 1 given cinf_file doesn't exist
-*/
-
-int process_default_option_files(const char *conf_file,
- Process_option_func func, void *func_ctx)
-{
- int argc= 1;
- /* this is a dummy variable for search_files() */
- uint args_used;
-
- return search_files(conf_file, &argc, NULL, &args_used, func, func_ctx);
-}
-
-
-/*
The option handler for load_defaults.
SYNOPSIS
@@ -363,7 +329,7 @@ int load_defaults(const char *conf_file, const char **groups,
ctx.args= &args;
ctx.group= &group;
- error= search_files(conf_file, argc, argv, &args_used,
+ error= my_search_option_files(conf_file, argc, argv, &args_used,
handle_default_option, (void *) &ctx);
/*
Here error contains <> 0 only if we have a fully specified conf_file
diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc
index f2140ee7200..165b06644f4 100644
--- a/server-tools/instance-manager/instance.cc
+++ b/server-tools/instance-manager/instance.cc
@@ -297,8 +297,9 @@ int Instance::init(const char *name_arg)
int Instance::complete_initialization(Instance_map *instance_map_arg,
- const char *mysqld_path)
+ const char *mysqld_path,
+ int only_instance)
{
instance_map= instance_map_arg;
- return options.complete_initialization(mysqld_path);
+ return options.complete_initialization(mysqld_path, only_instance);
}
diff --git a/server-tools/instance-manager/instance.h b/server-tools/instance-manager/instance.h
index d2a3eb98410..9f3334ba464 100644
--- a/server-tools/instance-manager/instance.h
+++ b/server-tools/instance-manager/instance.h
@@ -35,7 +35,7 @@ public:
~Instance();
int init(const char *name);
int complete_initialization(Instance_map *instance_map_arg,
- const char *mysqld_path);
+ const char *mysqld_path, int only_instance= 0);
bool is_running();
int start();
diff --git a/server-tools/instance-manager/instance_map.cc b/server-tools/instance-manager/instance_map.cc
index 191677889e9..919f9c955a4 100644
--- a/server-tools/instance-manager/instance_map.cc
+++ b/server-tools/instance-manager/instance_map.cc
@@ -110,10 +110,10 @@ err_new_instance:
C_MODE_END
-Instance_map::Instance_map(const char *default_mysqld_path_arg)
+Instance_map::Instance_map(const char *default_mysqld_path_arg,
+ const char *first_option_arg):
+mysqld_path(default_mysqld_path_arg), first_option(first_option_arg)
{
- mysqld_path= default_mysqld_path_arg;
-
pthread_mutex_init(&LOCK_instance_map, 0);
}
@@ -193,9 +193,10 @@ int Instance_map::complete_initialization()
/*
After an instance have been added to the instance_map,
- hash_free should handle it's deletion.
+ hash_free should handle it's deletion => goto err, not
+ err_instance.
*/
- if (instance->complete_initialization(this, mysqld_path))
+ if (instance->complete_initialization(this, mysqld_path, 1))
goto err;
}
else
@@ -220,7 +221,25 @@ err_instance:
int Instance_map::load()
{
- if (process_default_option_files("my", process_option, (void *) this) ||
+ int argc= 1;
+ /* this is a dummy variable for search_option_files() */
+ uint args_used= 0;
+ const char *argv_options[3];
+ char **argv= (char **) &argv_options;
+
+ /* the name of the program may be orbitrary here in fact */
+ argv_options[0]= "mysqlmanager";
+ if (first_option != NULL)
+ {
+ argc= 2;
+ argv_options[1]= first_option;
+ argv_options[2]= '\0';
+ }
+ else
+ argv_options[1]= '\0';
+
+ if (my_search_option_files("my", &argc, (char ***) &argv, &args_used,
+ process_option, (void *) this) ||
complete_initialization())
return 1;
diff --git a/server-tools/instance-manager/instance_map.h b/server-tools/instance-manager/instance_map.h
index 60fde43ce12..98d98b5c516 100644
--- a/server-tools/instance-manager/instance_map.h
+++ b/server-tools/instance-manager/instance_map.h
@@ -64,7 +64,8 @@ public:
int unlock();
int init();
- Instance_map(const char *default_mysqld_path_arg);
+ Instance_map(const char *default_mysqld_path_arg,
+ const char *first_option_arg);
~Instance_map();
/* loads options from config files */
@@ -79,6 +80,7 @@ public:
Guardian_thread *guardian;
private:
+ const char *first_option;
enum { START_HASH_SIZE = 16 };
pthread_mutex_t LOCK_instance_map;
HASH hash;
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index 6b795934d08..4242b8b6454 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -123,7 +123,8 @@ pid_t Instance_options::get_pid()
}
-int Instance_options::complete_initialization(const char *default_path)
+int Instance_options::complete_initialization(const char *default_path,
+ int only_instance)
{
const char *tmp;
@@ -140,11 +141,23 @@ int Instance_options::complete_initialization(const char *default_path)
{
char pidfilename[MAX_PATH_LEN];
char hostname[MAX_PATH_LEN];
+
+ /*
+ If we created only one istance [mysqld], because no config. files were
+ found, we would like to model mysqld pid file values.
+ */
if (!gethostname(hostname, sizeof(hostname) - 1))
- strxnmov(pidfilename, MAX_PATH_LEN - 1, "--pid-file=", hostname, "-",
- instance_name, ".pid", NullS);
+ (only_instance == 0) ?
+ strxnmov(pidfilename, MAX_PATH_LEN - 1, "--pid-file=", instance_name, "-",
+ hostname, ".pid", NullS):
+ strxnmov(pidfilename, MAX_PATH_LEN - 1, "--pid-file=", hostname,
+ ".pid", NullS);
+
else
+ (only_instance == 0) ?
strxnmov(pidfilename, MAX_PATH_LEN - 1, "--pid-file=", instance_name,
+ ".pid", NullS):
+ strxnmov(pidfilename, MAX_PATH_LEN - 1, "--pid-file=", "mysql",
".pid", NullS);
add_option(pidfilename);
diff --git a/server-tools/instance-manager/instance_options.h b/server-tools/instance-manager/instance_options.h
index 888658969f2..5e91ee80f00 100644
--- a/server-tools/instance-manager/instance_options.h
+++ b/server-tools/instance-manager/instance_options.h
@@ -43,7 +43,7 @@ public:
{}
~Instance_options();
/* fills in argv */
- int complete_initialization(const char *default_path);
+ int complete_initialization(const char *default_path, int only_instance);
int add_option(const char* option);
int init(const char *instance_name_arg);
diff --git a/server-tools/instance-manager/manager.cc b/server-tools/instance-manager/manager.cc
index cf7820d0335..89d49ba9219 100644
--- a/server-tools/instance-manager/manager.cc
+++ b/server-tools/instance-manager/manager.cc
@@ -67,7 +67,7 @@ void manager(const Options &options)
*/
User_map user_map;
- Instance_map instance_map(options.default_mysqld_path);
+ Instance_map instance_map(options.default_mysqld_path, options.first_option);
Guardian_thread guardian_thread(thread_registry,
&instance_map,
options.monitoring_interval);
diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc
index b136ae3c386..4a9745451a1 100644
--- a/server-tools/instance-manager/options.cc
+++ b/server-tools/instance-manager/options.cc
@@ -37,6 +37,7 @@ const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME);
const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_FILE_NAME);
const char *Options::password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME);
const char *Options::default_mysqld_path= QUOTE(DEFAULT_MYSQLD_PATH);
+const char *Options::first_option= 0; /* No default value */
const char *Options::bind_address= 0; /* No default value */
const char *Options::user= 0; /* No default value */
uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
@@ -210,10 +211,18 @@ C_MODE_END
int Options::load(int argc, char **argv)
{
int rc;
+
+ if (argc >= 2)
+ {
+ if (is_prefix(argv[1],"--defaults-file=") ||
+ is_prefix(argv[1],"--defaults-extra-file="))
+ Options::first_option= argv[1];
+ }
+
/* config-file options are prepended to command-line ones */
load_defaults("my", default_groups, &argc, &argv);
- if (rc= handle_options(&argc, &argv, my_long_options, get_one_option))
+ if ((rc= handle_options(&argc, &argv, my_long_options, get_one_option)) != 0)
return rc;
Options::saved_argv= argv;
return 0;
diff --git a/server-tools/instance-manager/options.h b/server-tools/instance-manager/options.h
index 1b8570dd7ba..3df259864be 100644
--- a/server-tools/instance-manager/options.h
+++ b/server-tools/instance-manager/options.h
@@ -35,6 +35,8 @@ struct Options
static const char *password_file_name;
static const char *default_mysqld_path;
static const char *user;
+ /* the option which should be passed to process_default_option_files */
+ static const char *first_option;
static uint monitoring_interval;
static uint port_number;
static const char *bind_address;
diff --git a/support-files/Makefile.am b/support-files/Makefile.am
index 4a9a9c60f30..0a6077f0efc 100644
--- a/support-files/Makefile.am
+++ b/support-files/Makefile.am
@@ -19,7 +19,6 @@
EXTRA_DIST = mysql.spec.sh \
my-small.cnf.sh \
- my.cnf \
my-medium.cnf.sh \
my-large.cnf.sh \
my-huge.cnf.sh \
diff --git a/support-files/my.cnf b/support-files/my.cnf
deleted file mode 100644
index 062c78be46a..00000000000
--- a/support-files/my.cnf
+++ /dev/null
@@ -1,2 +0,0 @@
-[mysqld]
-port=3307