Remove race situations that occur when removing pidfiles. Primarily each process should remove its own
pidfile, secondly it should be removed by the process that created it and _only_ if it's
certain the process is dead. Third, mysql-test-run.pl will remove the pidfile when process has been killed.
- Set state of an instance to STARTING _before_ calling instance->start()
- Check that pidfile of instance has been created before changing STARTING => STARTED
- Only remove the pidfile if IM kills an instance with SIGKILL, otherwise the instance will remove it itself
server-tools/instance-manager/guardian.cc:
If state of an instance is STARTING, chech that the instance pidfile has been created
before changing state to STARTED
Set state to STARTING before calling instance->start(), it can take some time
before it is fully started and during that time it should be in state STARTING
server-tools/instance-manager/instance.cc:
Only remove the pid file of instance manager when a SIGKILL has
been performed sucessfully
server-tools/instance-manager/instance_options.cc:
Check that fscanf returns 1 which is the number of args that should be scanned from
the pid file
start instance; kill mysqlmanager; show ...
The problem was that Instance Manager didn't close client
sockets (sockets for client connections) on execing mysqld
instance. So, mysqld-instance inherits these descriptors.
The fix is to set close-on-exec flag for each client socket.
mysql-test/r/im_daemon_life_cycle.result:
Updated result file.
mysql-test/t/im_daemon_life_cycle.imtest:
Test for BUG#12751.
server-tools/instance-manager/listener.cc:
Set close-on-exec flag for each client socket.
CMakeLists.txt:
New BitKeeper file ``CMakeLists.txt''
bdb/CMakeLists.txt:
New BitKeeper file ``bdb/CMakeLists.txt''
client/CMakeLists.txt:
New BitKeeper file ``client/CMakeLists.txt''
dbug/CMakeLists.txt:
New BitKeeper file ``dbug/CMakeLists.txt''
extra/CMakeLists.txt:
New BitKeeper file ``extra/CMakeLists.txt''
extra/yassl/CMakeLists.txt:
New BitKeeper file ``extra/yassl/CMakeLists.txt''
extra/yassl/taocrypt/CMakeLists.txt:
New BitKeeper file ``extra/yassl/taocrypt/CMakeLists.txt''
heap/CMakeLists.txt:
New BitKeeper file ``heap/CMakeLists.txt''
innobase/CMakeLists.txt:
New BitKeeper file ``innobase/CMakeLists.txt''
libmysql/CMakeLists.txt:
New BitKeeper file ``libmysql/CMakeLists.txt''
myisam/CMakeLists.txt:
New BitKeeper file ``myisam/CMakeLists.txt''
myisammrg/CMakeLists.txt:
New BitKeeper file ``myisammrg/CMakeLists.txt''
mysys/CMakeLists.txt:
New BitKeeper file ``mysys/CMakeLists.txt''
regex/CMakeLists.txt:
New BitKeeper file ``regex/CMakeLists.txt''
server-tools/CMakeLists.txt:
New BitKeeper file ``server-tools/CMakeLists.txt''
server-tools/instance-manager/CMakeLists.txt:
New BitKeeper file ``server-tools/instance-manager/CMakeLists.txt''
sql/CMakeLists.txt:
New BitKeeper file ``sql/CMakeLists.txt''
sql/examples/CMakeLists.txt:
New BitKeeper file ``sql/examples/CMakeLists.txt''
strings/CMakeLists.txt:
New BitKeeper file ``strings/CMakeLists.txt''
tests/CMakeLists.txt:
New BitKeeper file ``tests/CMakeLists.txt''
vio/CMakeLists.txt:
New BitKeeper file ``vio/CMakeLists.txt''
win/Makefile.am:
New BitKeeper file ``win/Makefile.am''
win/README:
New BitKeeper file ``win/README''
win/build-vs71.bat:
New BitKeeper file ``win/build-vs71.bat''
win/build-vs8.bat:
New BitKeeper file ``win/build-vs8.bat''
win/build-vs8_x64.bat:
New BitKeeper file ``win/build-vs8_x64.bat''
win/configure.js:
New BitKeeper file ``win/configure.js''
zlib/CMakeLists.txt:
New BitKeeper file ``zlib/CMakeLists.txt''
into zippy.cornsilk.net:/home/cmiller/work/mysql/merge/mysql-5.0
mysql-test/r/grant.result:
Auto merged
mysql-test/t/grant.test:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
Place mysqlmanager 'pdb' file in 'client_debug' directory
mysys.vcproj:
Removed define of __NT__ from 'Debug' target
mysqld.vcproj:
Always generate 'pdb' and 'map' files
server-tools/instance-manager/mysqlmanager.vcproj:
Place mysqlmanager 'pdb' file in 'client_debug' directory
VC++Files/mysys/mysys.vcproj:
Removed define of __NT__ from 'Debug' target
VC++Files/sql/mysqld.vcproj:
Always generate 'pdb' and 'map' files
The instance manager was not actually checking whether an instance
was actually running before trying to stop it. Now it checks first.
mysql-test/r/im_life_cycle.result:
Add new results
mysql-test/t/im_life_cycle.imtest:
Add new regression test
server-tools/instance-manager/instance.cc:
Fix Instance::stop() to report ER_INSTANCE_IS_NOT_STARTED when that is
the case. Also removed unnecessary goto.
server-tools/instance-manager/messages.cc:
Fix messages with missing spaces
Disable old RPM strip
my_global.h:
Fixed wrong cast, which caused problems with gcc 4.0 and
floats in prepared statements (Bug #19694)
mysqlmanager.vcproj:
Place output files in common release/debug directory
server-tools/instance-manager/mysqlmanager.vcproj:
Place output files in common release/debug directory
include/my_global.h:
Fixed wrong cast, which caused problems with gcc 4.0 and
floats in prepared statements (Bug #19694)
support-files/mysql.spec.sh:
Disable old RPM strip
The problem was a call to convert_dirname() with a destination buffer
that did not have room for the trailing slash added by that function.
This could cause the instance manager to crash in some cases.
mysys/mf_dirname.c:
Clarify in comments that convert_dirname destination must be larger than
source to accomodate a trailing slash.
server-tools/instance-manager/instance_options.cc:
Fix buffer overrun.
server-tools/instance-manager/guardian.cc:
Removed erroneous unlock() in Guardian_thread::init():
instance_map is unlocked in the caller.
server-tools/instance-manager/instance_map.cc:
Added TODO comment.
server-tools/instance-manager/manager.cc:
Make initialization of alarm infrustructure before starting Guardian
thread, because Guardian uses thr_alarm().
- Include prefix files that renames all public functions in yaSSLs
OpenSSL API to ya<function_name>. They will otherwise conflict
with OpenSSL functions if loaded by an application that uses OpenSSL
as well as libmysqlclient with yaSSL support.
client/Makefile.am:
Remove $yassl_includes
...and one "suspicious line"
config/ac-macros/yassl.m4:
Remove yassl_includes as they are the same as "normal" include
extra/yassl/include/openssl/crypto.h:
Add include file "prefix_crypto.h" to rename SSL_* functions to yaSSL_*
extra/yassl/include/openssl/ssl.h:
Add include file "prefix_crypto.h" to rename SSL_* functions to yaSSL_*
libmysql/Makefile.am:
Remove yassl_includes
libmysql_r/Makefile.am:
Remove yassl_includes
libmysqld/Makefile.am:
Remove yassl_includes
And one suspicious line
libmysqld/examples/Makefile.am:
Remove yassl_includes
server-tools/instance-manager/Makefile.am:
Remove yassl_includes
sql/Makefile.am:
Remove yassl_includes
tools/Makefile.am:
Add link with yaSSL libs
vio/Makefile.am:
Remove yassl_includes
extra/yassl/include/openssl/generate_prefix_files.pl:
Add utility script to parse the header files to generate the prefix_* files that renames yaSSL SSL_* functions
extra/yassl/include/openssl/prefix_crypto.h:
Add prefix file for crypto.h
extra/yassl/include/openssl/prefix_ssl.h:
Add prefix file for ssl.h
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.
- Add function "mysqld_real_path" which is needed if the mysqld_path is a symlink or a script(like libtool) that executes the real mysqld.
- Add new variable mysqld_real_path
- Use mysqld_real_path from fill_instance_version
server-tools/instance-manager/instance_options.cc:
Add function "mysqld_real_path" which is needed if the mysqld_path is a symlink or a script(like libtool) that executes the real mysqld.
Add new variable mysqld_real_path
Use mysqld_real_path from fill_instance_version
server-tools/instance-manager/instance_options.h:
Add new variable "mysqld_real_path"
duration of the whole 'flush instances'. As a consequence,
it was possible to query instance map, while it is in the
inconsistent state. The patch was reworked after review.
server-tools/instance-manager/guardian.cc:
do not lock instance map in Guardian_thread::init()
server-tools/instance-manager/instance_map.cc:
Eliminate race condition: lock instance map and guardian
for the duration of the whole "FLUSH INSTANCES" execution.
server-tools/instance-manager/instance_map.h:
add new method. cleanup interface. add comments.
server-tools/instance-manager/manager.cc:
use instance_map.flush_instances instead of instance_map.load() and guardian_thread.init()
connections correctly".
Recommit with the max timeout value in sync with the comment.
server-tools/instance-manager/options.cc:
add new option to set wait timeout
server-tools/instance-manager/priv.h:
add a const for max wait timeout
commands accept a list as argument"
mysql-test/r/im_life_cycle.result:
update result file
mysql-test/t/im_life_cycle.imtest:
add a test for the bug
server-tools/instance-manager/parse.cc:
check for nonaplhanumeric symbols at the end of the commands
mysql-test/r/im_life_cycle.result:
correct result
mysql-test/t/im_life_cycle.imtest:
check that wrong command is processed correctly
server-tools/instance-manager/Makefile.am:
always look for passwords in /etc/ on unixes
server-tools/instance-manager/commands.cc:
fix warning
server-tools/instance-manager/instance.cc:
fix monitoring capabilities, when no port was specified
for an instance
server-tools/instance-manager/instance_map.cc:
allow relative paths in --defaults-file option
server-tools/instance-manager/mysqlmanager.cc:
fix windows warning
server-tools/instance-manager/options.cc:
add vars to allow relative paths in --defaults-file option
server-tools/instance-manager/options.h:
add an option
server-tools/instance-manager/parse.cc:
check for get_text_id return value
server-tools/instance-manager/portability.h:
add _snprintf define, move platfrom-independent
ifdefs to priv.h
server-tools/instance-manager/priv.cc:
increase net timeout. it should be equal to mysqld's
server-tools/instance-manager/priv.h:
move platform-independent ifdefs here
myisam/mi_delete.c:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_db.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_show.cc:
Auto merged
test for LONGLONG_MIN in decimal.c
myisam/mi_create.c:
lock THR_LOCK_myisam later
mysys/thr_alarm.c:
remove misplaced comment and "safety" if()
server-tools/instance-manager/instance.cc:
add unlock
strings/decimal.c:
correct the test for LONGLONG_MIN. fix debug sprintf
configure.in:
Removed duplicate "tools/Makefile", and unused AVAILABLE_LANGUAGES_ERRORS
Docs/Makefile.am:
Add generated files to explicitly be removed on "make distclean"
extra/Makefile.am:
Added empty SUBDIRS, else automake 1.6.3 will not
put out code for DIST_SUBDIRS handling
extra/yassl/Makefile.am:
"make distcheck" fails on normal wildcards, seem to work with $(wildcard foo*) type
extra/yassl/src/Makefile.am:
"make distcheck" fails on normal wildcards, seem to work with $(wildcard foo*) type
extra/yassl/taocrypt/src/Makefile.am:
"make distcheck" fails on normal wildcards, seem to work with $(wildcard foo*) type
sql/share/Makefile.am:
Added distclean target for "*/errmsg.sys"
client/Makefile.am:
Put links into current directory, not \$(srcdir)
server-tools/instance-manager/instance_options.cc:
fix for coding guidelines
server-tools/instance-manager/parse_output.cc:
fix for coding guidelines
server-tools/instance-manager/priv.cc:
don't call pthread_attr_setstacksize on Windows
server-tools/instance-manager/priv.h:
include my_pthread so the thread functions will compile on Windows
server-tools/instance-manager/instance_options.cc:
move declaration of end to start of function so gcc is happy
server-tools/instance-manager/parse_output.cc:
remove space before =
use my_isspace to determine if *end is white space
remove comments related to get_word which was removed
replace tab character with appropriate # of spaces
server-tools/instance-manager/instance_options.cc:
fixed to coding guidelines
server-tools/instance-manager/parse_output.cc:
removed tabs
and added call to trim_space
server-tools/instance-manager/instance_options.cc:
small cleanup
-and-
convert mysqld_path to the proper syntax after reading
server-tools/instance-manager/parse_output.cc:
stop using get_word since it stops at spaces. Now we just read the entire line and trim spaces.
server-tools/instance-manager/listener.cc:
every new connection should have sufficient thread stack to
handle all IM commands
server-tools/instance-manager/manager.cc:
change stack size of listener and guardian threads
server-tools/instance-manager/priv.cc:
Add a new function, which is a wrapper around pthread_create to increase the stack size
server-tools/instance-manager/priv.h:
declare new function
into neptunus.(none):/home/msvensson/mysql/mysql-5.0
config/ac-macros/yassl.m4:
Auto merged
configure.in:
Auto merged
libmysqld/Makefile.am:
Auto merged
sql/Makefile.am:
Auto merged
extra/yassl/taocrypt/src/Makefile.am:
Manual merge
server-tools/instance-manager/listener.cc:
reinitialize timer used in select(), as on linux it is modified
to reflect amout of time not slept (e.g. set ot zero)