summaryrefslogtreecommitdiff
path: root/server-tools
diff options
context:
space:
mode:
authorunknown <petr@mysql.com>2006-02-10 21:03:49 +0300
committerunknown <petr@mysql.com>2006-02-10 21:03:49 +0300
commit2449ef8fec5537187a593492fef8e065032e5bdf (patch)
tree4d13c2225f6d16194332e4013c8e5e6a67ec4e21 /server-tools
parent3e97cc95d7be5f62174709964bcb1a05f376f53e (diff)
parent0f23bab697710694135f72e5b1cfb4222d0fc2bb (diff)
downloadmariadb-git-2449ef8fec5537187a593492fef8e065032e5bdf.tar.gz
Merge mysql.com:/home/cps/mysql/devel/5.0-mike
into mysql.com:/home/cps/mysql/devel/5.1-merge mysql-test/r/im_life_cycle.result: Auto merged mysql-test/t/im_life_cycle.imtest: Auto merged server-tools/instance-manager/commands.cc: Auto merged
Diffstat (limited to 'server-tools')
-rw-r--r--server-tools/instance-manager/Makefile.am6
-rw-r--r--server-tools/instance-manager/commands.cc2
-rw-r--r--server-tools/instance-manager/instance.cc4
-rw-r--r--server-tools/instance-manager/instance_map.cc26
-rw-r--r--server-tools/instance-manager/mysqlmanager.cc3
-rw-r--r--server-tools/instance-manager/options.cc5
-rw-r--r--server-tools/instance-manager/options.h1
-rw-r--r--server-tools/instance-manager/parse.cc10
-rw-r--r--server-tools/instance-manager/portability.h3
-rw-r--r--server-tools/instance-manager/priv.cc3
-rw-r--r--server-tools/instance-manager/priv.h5
11 files changed, 52 insertions, 16 deletions
diff --git a/server-tools/instance-manager/Makefile.am b/server-tools/instance-manager/Makefile.am
index 7449735f0bf..5b9690322aa 100644
--- a/server-tools/instance-manager/Makefile.am
+++ b/server-tools/instance-manager/Makefile.am
@@ -30,11 +30,9 @@ liboptions_a_CXXFLAGS= $(CXXFLAGS) \
-DDEFAULT_PID_FILE_NAME="$(localstatedir)/mysqlmanager.pid" \
-DDEFAULT_LOG_FILE_NAME="$(localstatedir)/mysqlmanager.log" \
-DDEFAULT_SOCKET_FILE_NAME="/tmp/mysqlmanager.sock" \
- -DDEFAULT_PASSWORD_FILE_NAME="$(sysconfdir)/mysqlmanager.passwd" \
+ -DDEFAULT_PASSWORD_FILE_NAME="/etc/mysqlmanager.passwd" \
-DDEFAULT_MYSQLD_PATH="$(libexecdir)/mysqld$(EXEEXT)" \
- -DDEFAULT_MONITORING_INTERVAL="20" \
- -DDEFAULT_PORT="2273" \
- -DDEFAULT_CONFIG_FILE="/etc/my.cnf" \
+ -DDEFAULT_CONFIG_FILE="/etc/my.cnf" \
-DPROTOCOL_VERSION=@PROTOCOL_VERSION@
liboptions_a_SOURCES= options.h options.cc priv.h priv.cc
diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc
index cde0f784f39..7b999f61503 100644
--- a/server-tools/instance-manager/commands.cc
+++ b/server-tools/instance-manager/commands.cc
@@ -525,7 +525,7 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id)
read_buff.reserve(0, buff_size);
/* read in one chunk */
- read_len= my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0));
+ read_len= (int)my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0));
if ((read_len= my_read(fd, (byte*) read_buff.buffer,
buff_size, MYF(0))) < 0)
diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc
index 3d04403f830..39381b457ab 100644
--- a/server-tools/instance-manager/instance.cc
+++ b/server-tools/instance-manager/instance.cc
@@ -418,6 +418,10 @@ bool Instance::is_running()
if (options.mysqld_socket)
socket= strchr(options.mysqld_socket, '=') + 1;
+ /* no port was specified => instance falled back to default value */
+ if (!options.mysqld_port && !options.mysqld_socket)
+ port= SERVER_DEFAULT_PORT;
+
pthread_mutex_lock(&LOCK_instance);
mysql_init(&mysql);
diff --git a/server-tools/instance-manager/instance_map.cc b/server-tools/instance-manager/instance_map.cc
index 611eda457f2..7dfe0ae688b 100644
--- a/server-tools/instance-manager/instance_map.cc
+++ b/server-tools/instance-manager/instance_map.cc
@@ -229,11 +229,33 @@ int Instance_map::load()
uint args_used= 0;
const char *argv_options[3];
char **argv= (char **) &argv_options;
-
+ char defaults_file_arg[FN_REFLEN];
/* the name of the program may be orbitrary here in fact */
argv_options[0]= "mysqlmanager";
- argv_options[1]= '\0';
+
+ /*
+ If the option file was forced by the user when starting
+ the IM with --defaults-file=xxxx, make sure it is also
+ passed as --defaults-file, not only as Options::config_file.
+ This is important for option files given with relative path:
+ e.g. --defaults-file=my.cnf.
+ Otherwise my_search_option_files will treat "my.cnf" as a group
+ name and start looking for files named "my.cnf.cnf" in all
+ default dirs. Which is not what we want.
+ */
+ if (Options::is_forced_default_file)
+ {
+ snprintf(defaults_file_arg, FN_REFLEN, "--defaults-file=%s",
+ Options::config_file);
+
+ argv_options[1]= defaults_file_arg;
+ argv_options[2]= '\0';
+
+ argc= 2;
+ }
+ else
+ argv_options[1]= '\0';
/*
If the routine failed, we'll simply fallback to defaults in
diff --git a/server-tools/instance-manager/mysqlmanager.cc b/server-tools/instance-manager/mysqlmanager.cc
index 3d2907f4776..d0b2cf2666c 100644
--- a/server-tools/instance-manager/mysqlmanager.cc
+++ b/server-tools/instance-manager/mysqlmanager.cc
@@ -82,12 +82,13 @@ int main(int argc, char *argv[])
int return_value= 1;
init_environment(argv[0]);
Options options;
- struct passwd *user_info;
if (options.load(argc, argv))
goto err;
#ifndef __WIN__
+ struct passwd *user_info;
+
if ((user_info= check_user(options.user)))
{
if (set_user(options.user, user_info))
diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc
index b16fcabae01..8119e8fc0ea 100644
--- a/server-tools/instance-manager/options.cc
+++ b/server-tools/instance-manager/options.cc
@@ -55,6 +55,8 @@ uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
uint Options::port_number= DEFAULT_PORT;
/* just to declare */
char **Options::saved_argv= NULL;
+/* Remember if the config file was forced */
+bool Options::is_forced_default_file= 0;
/*
List of options, accepted by the instance manager.
@@ -118,7 +120,7 @@ static struct my_option my_long_options[] =
" Server binary.",
(gptr *) &Options::default_mysqld_path,
(gptr *) &Options::default_mysqld_path,
- 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
+ 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 },
{ "monitoring-interval", OPT_MONITORING_INTERVAL, "Interval to monitor"
" instances in seconds.",
@@ -254,6 +256,7 @@ int Options::load(int argc, char **argv)
if (is_prefix(argv[1], "--defaults-file="))
{
Options::config_file= strchr(argv[1], '=') + 1;
+ Options::is_forced_default_file= 1;
}
if (is_prefix(argv[1], "--defaults-extra-file=") ||
is_prefix(argv[1], "--no-defaults"))
diff --git a/server-tools/instance-manager/options.h b/server-tools/instance-manager/options.h
index 6d719c69629..abb094eac93 100644
--- a/server-tools/instance-manager/options.h
+++ b/server-tools/instance-manager/options.h
@@ -36,6 +36,7 @@ struct Options
static char run_as_service; /* handle_options doesn't support bool */
static const char *user;
#endif
+ static bool is_forced_default_file;
static const char *log_file_name;
static const char *pid_file_name;
static const char *socket_file_name;
diff --git a/server-tools/instance-manager/parse.cc b/server-tools/instance-manager/parse.cc
index a79a6ad6742..9d9064240d4 100644
--- a/server-tools/instance-manager/parse.cc
+++ b/server-tools/instance-manager/parse.cc
@@ -166,7 +166,8 @@ Command *parse_command(Instance_map *map, const char *text)
skip= true;
case TOK_SET:
- get_text_id(&text, &instance_name_len, &instance_name);
+ if (get_text_id(&text, &instance_name_len, &instance_name))
+ goto syntax_error;
text+= instance_name_len;
/* the next token should be a dot */
@@ -221,7 +222,8 @@ Command *parse_command(Instance_map *map, const char *text)
switch (Token tok2= shift_token(&text, &word_len)) {
case TOK_OPTIONS:
case TOK_STATUS:
- get_text_id(&text, &instance_name_len, &instance_name);
+ if (get_text_id(&text, &instance_name_len, &instance_name))
+ goto syntax_error;
text+= instance_name_len;
/* check that this is the end of the command */
get_word(&text, &word_len);
@@ -273,7 +275,8 @@ Command *parse_command(Instance_map *map, const char *text)
goto syntax_error;
}
/* get the size of the log we want to retrieve */
- get_text_id(&text, &word_len, &log_size);
+ if (get_text_id(&text, &word_len, &log_size))
+ goto syntax_error;
text+= word_len;
/* this parameter is required */
if (!word_len)
@@ -291,7 +294,6 @@ Command *parse_command(Instance_map *map, const char *text)
instance_name_len, log_type,
log_size, text);
- //get_text_id(&text, &log_size_len, &log_size);
break;
case '\0':
command= new Show_instance_log(map, instance_name,
diff --git a/server-tools/instance-manager/portability.h b/server-tools/instance-manager/portability.h
index 2bdeff71a72..1a3be5705e3 100644
--- a/server-tools/instance-manager/portability.h
+++ b/server-tools/instance-manager/portability.h
@@ -8,13 +8,12 @@
#ifdef __WIN__
#define vsnprintf _vsnprintf
+#define snprintf _snprintf
#define SIGKILL 9
#define SHUT_RDWR 0x2
/*TODO: fix this */
-#define DEFAULT_MONITORING_INTERVAL 20
-#define DEFAULT_PORT 2273
#define PROTOCOL_VERSION 10
typedef int pid_t;
diff --git a/server-tools/instance-manager/priv.cc b/server-tools/instance-manager/priv.cc
index e39c12f4ebb..d2d6a3f636c 100644
--- a/server-tools/instance-manager/priv.cc
+++ b/server-tools/instance-manager/priv.cc
@@ -15,6 +15,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <my_global.h>
+#include <mysql_com.h>
#include "priv.h"
#include "portability.h"
@@ -52,7 +53,7 @@ unsigned long net_buffer_length= 16384;
unsigned long max_allowed_packet= 16384;
-unsigned long net_read_timeout= 30; // same as in mysqld
+unsigned long net_read_timeout= NET_WAIT_TIMEOUT; // same as in mysqld
unsigned long net_write_timeout= 60; // same as in mysqld
diff --git a/server-tools/instance-manager/priv.h b/server-tools/instance-manager/priv.h
index 4739bca68eb..af6d2837933 100644
--- a/server-tools/instance-manager/priv.h
+++ b/server-tools/instance-manager/priv.h
@@ -24,6 +24,11 @@
#endif
#include "my_pthread.h"
+/* IM-wide platform-independent defines */
+#define SERVER_DEFAULT_PORT 3306
+#define DEFAULT_MONITORING_INTERVAL 20
+#define DEFAULT_PORT 2273
+
/* the pid of the manager process (of the signal thread on the LinuxThreads) */
extern pid_t manager_pid;