tests fail on FreeBSD.
The patch contains of the following:
- make Instance Manager, running in the daemon mode, dump
the pid of angel-process in the special file;
- default value of angel-pid-file-name is 'mysqlmanager.angel.pid';
- if ordinary (IM) pid-file-name is specified in the configuration,
angel-pid-file-name is updated according to the following
rule: extension of the basename of pid-file-name is replaced by
'.angel.pid.
For example:
- pid-file-name: /tmp/im.pid
=> angel-pid-file-name: /tmp/im.angel.pid
- pid-file-name: /tmp/im.txt
=> angel-pid-file-name: /tmp/im.angel.pid
- pid-file-name: /tmp/5.0/im
=> angel-pid-file-name: /tmp/5.0/im.angel.pid
- add support for configuration option to customize angel
pid file name;
- fix test suite to use angel pid to kill Instance Manager
by all means if something went wrong.
Background
----------
The problem is that on some OSes (FreeBSD for one) Instance
Manager does not get SIGTERM, so can not shutdown gracefully.
Test suite wasn't able to cope with it, so this leads to the
mess in test results.
The problem should be split into two:
- fix signal handling;
- fix test suite.
This patch fixes test suite so that it will be able to kill
uncooperative Instance Manager. In order to achieve this,
test suite needs to know PID of IM Angel process.
mysql-test/lib/mtr_process.pl:
Added a function to send a signal to a process.
mysql-test/mysql-test-run.pl:
Changed procedure of stopping Instance Manager.
1. Try to stop IM normally (by sending SIGTERM);
2. If one of IM-related processes is still alive,
kill them all by SIGKILL and complain in the log.
server-tools/instance-manager/manager.cc:
Made create_pid_file() available for the whole project.
server-tools/instance-manager/manager.h:
Made create_pid_file() available for the whole project.
server-tools/instance-manager/mysqlmanager.cc:
Dump PID of angel process into file.
server-tools/instance-manager/options.cc:
Added an option to allow to customize angel pid file name.
server-tools/instance-manager/options.h:
Added an option to allow to customize angel pid file name.
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''
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
safe shutdown and signal deliverence to all threads in
the manager process
server-tools/instance-manager/Makefile.am:
added listener.{h,cc} (listener thread)
and thread_repository.{h,cc} -
class to handle threads && signals
server-tools/instance-manager/log.h:
minor fixes
server-tools/instance-manager/manager.cc:
unnecessary error checking was removed
added implementation for signal thread
server-tools/instance-manager/manager.h:
header guards're added
server-tools/instance-manager/mysqlmanager.cc:
unnecessary error checking was removed
server-tools/instance-manager/options.cc:
minor fixes
server-tools/instance-manager/options.h:
removed wrong declaration
logging, options, angel process.
configure.in:
added support for instance-manager directory
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted