From 8488498545a109affd83dd99b8f79e96245baec9 Mon Sep 17 00:00:00 2001 From: "petr@mysql.com" <> Date: Fri, 10 Feb 2006 03:35:07 +0300 Subject: [PATCH] IM changes by GUI team: add a version_no column to the SHOW INSTANCE STATUS output --- mysql-test/r/im_life_cycle.result | 24 +++++----- mysql-test/t/im_life_cycle.imtest | 12 ++--- server-tools/instance-manager/commands.cc | 46 ++++++++++++++++++- .../instance-manager/instance_options.cc | 9 ++-- 4 files changed, 68 insertions(+), 23 deletions(-) diff --git a/mysql-test/r/im_life_cycle.result b/mysql-test/r/im_life_cycle.result index f8eaf0ccb46..ca9ad7ce31c 100644 --- a/mysql-test/r/im_life_cycle.result +++ b/mysql-test/r/im_life_cycle.result @@ -3,22 +3,22 @@ instance_name status mysqld1 online mysqld2 offline SHOW INSTANCE STATUS mysqld1; -instance_name status version -mysqld1 online VERSION +instance_name status version_number version +mysqld1 online VERSION_NUMBER VERSION SHOW INSTANCE STATUS mysqld2; -instance_name status version -mysqld2 offline VERSION +instance_name status version_number version +mysqld2 offline VERSION_NUMBER VERSION START INSTANCE mysqld2; SHOW INSTANCES; instance_name status mysqld1 online mysqld2 online SHOW INSTANCE STATUS mysqld1; -instance_name status version -mysqld1 online VERSION +instance_name status version_number version +mysqld1 online VERSION_NUMBER VERSION SHOW INSTANCE STATUS mysqld2; -instance_name status version -mysqld2 online VERSION +instance_name status version_number version +mysqld2 online VERSION_NUMBER VERSION SHOW VARIABLES LIKE 'port'; Variable_name Value port IM_MYSQLD1_PORT @@ -28,11 +28,11 @@ instance_name status mysqld1 online mysqld2 offline SHOW INSTANCE STATUS mysqld1; -instance_name status version -mysqld1 online VERSION +instance_name status version_number version +mysqld1 online VERSION_NUMBER VERSION SHOW INSTANCE STATUS mysqld2; -instance_name status version -mysqld2 offline VERSION +instance_name status version_number version +mysqld2 offline VERSION_NUMBER VERSION START INSTANCE mysqld3; ERROR HY000: Bad instance name. Check that the instance with such a name exists START INSTANCE mysqld1; diff --git a/mysql-test/t/im_life_cycle.imtest b/mysql-test/t/im_life_cycle.imtest index c2b1c9a56ec..70851137f6d 100644 --- a/mysql-test/t/im_life_cycle.imtest +++ b/mysql-test/t/im_life_cycle.imtest @@ -18,9 +18,9 @@ ########################################################################### SHOW INSTANCES; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld1; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld2; ########################################################################### @@ -38,9 +38,9 @@ START INSTANCE mysqld2; --sleep 3 SHOW INSTANCES; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld1; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld2; --connect (mysql_con,localhost,root,,mysql,$IM_MYSQLD1_PORT,$IM_MYSQLD1_SOCK) @@ -66,9 +66,9 @@ STOP INSTANCE mysqld2; --sleep 3 SHOW INSTANCES; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld1; ---replace_column 3 VERSION +--replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld2; ########################################################################### diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc index b4dd1b469f1..cde0f784f39 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 @@ int Instance_options::fill_instance_version() 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]; -- 2.30.9