summaryrefslogtreecommitdiff
path: root/server-tools/instance-manager/instance_options.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server-tools/instance-manager/instance_options.cc')
-rw-r--r--server-tools/instance-manager/instance_options.cc111
1 files changed, 61 insertions, 50 deletions
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index ce7d43db74a..b2602af6066 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -21,7 +21,6 @@
#include "instance_options.h"
#include "parse_output.h"
-#include "parse.h"
#include "buffer.h"
#include <my_sys.h>
@@ -36,7 +35,7 @@
get_default_option()
result buffer to put found value
result_len buffer size
- oprion_name the name of the option, prefixed with "--"
+ option_name the name of the option, prefixed with "--"
DESCRIPTION
@@ -47,6 +46,7 @@
1 - error occured
*/
+
int Instance_options::get_default_option(char *result, size_t result_len,
const char *option_name)
{
@@ -76,16 +76,30 @@ err:
}
+/*
+ Get compiled-in value of default_option
+
+ SYNOPSYS
+ get_default_option()
+ result buffer to put found value
+ result_len buffer size
+ option_name the name of the option, prefixed with "--"
+
+ DESCRIPTION
+
+ Get compile-in value of requested option from server
+
+ RETURN
+ 0 - ok
+ 1 - error occured
+*/
+
int Instance_options::fill_log_options()
{
- /* array for the log option for mysqld */
- enum { MAX_LOG_OPTIONS= 8 };
- enum { MAX_LOG_OPTION_LENGTH= 256 };
- /* the last option must be '\0', so we reserve space for it */
- char log_options[MAX_LOG_OPTIONS + 1][MAX_LOG_OPTION_LENGTH];
Buffer buff;
uint position= 0;
char **tmp_argv= argv;
+ enum { MAX_LOG_OPTION_LENGTH= 256 };
char datadir[MAX_LOG_OPTION_LENGTH];
char hostname[MAX_LOG_OPTION_LENGTH];
uint hostname_length;
@@ -93,43 +107,17 @@ int Instance_options::fill_log_options()
{
const char *name;
uint length;
- const char **value;
+ char **value;
const char *default_suffix;
- } logs[]=
+ } logs_st[]=
{
- {"--log-error", 11, &error_log, ".err"},
- {"--log", 5, &query_log, ".log"},
- {"--log-slow-queries", 18, &slow_log, "-slow.log"},
+ {"--log-error", 11, &(logs[LOG_ERROR]), ".err"},
+ {"--log", 5, &(logs[LOG_GENERAL]), ".log"},
+ {"--log-slow-queries", 18, &(logs[LOG_SLOW]), "-slow.log"},
{NULL, 0, NULL, NULL}
};
struct log_files_st *log_files;
- /* clean the buffer before usage */
- bzero(log_options, sizeof(log_options));
-
- /* create a "mysqld <argv_options>" command in the buffer */
- buff.append(position, mysqld_path, strlen(mysqld_path));
- position= strlen(mysqld_path);
-
- /* skip the first option */
- tmp_argv++;
-
- while (*tmp_argv != 0)
- {
- buff.append(position, " ", 1);
- position++;
- buff.append(position, *tmp_argv, strlen(*tmp_argv));
- position+= strlen(*tmp_argv);
- tmp_argv++;
- }
-
- buff.append(position, "\0", 1);
- position++;
-
- /* get options and parse them */
- if (parse_arguments(buff.buffer, "--log", (char *) log_options,
- MAX_LOG_OPTIONS + 1, MAX_LOG_OPTION_LENGTH))
- goto err;
/* compute hostname and datadir for the instance */
if (mysqld_datadir == NULL)
{
@@ -148,11 +136,11 @@ int Instance_options::fill_log_options()
hostname_length= strlen(hostname);
- for (log_files= logs; log_files->name; log_files++)
+ for (log_files= logs_st; log_files->name; log_files++)
{
- for (int i=0; (i < MAX_LOG_OPTIONS) && (log_options[i][0] != '\0'); i++)
+ for (int i=0; (argv[i] != 0); i++)
{
- if (!strncmp(log_options[i], log_files->name, log_files->length))
+ if (!strncmp(argv[i], log_files->name, log_files->length))
{
/*
This is really log_files->name option if and only if it is followed
@@ -160,8 +148,8 @@ int Instance_options::fill_log_options()
options as '--log' and '--log-bin'. This is checked in the following
two statements.
*/
- if (log_options[i][log_files->length] == '\0' ||
- my_isspace(default_charset_info, log_options[i][log_files->length]))
+ if (argv[i][log_files->length] == '\0' ||
+ my_isspace(default_charset_info, argv[i][log_files->length]))
{
char full_name[MAX_LOG_OPTION_LENGTH];
@@ -178,21 +166,25 @@ int Instance_options::fill_log_options()
else
goto err;
- *(log_files->value)= strdup_root(&alloc, datadir);
+ /*
+ If there were specified two identical logfiles options,
+ we would loose some memory in MEM_ROOT here. However
+ this situation is not typical.
+ */
+ *(log_files->value)= strdup_root(&alloc, full_name);
}
- if (log_options[i][log_files->length] == '=')
+ if (argv[i][log_files->length] == '=')
{
char full_name[MAX_LOG_OPTION_LENGTH];
- fn_format(full_name, log_options[i] +log_files->length + 1,
+ fn_format(full_name, argv[i] +log_files->length + 1,
datadir, "", MY_UNPACK_FILENAME | MY_SAFE_PATH);
if (!(*(log_files->value)=
strdup_root(&alloc, full_name)))
goto err;
}
-
}
}
}
@@ -205,6 +197,25 @@ err:
}
+/*
+ Get the full pid file name with path
+
+ SYNOPSYS
+ get_pid_filaname()
+ result buffer to sotre the pidfile value
+
+ IMPLEMENTATION
+ Get the data directory, then get the pid filename
+ (which is always set for an instance), then load the
+ full path with my_load_path(). It takes into account
+ whether it is already an absolute path or it should be
+ prefixed with the datadir and so on.
+
+ RETURN
+ 0 - ok
+ 1 - error occured
+*/
+
int Instance_options::get_pid_filename(char *result)
{
const char *pid_file= mysqld_pid_file;
@@ -405,7 +416,7 @@ int Instance_options::add_to_argv(const char* option)
DBUG_ASSERT(filled_default_options < MAX_NUMBER_OF_DEFAULT_OPTIONS);
if ((option))
- argv[filled_default_options++]= (char *) option;
+ argv[filled_default_options++]= (char*) option;
return 0;
}
@@ -433,10 +444,10 @@ int Instance_options::init(const char *instance_name_arg)
init_alloc_root(&alloc, MEM_ROOT_BLOCK_SIZE, 0);
- if (my_init_dynamic_array(&options_array, sizeof(char *), 0, 32))
+ if (my_init_dynamic_array(&options_array, sizeof(char*), 0, 32))
goto err;
- if (!(instance_name= strmake_root(&alloc, (char *) instance_name_arg,
+ if (!(instance_name= strmake_root(&alloc, (char*) instance_name_arg,
instance_name_len)))
goto err;