diff options
-rw-r--r-- | include/my_sys.h | 8 | ||||
-rw-r--r-- | mysys/default.c | 42 | ||||
-rw-r--r-- | server-tools/instance-manager/instance.cc | 5 | ||||
-rw-r--r-- | server-tools/instance-manager/instance.h | 2 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_map.cc | 31 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_map.h | 4 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_options.cc | 19 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_options.h | 2 | ||||
-rw-r--r-- | server-tools/instance-manager/manager.cc | 2 | ||||
-rw-r--r-- | server-tools/instance-manager/options.cc | 11 | ||||
-rw-r--r-- | server-tools/instance-manager/options.h | 2 | ||||
-rw-r--r-- | support-files/Makefile.am | 1 | ||||
-rw-r--r-- | support-files/my.cnf | 2 |
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 |