mariadb/server-tools/instance-manager/guardian.cc

471 lines
10 KiB
C++
Raw Normal View History

Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
/* Copyright (C) 2004 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Some minor fixes revealed as warnings by Intel compiler. client/mysqltest.c: Fixed a warning from using reference to a memory area, which is outside an object. This is just a minor clean-up, not a bug fix. server-tools/instance-manager/buffer.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/buffer.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/command.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/command.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/guardian.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/guardian.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance_map.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance_map.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance_options.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/instance_options.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/listener.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/listener.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/mysql_connection.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/mysql_connection.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/options.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/options.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/parse_output.cc: Removed unused goto. server-tools/instance-manager/thread_registry.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/thread_registry.h: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/user_map.cc: Fixed pragma warning for those compilers that do not support it. server-tools/instance-manager/user_map.h: Fixed pragma warning for those compilers that do not support it. sql/field.cc: Fixed a warning about overflow. sql/item.h: Fixed implicit function declaration warning. sql/item_sum.cc: Fixed implicit function declaration warning.
2005-09-23 21:28:56 +03:00
#if defined(__GNUC__) && defined(USE_PRAGMA_IMPLEMENTATION)
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
#pragma implementation
#endif
#include "guardian.h"
#include <string.h>
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
#include <sys/types.h>
#include <signal.h>
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
#include "instance.h"
#include "instance_map.h"
#include "log.h"
#include "mysql_manager_error.h"
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
#include "options.h"
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/*************************************************************************
{{{ Constructor & destructor.
*************************************************************************/
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Guardian constructor.
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
SYNOPSIS
Guardian()
thread_registry_arg
instance_map_arg
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
DESCRIPTION
Nominal contructor intended for assigning references and initialize
trivial objects. Real initialization is made by init() method.
*/
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
Guardian::Guardian(Thread_registry *thread_registry_arg,
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Instance_map *instance_map_arg)
:shutdown_requested(FALSE),
stopped(FALSE),
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
thread_registry(thread_registry_arg),
2006-11-17 20:07:52 +03:00
instance_map(instance_map_arg),
guarded_instances(0)
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
pthread_mutex_init(&LOCK_guardian, 0);
pthread_cond_init(&COND_guardian, 0);
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
Cleanup: manually port the polishing parts from Alik's changeset for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned mysql-test/t/im_options.imtest: Update test for new framework. server-tools/instance-manager/IMService.cpp: Use Manager class instead of manager(). Reformat comments. server-tools/instance-manager/Makefile.am: Treat warnings as errors. server-tools/instance-manager/command.cc: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/command.h: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/commands.cc: Remove Instance_map argument from command constructors. server-tools/instance-manager/commands.h: Remove Instance_map argument from command constructors. server-tools/instance-manager/guardian.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/guardian.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/instance_map.cc: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/instance_map.h: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/manager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/manager.h: Transfer manager() function into Manager class (singleton). server-tools/instance-manager/mysql_connection.cc: Polishing. server-tools/instance-manager/mysqlmanager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/parse.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/parse.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/priv.cc: Move create_pid_file() out of manager.cc. server-tools/instance-manager/priv.h: Move create_pid_file() out of manager.cc. server-tools/instance-manager/thread_registry.h: Prevent copying. server-tools/instance-manager/user_map.cc: Fix alignment.
2006-11-16 23:36:20 +03:00
Guardian::~Guardian()
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/*
NOTE: it's necessary to synchronize here, because Guiardian thread can be
still alive an hold the mutex (because it is detached and we have no
control over it).
*/
lock();
unlock();
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
pthread_mutex_destroy(&LOCK_guardian);
pthread_cond_destroy(&COND_guardian);
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/*************************************************************************
}}}
*************************************************************************/
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Send request to stop Guardian.
SYNOPSIS
request_shutdown()
*/
Cleanup: manually port the polishing parts from Alik's changeset for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned mysql-test/t/im_options.imtest: Update test for new framework. server-tools/instance-manager/IMService.cpp: Use Manager class instead of manager(). Reformat comments. server-tools/instance-manager/Makefile.am: Treat warnings as errors. server-tools/instance-manager/command.cc: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/command.h: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/commands.cc: Remove Instance_map argument from command constructors. server-tools/instance-manager/commands.h: Remove Instance_map argument from command constructors. server-tools/instance-manager/guardian.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/guardian.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/instance_map.cc: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/instance_map.h: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/manager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/manager.h: Transfer manager() function into Manager class (singleton). server-tools/instance-manager/mysql_connection.cc: Polishing. server-tools/instance-manager/mysqlmanager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/parse.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/parse.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/priv.cc: Move create_pid_file() out of manager.cc. server-tools/instance-manager/priv.h: Move create_pid_file() out of manager.cc. server-tools/instance-manager/thread_registry.h: Prevent copying. server-tools/instance-manager/user_map.cc: Fix alignment.
2006-11-16 23:36:20 +03:00
void Guardian::request_shutdown()
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
{
stop_instances();
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
lock();
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
shutdown_requested= TRUE;
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
unlock();
ping();
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Process an instance.
SYNOPSIS
process_instance()
instance a pointer to the instance for processing
MT-NOTE:
- the given instance must be locked before calling this operation;
- Guardian must be locked before calling this operation.
*/
void Guardian::process_instance(Instance *instance)
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
{
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
int restart_retry= 100;
time_t current_time= time(NULL);
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
if (instance->get_state() == Instance::STOPPING)
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/* This brach is executed during shutdown. */
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/* This returns TRUE if and only if an instance was stopped for sure. */
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
if (instance->is_crashed())
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
log_info("Guardian: '%s' stopped.",
(const char *) instance->get_name()->str);
instance->set_state(Instance::STOPPED);
}
else if ((uint) (current_time - instance->last_checked) >=
instance->options.get_shutdown_delay())
{
log_info("Guardian: '%s' hasn't stopped within %d secs.",
(const char *) instance->get_name()->str,
(int) instance->options.get_shutdown_delay());
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
instance->kill_mysqld(SIGKILL);
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
log_info("Guardian: pretend that '%s' is killed.",
(const char *) instance->get_name()->str);
instance->set_state(Instance::STOPPED);
}
else
{
log_info("Guardian: waiting for '%s' to stop (%d secs left).",
(const char *) instance->get_name()->str,
(int) (instance->options.get_shutdown_delay() -
current_time + instance->last_checked));
}
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
return;
}
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
if (instance->is_mysqld_running())
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
/* The instance can be contacted on it's port */
/* If STARTING also check that pidfile has been created */
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
if (instance->get_state() == Instance::STARTING &&
instance->options.load_pid() == 0)
{
/* Pid file not created yet, don't go to STARTED state yet */
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
else if (instance->get_state() != Instance::STARTED)
{
/* clear status fields */
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
log_info("Guardian: '%s' is running, set state to STARTED.",
(const char *) instance->options.instance_name.str);
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->reset_stat();
instance->set_state(Instance::STARTED);
}
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
}
else
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
switch (instance->get_state()) {
case Instance::NOT_STARTED:
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
log_info("Guardian: starting '%s'...",
(const char *) instance->options.instance_name.str);
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/* NOTE: set state to STARTING _before_ start() is called. */
instance->set_state(Instance::STARTING);
instance->last_checked= current_time;
instance->start_mysqld();
return;
case Instance::STARTED: /* fallthrough */
case Instance::STARTING: /* let the instance start or crash */
if (!instance->is_crashed())
return;
instance->crash_moment= current_time;
instance->last_checked= current_time;
instance->set_state(Instance::JUST_CRASHED);
/* fallthrough -- restart an instance immediately */
case Instance::JUST_CRASHED:
if (current_time - instance->crash_moment <= 2)
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
if (instance->is_crashed())
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->start_mysqld();
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
log_info("Guardian: starting '%s'...",
(const char *) instance->options.instance_name.str);
}
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
}
Cleanup the instance manager code. BitKeeper/deleted/.del-factory.h~c1679505d3a6dd53: Delete: server-tools/instance-manager/factory.h BitKeeper/deleted/.del-factory.cc~6836cccd4cd35b4d: Delete: server-tools/instance-manager/factory.cc server-tools/instance-manager/Makefile.am: - remove Commands_factory: it'll be needed when we add support for NNTP/HTTP connections, currently it only adds unnecessary complexity. server-tools/instance-manager/commands.cc: - fix coding style: no else after return; fix comments, make one place a bit faster. server-tools/instance-manager/guardian.cc: - fix coding style and comments. - we must register the current thread in the thread registry before entering pthread_cond_timedwait, because at shutdown the thread registry will try to kick out of wait all blocked threads. Unregistered threads are not awakened by the registry. This fixes the failinig assert in Thread_registry::~Thread_registry at shutdown, when shutdown is requested and there is an instance monitored by Guardian. server-tools/instance-manager/guardian.h: - fix coding style: enums must start with enum_ server-tools/instance-manager/instance.h: - move comment to the variable it comments server-tools/instance-manager/instance_map.cc: - cleanup server-tools/instance-manager/instance_options.cc: - cleanup; no else after return (fix coding style). server-tools/instance-manager/manager.cc: - fix alignment; make some code easier to read. server-tools/instance-manager/mysql_connection.cc: - remove Commands_factory server-tools/instance-manager/options.cc: - fix a possible crash when the instance manager is started with --no-defaults --defaults-file=~/.my.cnf: if we return without cloning saved_argv by calling load_defaults, Options::cleanup will crash on attempt to free_defaults(saved_argv); server-tools/instance-manager/parse.cc: - get rid of Commands_factory server-tools/instance-manager/parse.h: - get rid of Commands_factory server-tools/instance-manager/parse_output.cc: - in parse_output_and_get_value return error also if the specified pattern was not found, or the command failed to execute. server-tools/instance-manager/portability.h: - fix coding style (// comments are allowed only at ends of lines) server-tools/instance-manager/thread_registry.cc: - implement Thread_registry::cond_timedwait server-tools/instance-manager/thread_registry.h: - implement Thread_registry::cond_timedwait; remove unused out parameter from Thread_registry::cond_wait. server-tools/instance-manager/user_map.cc: - safety: newline can take 2 bytes.
2005-08-29 23:29:35 +04:00
else
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->set_state(Instance::CRASHED);
return;
case Instance::CRASHED: /* just regular restarts */
if (current_time - instance->last_checked <=
Options::Main::monitoring_interval)
return;
if (instance->restart_counter < restart_retry)
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
if (instance->is_crashed())
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->start_mysqld();
instance->last_checked= current_time;
log_info("Guardian: restarting '%s'...",
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
(const char *) instance->options.instance_name.str);
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
}
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
else
{
log_info("Guardian: can not start '%s'. "
"Abandoning attempts to (re)start it",
(const char *) instance->options.instance_name.str);
instance->set_state(Instance::CRASHED_AND_ABANDONED);
}
return;
case Instance::CRASHED_AND_ABANDONED:
return; /* do nothing */
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
default:
DBUG_ASSERT(0);
}
}
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Port cleanups, trivial refactoring and code rearrangements from Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned" to ease review process. Evaluate global variable linuxthreads before starting threads to avoid a race. server-tools/instance-manager/buffer.cc: Fix spelling. server-tools/instance-manager/command.h: Fix spelling. server-tools/instance-manager/commands.cc: Fix spelling. server-tools/instance-manager/commands.h: Fix spelling, tidy up. server-tools/instance-manager/guardian.cc: Cleanup logging, options.get_shutdown_delay() is a method, tidy up. server-tools/instance-manager/instance.cc: Rearrange methods to be the same as in Alik's patch, fix spelling errors, clean up logging texts, port comments from Alik's patch, implement some basic renames from his patch. No real changes. server-tools/instance-manager/instance.h: Tidy up, renames. server-tools/instance-manager/instance_map.cc: Fix spellings, port some refactoring from Alik's patch. server-tools/instance-manager/instance_map.h: Cleanup. server-tools/instance-manager/instance_options.cc: Cleanup. Implement Instance_options::get_shutdown_delay() and Instance_options::get_mysqld_port(). server-tools/instance-manager/instance_options.h: Cleanup. server-tools/instance-manager/listener.cc: Cleanup. server-tools/instance-manager/log.cc: Fix spelling. server-tools/instance-manager/manager.cc: Cleanup. server-tools/instance-manager/manager.h: Add getters for Manager members. server-tools/instance-manager/mysqlmanager.cc: Evaluate linuxthreads before starting threads to avoid a race. server-tools/instance-manager/parse_output.cc: Fix spelling. server-tools/instance-manager/priv.cc: Cleanup. server-tools/instance-manager/priv.h: Cleanup. server-tools/instance-manager/user_management_commands.cc: Fix spelling. server-tools/instance-manager/user_management_commands.h: Fix spelling. server-tools/instance-manager/user_map.cc: Fix spelling.
2006-11-18 01:34:44 +03:00
Main function of Guardian thread.
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
SYNOPSIS
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
run()
DESCRIPTION
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Check for all guarded instances and restart them if needed.
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
*/
Cleanup: manually port the polishing parts from Alik's changeset for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned mysql-test/t/im_options.imtest: Update test for new framework. server-tools/instance-manager/IMService.cpp: Use Manager class instead of manager(). Reformat comments. server-tools/instance-manager/Makefile.am: Treat warnings as errors. server-tools/instance-manager/command.cc: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/command.h: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/commands.cc: Remove Instance_map argument from command constructors. server-tools/instance-manager/commands.h: Remove Instance_map argument from command constructors. server-tools/instance-manager/guardian.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/guardian.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/instance_map.cc: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/instance_map.h: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/manager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/manager.h: Transfer manager() function into Manager class (singleton). server-tools/instance-manager/mysql_connection.cc: Polishing. server-tools/instance-manager/mysqlmanager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/parse.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/parse.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/priv.cc: Move create_pid_file() out of manager.cc. server-tools/instance-manager/priv.h: Move create_pid_file() out of manager.cc. server-tools/instance-manager/thread_registry.h: Prevent copying. server-tools/instance-manager/user_map.cc: Fix alignment.
2006-11-16 23:36:20 +03:00
void Guardian::run()
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
struct timespec timeout;
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
log_info("Guardian: started.");
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
thread_registry->register_thread(&thread_info);
Various fixes (cleanups, valgrind, makefiles, ...) server-tools/instance-manager/Makefile.am: increased default_monitoring interval server-tools/instance-manager/guardian.cc: some fixes for proper shutdown server-tools/instance-manager/guardian.h: removed init() prototype, as it was never used server-tools/instance-manager/instance.cc: cleanup() function removed server-tools/instance-manager/instance.h: cleanup() prototype removed server-tools/instance-manager/instance_map.cc: Instance_map::cleanup() removed, as instances have nothing to clean up server-tools/instance-manager/instance_map.h: Instance_map::cleanup() prototype removed server-tools/instance-manager/instance_options.cc: added print_argv() function for debug purposes server-tools/instance-manager/instance_options.h: declared print_argv() server-tools/instance-manager/listener.cc: some fixed in listener for proper shutdown server-tools/instance-manager/log.cc: cleanup server-tools/instance-manager/log.h: cleanup server-tools/instance-manager/manager.cc: some comments added server-tools/instance-manager/mysqlmanager.cc: we need to free memory in the very end server-tools/instance-manager/options.cc: fixed default options handling (as they were not working properly), added new method to cleanup Options server-tools/instance-manager/options.h: cleanup() declared server-tools/instance-manager/thread_registry.cc: cleanup server-tools/instance-manager/user_map.cc: missing password file is not a critical error anymore, as IM should be able to work as mysqld_safe only
2005-02-03 20:48:58 +03:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/* Loop, until all instances were shut down at the end. */
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
while (true)
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Instance_map::Iterator instances_it(instance_map);
Instance *instance;
bool all_instances_stopped= TRUE;
instance_map->lock();
Various fixes (cleanups, valgrind, makefiles, ...) server-tools/instance-manager/Makefile.am: increased default_monitoring interval server-tools/instance-manager/guardian.cc: some fixes for proper shutdown server-tools/instance-manager/guardian.h: removed init() prototype, as it was never used server-tools/instance-manager/instance.cc: cleanup() function removed server-tools/instance-manager/instance.h: cleanup() prototype removed server-tools/instance-manager/instance_map.cc: Instance_map::cleanup() removed, as instances have nothing to clean up server-tools/instance-manager/instance_map.h: Instance_map::cleanup() prototype removed server-tools/instance-manager/instance_options.cc: added print_argv() function for debug purposes server-tools/instance-manager/instance_options.h: declared print_argv() server-tools/instance-manager/listener.cc: some fixed in listener for proper shutdown server-tools/instance-manager/log.cc: cleanup server-tools/instance-manager/log.h: cleanup server-tools/instance-manager/manager.cc: some comments added server-tools/instance-manager/mysqlmanager.cc: we need to free memory in the very end server-tools/instance-manager/options.cc: fixed default options handling (as they were not working properly), added new method to cleanup Options server-tools/instance-manager/options.h: cleanup() declared server-tools/instance-manager/thread_registry.cc: cleanup server-tools/instance-manager/user_map.cc: missing password file is not a critical error anymore, as IM should be able to work as mysqld_safe only
2005-02-03 20:48:58 +03:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
while ((instance= instances_it.next()))
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->lock();
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
if (!instance->is_guarded() ||
instance->get_state() == Instance::STOPPED)
{
instance->unlock();
continue;
}
process_instance(instance);
if (instance->get_state() != Instance::STOPPED)
all_instances_stopped= FALSE;
instance->unlock();
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance_map->unlock();
lock();
if (shutdown_requested && all_instances_stopped)
{
log_info("Guardian: all guarded mysqlds stopped.");
stopped= TRUE;
unlock();
break;
}
timeout.tv_sec= time(NULL) + Options::Main::monitoring_interval;
timeout.tv_nsec= 0;
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
thread_registry->cond_timedwait(&thread_info, &COND_guardian,
&LOCK_guardian, &timeout);
unlock();
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
log_info("Guardian: stopped.");
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/* Now, when the Guardian is stopped we can stop the IM. */
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
thread_registry->unregister_thread(&thread_info);
thread_registry->request_shutdown();
log_info("Guardian: finished.");
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Return the value of stopped flag.
*/
bool Guardian::is_stopped()
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
int var;
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
lock();
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
var= stopped;
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
unlock();
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
return var;
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Wake up Guardian thread.
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
MT-NOTE: though usually the mutex associated with condition variable should
be acquired before signalling the variable, here this is not needed.
Signalling under locked mutex is used to avoid lost signals. In the current
logic however locking mutex does not guarantee that the signal will not be
lost.
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
*/
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
void Guardian::ping()
Various post-review fixes server-tools/instance-manager/buffer.cc: simplified buffer interface server-tools/instance-manager/buffer.h: simplified buffer interface server-tools/instance-manager/command.cc: Command class now uses instance_map directly server-tools/instance-manager/command.h: Made Command to use instance_map directly (not through the factory, which is not needed here in fact) server-tools/instance-manager/commands.cc: Moved mysql client/server protocol-specific functions to the commands server-tools/instance-manager/commands.h: Added a comment for Syntax_error command, fixed classes to use instance map instead of the factory server-tools/instance-manager/factory.cc: Fixed factory to give appropriate class to the commands server-tools/instance-manager/guardian.cc: Fixed guardian to delay start of new instances monitoring. Moved guardian initialization to the class from Instance map. server-tools/instance-manager/guardian.h: interface fixed server-tools/instance-manager/instance.cc: added some loging server-tools/instance-manager/instance_map.cc: All non-instance map specific functions moved from the class. Added iterator for instance_map server-tools/instance-manager/instance_map.h: All non-instance map related functions moved from the class. Added iterator for instance_map. server-tools/instance-manager/listener.cc: Added FD_CLOEXEC flag to sockets, as we don't want instances to inherit them after exec. server-tools/instance-manager/manager.cc: use guardian method moved from the instance map server-tools/instance-manager/mysql_connection.cc: cleanup server-tools/instance-manager/protocol.cc: fix according to the changes in the Buffer class
2004-10-26 23:22:12 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
pthread_cond_signal(&COND_guardian);
Various post-review fixes server-tools/instance-manager/buffer.cc: simplified buffer interface server-tools/instance-manager/buffer.h: simplified buffer interface server-tools/instance-manager/command.cc: Command class now uses instance_map directly server-tools/instance-manager/command.h: Made Command to use instance_map directly (not through the factory, which is not needed here in fact) server-tools/instance-manager/commands.cc: Moved mysql client/server protocol-specific functions to the commands server-tools/instance-manager/commands.h: Added a comment for Syntax_error command, fixed classes to use instance map instead of the factory server-tools/instance-manager/factory.cc: Fixed factory to give appropriate class to the commands server-tools/instance-manager/guardian.cc: Fixed guardian to delay start of new instances monitoring. Moved guardian initialization to the class from Instance map. server-tools/instance-manager/guardian.h: interface fixed server-tools/instance-manager/instance.cc: added some loging server-tools/instance-manager/instance_map.cc: All non-instance map specific functions moved from the class. Added iterator for instance_map server-tools/instance-manager/instance_map.h: All non-instance map related functions moved from the class. Added iterator for instance_map. server-tools/instance-manager/listener.cc: Added FD_CLOEXEC flag to sockets, as we don't want instances to inherit them after exec. server-tools/instance-manager/manager.cc: use guardian method moved from the instance map server-tools/instance-manager/mysql_connection.cc: cleanup server-tools/instance-manager/protocol.cc: fix according to the changes in the Buffer class
2004-10-26 23:22:12 +04:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Prepare list of instances.
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
SYNOPSIS
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
init()
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
MT-NOTE: Instance Map must be locked before calling the operation.
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
*/
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
void Guardian::init()
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Instance *instance;
Instance_map::Iterator iterator(instance_map);
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
while ((instance= iterator.next()))
{
instance->lock();
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->reset_stat();
instance->set_state(Instance::NOT_STARTED);
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->unlock();
}
Intermediate commit - just to make new files visible to bk in the new tree server-tools/instance-manager/Makefile.am: Fixed IM linking to avoid using both mysys and libmysql as the define the same symbols and therefore conflict server-tools/instance-manager/listener.cc: Added ability to listen network ports server-tools/instance-manager/listener.h: Various additions to the Listener_thread_args server-tools/instance-manager/log.cc: merge server-tools/instance-manager/log.h: merge server-tools/instance-manager/manager.cc: Fixes and additions to enable guardian functionality server-tools/instance-manager/manager.h: Changed manager() signature server-tools/instance-manager/mysqlmanager.cc: Various fixes server-tools/instance-manager/options.cc: Added handling of default values for new options in the Options struct. (such as default_user, default_password, monitoring_interval e.t.c) server-tools/instance-manager/options.h: Added new options to the Options struct sql/net_serv.cc: Added MYSQL_INSTANCE_MANAGER defines to enable alarm handling in the IM server-tools/instance-manager/buffer.cc: Simple implementation of variable-length buffer server-tools/instance-manager/command.cc: Abstract command. All commands are derived from Command class server-tools/instance-manager/commands.h: Interfaces for all commands we have server-tools/instance-manager/factory.cc: Commands factory. This class hides command instantiation. The idea is to handle various protocols this way. (different commands for different protocols server-tools/instance-manager/guardian.cc: Guardian thread implementation (monitor and restart instances in case of a failure server-tools/instance-manager/guardian.h: Guardian_thread and Guardian_thread_args class interface. The Guardian_thread is responsible for monitoring and restarting instances server-tools/instance-manager/instance.cc: Instance class contains methods and data to manage a single instance server-tools/instance-manager/instance.h: This file contains class an instance class interface. The class is responsible for starting/stopping an instance server-tools/instance-manager/instance_map.cc: The instance repository. This class is also responsible for initialization of Instance class objects. server-tools/instance-manager/instance_options.cc: The Instance_options class contains all methods to get and handle options of an instance server-tools/instance-manager/mysql_connection.cc: The class responsible for handling MySQL client/server protocol connections server-tools/instance-manager/mysql_manager_error.h: The list of Instance Manger-specific errors server-tools/instance-manager/parse.cc: Simple query parser server-tools/instance-manager/parse.h: Parser interface server-tools/instance-manager/protocol.cc: Here implemented functions used to handle mysql client/server protocol server-tools/instance-manager/protocol.h: Interface for MySQL client/server protocol server-tools/instance-manager/thread_registry.cc: Thread registry stores information about every thread. It's main function is to provide graceful shutdown for all threads. server-tools/instance-manager/user_map.h: User map contains hash with user names and passwords
2004-10-23 11:32:52 +04:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Cleanup the instance manager code. BitKeeper/deleted/.del-factory.h~c1679505d3a6dd53: Delete: server-tools/instance-manager/factory.h BitKeeper/deleted/.del-factory.cc~6836cccd4cd35b4d: Delete: server-tools/instance-manager/factory.cc server-tools/instance-manager/Makefile.am: - remove Commands_factory: it'll be needed when we add support for NNTP/HTTP connections, currently it only adds unnecessary complexity. server-tools/instance-manager/commands.cc: - fix coding style: no else after return; fix comments, make one place a bit faster. server-tools/instance-manager/guardian.cc: - fix coding style and comments. - we must register the current thread in the thread registry before entering pthread_cond_timedwait, because at shutdown the thread registry will try to kick out of wait all blocked threads. Unregistered threads are not awakened by the registry. This fixes the failinig assert in Thread_registry::~Thread_registry at shutdown, when shutdown is requested and there is an instance monitored by Guardian. server-tools/instance-manager/guardian.h: - fix coding style: enums must start with enum_ server-tools/instance-manager/instance.h: - move comment to the variable it comments server-tools/instance-manager/instance_map.cc: - cleanup server-tools/instance-manager/instance_options.cc: - cleanup; no else after return (fix coding style). server-tools/instance-manager/manager.cc: - fix alignment; make some code easier to read. server-tools/instance-manager/mysql_connection.cc: - remove Commands_factory server-tools/instance-manager/options.cc: - fix a possible crash when the instance manager is started with --no-defaults --defaults-file=~/.my.cnf: if we return without cloning saved_argv by calling load_defaults, Options::cleanup will crash on attempt to free_defaults(saved_argv); server-tools/instance-manager/parse.cc: - get rid of Commands_factory server-tools/instance-manager/parse.h: - get rid of Commands_factory server-tools/instance-manager/parse_output.cc: - in parse_output_and_get_value return error also if the specified pattern was not found, or the command failed to execute. server-tools/instance-manager/portability.h: - fix coding style (// comments are allowed only at ends of lines) server-tools/instance-manager/thread_registry.cc: - implement Thread_registry::cond_timedwait server-tools/instance-manager/thread_registry.h: - implement Thread_registry::cond_timedwait; remove unused out parameter from Thread_registry::cond_wait. server-tools/instance-manager/user_map.cc: - safety: newline can take 2 bytes.
2005-08-29 23:29:35 +04:00
An internal method which is called at shutdown to unregister instances and
attempt to stop them if requested.
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
Replace the approach using Foo_thread_args + Foo_thread and manually spawned threads with a reusable class Thread. This is the second idea implemented in the Alik's patch for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned. Commiting separately to ease review process. server-tools/instance-manager/commands.cc: Remove an unused header. server-tools/instance-manager/guardian.cc: Use Thread framework instead of manually spawning the Guardian thread. Tidy up. server-tools/instance-manager/guardian.h: Use Thread framework instead of manually spawning the Guardian thread. server-tools/instance-manager/instance.cc: Use Thread framework instead of manually spawning the instance monitoring thread. server-tools/instance-manager/listener.cc: Use Thread framework instead of manually spawning the mysql connection thread. server-tools/instance-manager/listener.h: Use Thread framework instead of manually spawning the mysql connection thread. Rename Listener_thread to Listener for brevity. server-tools/instance-manager/manager.cc: Change references to pointers, as per the coding style. Use Thread framework instead of manually spawning threads. server-tools/instance-manager/mysql_connection.cc: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/mysql_connection.h: Get rid of Mysql_connection_thread_args. Use class Thread framework instead. Rename Mysql_connection_thread to Mysql_connection for brevity. server-tools/instance-manager/priv.cc: Move set_stacksize_and_create_thread to thread_registry.cc and make it static: it is not used anywhere else now. server-tools/instance-manager/priv.h: No public set_stacksize_n_create_thread server-tools/instance-manager/thread_registry.cc: Implement a base Thread class to be used for all Instance Manager threads. server-tools/instance-manager/thread_registry.h: Implement a base Thread class to be used for all Instance Manager threads.
2006-11-17 16:11:04 +03:00
SYNOPSIS
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
stop_instances()
DESCRIPTION
Loops through the guarded_instances list and prepares them for shutdown.
For each instance we issue a stop command and change the state
accordingly.
Cleanup the instance manager code. BitKeeper/deleted/.del-factory.h~c1679505d3a6dd53: Delete: server-tools/instance-manager/factory.h BitKeeper/deleted/.del-factory.cc~6836cccd4cd35b4d: Delete: server-tools/instance-manager/factory.cc server-tools/instance-manager/Makefile.am: - remove Commands_factory: it'll be needed when we add support for NNTP/HTTP connections, currently it only adds unnecessary complexity. server-tools/instance-manager/commands.cc: - fix coding style: no else after return; fix comments, make one place a bit faster. server-tools/instance-manager/guardian.cc: - fix coding style and comments. - we must register the current thread in the thread registry before entering pthread_cond_timedwait, because at shutdown the thread registry will try to kick out of wait all blocked threads. Unregistered threads are not awakened by the registry. This fixes the failinig assert in Thread_registry::~Thread_registry at shutdown, when shutdown is requested and there is an instance monitored by Guardian. server-tools/instance-manager/guardian.h: - fix coding style: enums must start with enum_ server-tools/instance-manager/instance.h: - move comment to the variable it comments server-tools/instance-manager/instance_map.cc: - cleanup server-tools/instance-manager/instance_options.cc: - cleanup; no else after return (fix coding style). server-tools/instance-manager/manager.cc: - fix alignment; make some code easier to read. server-tools/instance-manager/mysql_connection.cc: - remove Commands_factory server-tools/instance-manager/options.cc: - fix a possible crash when the instance manager is started with --no-defaults --defaults-file=~/.my.cnf: if we return without cloning saved_argv by calling load_defaults, Options::cleanup will crash on attempt to free_defaults(saved_argv); server-tools/instance-manager/parse.cc: - get rid of Commands_factory server-tools/instance-manager/parse.h: - get rid of Commands_factory server-tools/instance-manager/parse_output.cc: - in parse_output_and_get_value return error also if the specified pattern was not found, or the command failed to execute. server-tools/instance-manager/portability.h: - fix coding style (// comments are allowed only at ends of lines) server-tools/instance-manager/thread_registry.cc: - implement Thread_registry::cond_timedwait server-tools/instance-manager/thread_registry.h: - implement Thread_registry::cond_timedwait; remove unused out parameter from Thread_registry::cond_wait. server-tools/instance-manager/user_map.cc: - safety: newline can take 2 bytes.
2005-08-29 23:29:35 +04:00
NOTE
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Guardian object should be locked by the caller.
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
*/
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
void Guardian::stop_instances()
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
Instance_map::Iterator instances_it(instance_map);
Instance *instance;
instance_map->lock();
while ((instance= instances_it.next()))
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->lock();
if (!instance->is_guarded() ||
instance->get_state() == Instance::STOPPED)
{
instance->unlock();
continue;
}
/*
If instance is running or was running (and now probably hanging),
request stop.
*/
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
if (instance->is_mysqld_running() ||
instance->get_state() == Instance::STARTED)
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
{
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance->set_state(Instance::STOPPING);
instance->last_checked= time(NULL);
Post-review fixes + some bugs fixed + several minor features BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29: Delete: server-tools/instance-manager/client_func.c server-tools/instance-manager/Makefile.am: clien_func removed server-tools/instance-manager/buffer.cc: several methods added server-tools/instance-manager/buffer.h: Some error-handling fixes. server-tools/instance-manager/commands.cc: check for Buffer errors server-tools/instance-manager/guardian.cc: Guardian rewiriten. Not it works in a finite state machine-way. server-tools/instance-manager/guardian.h: Appropriate (to .cc) changes in the header + some comment added server-tools/instance-manager/instance.cc: added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which only sends a signal server-tools/instance-manager/instance.h: appropriate changes server-tools/instance-manager/instance_map.cc: cleanup server-tools/instance-manager/instance_map.h: cleanup server-tools/instance-manager/instance_options.cc: Caching of the pid-file-name is added. some comments added server-tools/instance-manager/instance_options.h: cleanup server-tools/instance-manager/listener.cc: listener my_thread_init added (though it doesn't use any mysys functions). Just in case server-tools/instance-manager/manager.cc: SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely with LinuxThreads server-tools/instance-manager/options.cc: added option to create a password file entry (this was implemented by Sergei Vojtovich) server-tools/instance-manager/parse.cc: inline function get_word moved to the header server-tools/instance-manager/parse.h: get_word moved here to use form parse_output server-tools/instance-manager/parse_output.cc: get_word() clone removed. now looking through the output linewise server-tools/instance-manager/protocol.cc: Buffer error chech added server-tools/instance-manager/user_map.cc: typo fixed
2005-02-11 14:21:59 +03:00
}
else
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
{
/* Otherwise mark it as STOPPED. */
instance->set_state(Instance::STOPPED);
}
/* Request mysqld to stop. */
instance->kill_mysqld(SIGTERM);
instance->unlock();
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
instance_map->unlock();
more fixes for IM to substitude mysqld_safe in startup scripts BitKeeper/deleted/.del-thread_repository.cc~bba09f64f8cb4037: Delete: server-tools/instance-manager/thread_repository.cc BitKeeper/deleted/.del-thread_repository.h~e6a3b9cab7a6612a: Delete: server-tools/instance-manager/thread_repository.h server-tools/instance-manager/commands.cc: All instances are guarded by default now, so we need to perform check on whether the instance is nonguarded, rather then guarded when adding it to the list of guarded instnces. server-tools/instance-manager/guardian.cc: Guardian rewritten to start instances by default, and shut them down, when exiting. Behaviour of the guardian in case of the instance crash has changed. Now it tries to restart an instance constantly in the first 2 seconds after the crash was noticed, and then it tries restart an instance once in the MONITORING_INTERVAL. If it failed to restart instance for "restart_retry" (compiled-in value) times, guardian stops trying to restart it. server-tools/instance-manager/guardian.h: Several new functions and variables declared. server-tools/instance-manager/instance.cc: now start doesn't call stop(), but rather tries to remove the pidfile itself server-tools/instance-manager/instance.h: cleanup server-tools/instance-manager/instance_map.cc: no more "admin" options server-tools/instance-manager/instance_map.h: User and password purged from instance_map options, as IM shouldn't know them server-tools/instance-manager/instance_options.cc: new option added -- shutdown_delay, guarded option now called nonguaded and has the opposite meaning server-tools/instance-manager/instance_options.h: appropriate changes, reflecting options addition/removal server-tools/instance-manager/manager.cc: shutdown process is complicated a bit -- at first signal thread should stop guardian, and only then the IM itself server-tools/instance-manager/messages.cc: update error message server-tools/instance-manager/options.cc: admin user/password purged from mysqlmanager options
2005-01-31 23:54:08 +03:00
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Lock Guardian.
*/
Cleanup: manually port the polishing parts from Alik's changeset for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned mysql-test/t/im_options.imtest: Update test for new framework. server-tools/instance-manager/IMService.cpp: Use Manager class instead of manager(). Reformat comments. server-tools/instance-manager/Makefile.am: Treat warnings as errors. server-tools/instance-manager/command.cc: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/command.h: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/commands.cc: Remove Instance_map argument from command constructors. server-tools/instance-manager/commands.h: Remove Instance_map argument from command constructors. server-tools/instance-manager/guardian.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/guardian.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/instance_map.cc: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/instance_map.h: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/manager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/manager.h: Transfer manager() function into Manager class (singleton). server-tools/instance-manager/mysql_connection.cc: Polishing. server-tools/instance-manager/mysqlmanager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/parse.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/parse.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/priv.cc: Move create_pid_file() out of manager.cc. server-tools/instance-manager/priv.h: Move create_pid_file() out of manager.cc. server-tools/instance-manager/thread_registry.h: Prevent copying. server-tools/instance-manager/user_map.cc: Fix alignment.
2006-11-16 23:36:20 +03:00
void Guardian::lock()
{
This is an implementation of two WL items: - WL#3158: IM: Instance configuration extensions; - WL#3159: IM: --bootstrap and --start-default-instance modes The following new statements have been added: - CREATE INSTANCE; - DROP INSTANCE; The behaviour of the following statements have been changed: - SET; - UNSET; - FLUSH INSTANCES; - SHOW INSTANCES; - SHOW INSTANCE OPTIONS; BitKeeper/deleted/.del-im_options_set.imtest~b53d9d60e5684833: Delete: mysql-test/t/im_options_set.imtest BitKeeper/deleted/.del-im_options_set.result~59278f56be61d921: Delete: mysql-test/r/im_options_set.result BitKeeper/deleted/.del-im_options_unset.imtest~768eb186b51d0048: Delete: mysql-test/t/im_options_unset.imtest BitKeeper/deleted/.del-im_options_unset.result~20a4790cd3c70a4f: Delete: mysql-test/r/im_options_unset.result client/get_password.c: Change prototype to avoid casting when using C-strings (char *). include/m_string.h: Moved LEX_STRING to global header from sql/ to be accessible from all components (IM for one). include/my_sys.h: Added constants for modify_defaults_file(). include/mysql_com.h: Removed duplicated declarations. my_sys.h should be used instead. libmysql/get_password.c: Change prototype to avoid casting when using C-strings (char *). mysql-test/mysql-test-run.pl: Added environment variables to be used from tests. mysql-test/r/im_daemon_life_cycle.result: Column name has been changed in SHOW INSTANCES. mysql-test/r/im_life_cycle.result: 1. Column name has been changed in SHOW INSTANCES. 2. Removed redundant SHOW INSTANCE STATUS statements. mysql-test/r/im_utils.result: Updated the result file. mysql-test/t/im_daemon_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_daemon_life_cycle.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysql-test/t/im_life_cycle.imtest: 1. Polishing; 2. Fixed a test error in 1.1.2. mysql-test/t/im_utils.imtest: Get Instance Manager and managed mysqld-instances enough time to start. mysys/default.c: Pass the name of the section to the handler function as well. mysys/default_modify.c: Added REMOVE_SECTION functionality. server-tools/instance-manager/IMService.cpp: Polishing: be more verbose. server-tools/instance-manager/IMService.h: Polishing: added copyright. server-tools/instance-manager/Makefile.am: Added new files. server-tools/instance-manager/WindowsService.cpp: Polishing: according to The Coding Style, TRUE/FALSE must be used instead of true/false. server-tools/instance-manager/WindowsService.h: Polishing: added copyright. server-tools/instance-manager/command.h: Polishing: provide a comment for the main operation of "Command" class. server-tools/instance-manager/commands.cc: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/commands.h: 1. Added support for CREATE INSTANCE, DROP INSTANCE statements; 2. Added "deprecated" column in output of SHOW INSTANCE OPTIONS; 3. Modified the behaviour of SET/UNSET, FLUSH INSTANCES statements; server-tools/instance-manager/guardian.cc: Added operations to retrieve state of managed instances. server-tools/instance-manager/guardian.h: Added operations to retrieve state of managed instances. server-tools/instance-manager/instance.cc: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance.h: 1. Provided an operation to check validity of instance name. 2. Added an attribute to distiguish mysqld-instances, whose configuration should be kept backward-compatible. server-tools/instance-manager/instance_map.cc: 1. Used the operation to check validity of instance name; 2. Added operations to manage instances. server-tools/instance-manager/instance_map.h: Added operations to manage instances. server-tools/instance-manager/instance_options.cc: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/instance_options.h: Changed Instance_options so that it will be possible to manage options on the fly. server-tools/instance-manager/listener.cc: 1. Remove reference to the instance of Options; 2. Use new Options naming scheme. server-tools/instance-manager/listener.h: Remove reference to the instance of Options; server-tools/instance-manager/log.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/manager.cc: Added a common for IM operation to work with configuration file. server-tools/instance-manager/manager.h: Added a common for IM operation to work with configuration file. server-tools/instance-manager/messages.cc: Added messages for new errors. server-tools/instance-manager/mysql_connection.cc: 1. Move a constant to common place. 2. Polishing. server-tools/instance-manager/mysql_manager_error.h: Added new errors. server-tools/instance-manager/mysqlmanager.cc: 1. Use error code from Options::load(); 2. Eliminate type-casting warning on Windows. server-tools/instance-manager/options.cc: Added support for user-management command-line options. server-tools/instance-manager/options.h: Added support for user-management command-line options. server-tools/instance-manager/parse.cc: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse.h: 1. Added support of new statements: - CREATE INSTANCE; - DROP INSTANCE. 2. Modified SET/UNSET. server-tools/instance-manager/parse_output.cc: Sorted out header files. server-tools/instance-manager/parse_output.h: Sorted out header files. server-tools/instance-manager/portability.h: 1. Added constants for Windows. 2. Moved system-dependent defines from instance_options.cc. server-tools/instance-manager/priv.cc: Updated version. server-tools/instance-manager/priv.h: Added some global constants. server-tools/instance-manager/protocol.cc: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/protocol.h: Replaced NAME_WITH_LENGTH by LEX_STRING. server-tools/instance-manager/thread_registry.cc: Polishing: use TRUE/FALSE instead of true/false. server-tools/instance-manager/user_map.cc: Added support for managing password database. server-tools/instance-manager/user_map.h: Added support for managing password database. sql/sp.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/sp_head.cc: Replaced LEX_STRING_WITH_INIT by LEX_STRING + struct initialization. sql/spatial.cc: Removed LEX_STRING_WITH_INIT. sql/spatial.h: Removed LEX_STRING_WITH_INIT. sql/sql_string.h: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/sql_trigger.cc: Moved STRING_WITH_LEN() macro out from sql (to m_string.h). sql/structs.h: Removed LEX_STRING_WITH_INIT. support-files/mysql.server.sh: Instruct Instance Manager to work in mysqld-safe compatible mode for backward compatibility. mysql-test/r/im_cmd_line.result: Added result file. mysql-test/r/im_instance_conf.result: Added result file. mysql-test/r/im_options.result: Added result file. mysql-test/t/im_cmd_line.imtest: IM command-line options test. mysql-test/t/im_instance_conf-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_instance_conf.imtest: Added a new test case for checking instance-management. mysql-test/t/im_life_cycle-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. mysql-test/t/im_options.imtest: Join im_options_set and im_options_unset and add new tests. mysql-test/t/im_utils-im.opt: Set minimal monitoring interval for Instance Manager to speed up testing. server-tools/instance-manager/exit_codes.h: New file for defining exit codes for user-management mode. server-tools/instance-manager/user_management_commands.cc: User-management commands implementation. server-tools/instance-manager/user_management_commands.h: User-management command declarations.
2006-05-18 18:57:50 +04:00
pthread_mutex_lock(&LOCK_guardian);
}
Fix for the following bugs: - BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
2006-11-30 12:23:55 +03:00
/**
Unlock Guardian.
*/
Cleanup: manually port the polishing parts from Alik's changeset for BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned mysql-test/t/im_options.imtest: Update test for new framework. server-tools/instance-manager/IMService.cpp: Use Manager class instead of manager(). Reformat comments. server-tools/instance-manager/Makefile.am: Treat warnings as errors. server-tools/instance-manager/command.cc: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/command.h: Store references to Guardian_thread and Instance_map in Command attributes. server-tools/instance-manager/commands.cc: Remove Instance_map argument from command constructors. server-tools/instance-manager/commands.h: Remove Instance_map argument from command constructors. server-tools/instance-manager/guardian.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/guardian.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/instance_map.cc: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/instance_map.h: Rename: Guardian_thread -> Guardian. server-tools/instance-manager/manager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/manager.h: Transfer manager() function into Manager class (singleton). server-tools/instance-manager/mysql_connection.cc: Polishing. server-tools/instance-manager/mysqlmanager.cc: Use Manager class instead of manager() function. server-tools/instance-manager/parse.cc: Rename: Guardian_thread -> Guardian server-tools/instance-manager/parse.h: Rename: Guardian_thread -> Guardian server-tools/instance-manager/priv.cc: Move create_pid_file() out of manager.cc. server-tools/instance-manager/priv.h: Move create_pid_file() out of manager.cc. server-tools/instance-manager/thread_registry.h: Prevent copying. server-tools/instance-manager/user_map.cc: Fix alignment.
2006-11-16 23:36:20 +03:00
void Guardian::unlock()
{
initial import of Windows port of IM. server-tools/instance-manager/commands.cc: type cleanups for compiling on Windows now using Options::config_file for the location of the single my.cnf file we are using server-tools/instance-manager/guardian.cc: pthread_mutex_lock and unlock do not return a value on Windows so we return 0 in all cases server-tools/instance-manager/instance.cc: big changes here. Had to implement Windows versions of launch_and_wait and kill() server-tools/instance-manager/instance.h: added some function defs server-tools/instance-manager/instance_map.cc: pthread_mutex_lock and unlock do not return a value on Windows Also, now using only the file named as Options::config_file server-tools/instance-manager/instance_options.h: added reference to port.h server-tools/instance-manager/listener.cc: reworked and simplified the socket handling code. Added windows versions of the code that sets the sockets to be non-blocking and non-inheritable server-tools/instance-manager/listener.h: change Options to always be a struct. Really surprised GCC was letting this go. Options was declared to be struct in some places and class in other places. server-tools/instance-manager/log.cc: added reference to port.h server-tools/instance-manager/manager.cc: moved all the signal code inside some #ifndef __WIN__ blocks server-tools/instance-manager/manager.h: change Options to always be a struct. Really surprised GCC was letting this go. Options was declared to be struct in some places and class in other places. server-tools/instance-manager/mysqlmanager.cc: added in the Windows service code. server-tools/instance-manager/options.cc: Added in the windows options for running as a service and the code for loading settings only from a single file server-tools/instance-manager/options.h: added definitions for the new Windows service vars and routines server-tools/instance-manager/parse_output.cc: added reference to port.h server-tools/instance-manager/priv.cc: added reference to port.h server-tools/instance-manager/priv.h: linuxthreads should not be visible on Windows server-tools/instance-manager/thread_registry.cc: more __WIN__ blocking server-tools/instance-manager/user_map.cc: fixed passwd file code to handle files with \r\n line endings server-tools/instance-manager/IMService.cpp: New BitKeeper file ``server-tools/instance-manager/IMService.cpp'' server-tools/instance-manager/IMService.h: New BitKeeper file ``server-tools/instance-manager/IMService.h'' server-tools/instance-manager/WindowsService.cpp: New BitKeeper file ``server-tools/instance-manager/WindowsService.cpp'' server-tools/instance-manager/WindowsService.h: New BitKeeper file ``server-tools/instance-manager/WindowsService.h'' server-tools/instance-manager/mysqlmanager.vcproj: New BitKeeper file ``server-tools/instance-manager/mysqlmanager.vcproj'' server-tools/instance-manager/port.h: New BitKeeper file ``server-tools/instance-manager/port.h''
2005-07-20 10:55:40 -05:00
pthread_mutex_unlock(&LOCK_guardian);
}