diff options
Diffstat (limited to 'server-tools')
-rw-r--r-- | server-tools/Makefile.am | 3 | ||||
-rw-r--r-- | server-tools/instance-manager/Makefile.am | 3 | ||||
-rw-r--r-- | server-tools/instance-manager/commands.cc | 46 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_options.cc | 9 |
4 files changed, 54 insertions, 7 deletions
diff --git a/server-tools/Makefile.am b/server-tools/Makefile.am index ed316b9ac38..a249a6f6792 100644 --- a/server-tools/Makefile.am +++ b/server-tools/Makefile.am @@ -1 +1,2 @@ -SUBDIRS= instance-manager +SUBDIRS = . instance-manager +DIST_SUBDIRS = . instance-manager diff --git a/server-tools/instance-manager/Makefile.am b/server-tools/instance-manager/Makefile.am index 218eceebd12..ab08df99fd9 100644 --- a/server-tools/instance-manager/Makefile.am +++ b/server-tools/instance-manager/Makefile.am @@ -78,7 +78,8 @@ mysqlmanager_SOURCES= command.cc command.h mysqlmanager.cc \ mysql_manager_error.h \ portability.h -mysqlmanager_LDADD= liboptions.la \ +mysqlmanager_LDADD= @CLIENT_EXTRA_LDFLAGS@ \ + liboptions.la \ libnet.a \ $(top_builddir)/vio/libvio.a \ $(top_builddir)/mysys/libmysys.a \ diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc index 2c9d3236720..7b999f61503 100644 --- a/server-tools/instance-manager/commands.cc +++ b/server-tools/instance-manager/commands.cc @@ -25,6 +25,7 @@ #include "options.h" #include <m_string.h> +#include <m_ctype.h> #include <mysql.h> #include <my_dir.h> @@ -62,6 +63,31 @@ static inline int put_to_buff(Buffer *buff, const char *str, uint *position) } +static int parse_version_number(const char *version_str, char *version, + uint version_size) +{ + const char *start= version_str; + const char *end; + + // skip garbage + while (!my_isdigit(default_charset_info, *start)) + start++; + + end= start; + // skip digits and dots + while (my_isdigit(default_charset_info, *end) || *end == '.') + end++; + + if ((uint)(end - start) >= version_size) + return -1; + + strncpy(version, start, end-start); + version[end-start]= '\0'; + + return 0; +} + + /* implementation for Show_instances: */ @@ -174,9 +200,10 @@ int Show_instance_status::execute(struct st_net *net, { enum { MAX_VERSION_LENGTH= 40 }; Buffer send_buff; /* buffer for packets */ - LIST name, status, version; + LIST name, status, version, version_number; LIST *field_list; - NAME_WITH_LENGTH name_field, status_field, version_field; + NAME_WITH_LENGTH name_field, status_field, version_field, + version_number_field; uint position=0; if (!instance_name) @@ -192,7 +219,11 @@ int Show_instance_status::execute(struct st_net *net, version_field.name= (char*) "version"; version_field.length= MAX_VERSION_LENGTH; version.data= &version_field; + version_number_field.name= (char*) "version_number"; + version_number_field.length= MAX_VERSION_LENGTH; + version_number.data= &version_number_field; field_list= list_add(NULL, &version); + field_list= list_add(field_list, &version_number); field_list= list_add(field_list, &status); field_list= list_add(field_list, &name); @@ -210,10 +241,21 @@ int Show_instance_status::execute(struct st_net *net, store_to_protocol_packet(&send_buff, (char*) "offline", &position); if (instance->options.mysqld_version) + { + char parsed_version[MAX_VERSION_LENGTH]; + + parse_version_number(instance->options.mysqld_version, parsed_version, + sizeof(parsed_version)); + store_to_protocol_packet(&send_buff, parsed_version, &position); + store_to_protocol_packet(&send_buff, instance->options.mysqld_version, &position); + } else + { store_to_protocol_packet(&send_buff, (char*) "unknown", &position); + store_to_protocol_packet(&send_buff, (char*) "unknown", &position); + } if (send_buff.is_error() || diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc index 83f13b34aa2..d2946270b9e 100644 --- a/server-tools/instance-manager/instance_options.cc +++ b/server-tools/instance-manager/instance_options.cc @@ -138,9 +138,14 @@ int Instance_options::fill_instance_version() if (*result != '\0') { + char *start; /* chop the newline from the end of the version string */ result[strlen(result) - NEWLINE_LEN]= '\0'; - mysqld_version= strdup_root(&alloc, result); + /* trim leading whitespaces */ + start= result; + while (my_isspace(default_charset_info, *start)) + ++start; + mysqld_version= strdup_root(&alloc, start); } err: return rc; @@ -167,8 +172,6 @@ err: int Instance_options::fill_log_options() { 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]; |