Commit 6b6ba582 authored by anozdrin/alik@alik's avatar anozdrin/alik@alik

Merge alik.:/mnt/raid/alik/MySQL/devel/5.0-tree

into  alik.:/mnt/raid/alik/MySQL/devel/5.0-rt
parents 4d0430c8 e0670a06
...@@ -31,7 +31,7 @@ sub mtr_im_check_alive ($); ...@@ -31,7 +31,7 @@ sub mtr_im_check_alive ($);
sub mtr_im_check_main_alive ($); sub mtr_im_check_main_alive ($);
sub mtr_im_check_angel_alive ($); sub mtr_im_check_angel_alive ($);
sub mtr_im_check_mysqlds_alive ($); sub mtr_im_check_mysqlds_alive ($);
sub mtr_im_check_mysqld_alive ($$); sub mtr_im_check_mysqld_alive ($);
sub mtr_im_cleanup ($); sub mtr_im_cleanup ($);
sub mtr_im_rm_file ($); sub mtr_im_rm_file ($);
sub mtr_im_errlog ($); sub mtr_im_errlog ($);
...@@ -1282,21 +1282,20 @@ sub mtr_im_check_mysqlds_alive($) { ...@@ -1282,21 +1282,20 @@ sub mtr_im_check_mysqlds_alive($) {
mtr_debug("Checking mysqld[$idx]..."); mtr_debug("Checking mysqld[$idx]...");
return 1 return 1
if mtr_im_check_mysqld_alive($instance_manager, $instances->[$idx]); if mtr_im_check_mysqld_alive($instances->[$idx]);
} }
} }
########################################################################### ###########################################################################
sub mtr_im_check_mysqld_alive($$) { sub mtr_im_check_mysqld_alive($) {
my $instance_manager= shift;
my $mysqld_instance= shift; my $mysqld_instance= shift;
# Check that the process is dead. # Check that the process is dead.
if (defined $instance_manager->{'pid'}) if (defined $mysqld_instance->{'pid'})
{ {
if (kill (0, $instance_manager->{'pid'})) if (kill (0, $mysqld_instance->{'pid'}))
{ {
mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is alive."); mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is alive.");
return 1; return 1;
......
...@@ -8,3 +8,17 @@ mysqld2 offline ...@@ -8,3 +8,17 @@ mysqld2 offline
Killing the process... Killing the process...
Sleeping... Sleeping...
Success: the process was restarted. Success: the process was restarted.
--------------------------------------------------------------------
-- Test for BUG#12751
--------------------------------------------------------------------
START INSTANCE mysqld2;
Success: the process has been started.
Killing the process...
Sleeping...
Success: the process was restarted.
SHOW INSTANCE STATUS mysqld1;
instance_name status version
mysqld1 online VERSION
STOP INSTANCE mysqld2;
Success: the process has been stopped.
...@@ -14,3 +14,47 @@ ...@@ -14,3 +14,47 @@
# process. # process.
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 --exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
###########################################################################
#
# BUG#12751: Instance Manager: client hangs
#
--echo
--echo --------------------------------------------------------------------
--echo -- Test for BUG#12751
--echo --------------------------------------------------------------------
# Give some time to begin accepting connections after restart.
# FIXME: race condition here.
--sleep 3
# 1. Start mysqld;
START INSTANCE mysqld2;
# FIXME: START INSTANCE should be synchronous.
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
# 2. Restart IM-main: kill it and IM-angel will restart it.
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
# 3. Issue some statement -- connection should be re-established.
# Give some time to begin accepting connections after restart.
# FIXME: race condition here.
--sleep 3
--replace_column 3 VERSION
SHOW INSTANCE STATUS mysqld1;
# 4. Stop mysqld2, because it will not be stopped by IM, as it is nonguarded.
# So, if it we do not stop it, it will be stopped by mysql-test-run.pl with
# warning.
STOP INSTANCE mysqld2;
# FIXME: STOP INSTANCE should be synchronous.
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
...@@ -49,7 +49,7 @@ if [ -z "$pid_path" ]; then ...@@ -49,7 +49,7 @@ if [ -z "$pid_path" ]; then
exit 0 exit 0
fi fi
if [ $expected_result = 'killed' -a ! -r "$pid_path" ]; then if [ ! -r "$pid_path" ]; then
echo "Error: PID file ($pid_path) does not exist." echo "Error: PID file ($pid_path) does not exist."
exit 0 exit 0
fi fi
......
...@@ -36,6 +36,27 @@ ...@@ -36,6 +36,27 @@
#include "portability.h" #include "portability.h"
static void set_non_blocking(int socket)
{
#ifndef __WIN__
int flags= fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, flags | O_NONBLOCK);
#else
u_long arg= 1;
ioctlsocket(socket, FIONBIO, &arg);
#endif
}
static void set_no_inherit(int socket)
{
#ifndef __WIN__
int flags= fcntl(socket, F_GETFD, 0);
fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
#endif
}
/* /*
Listener_thread - incapsulates listening functionality Listener_thread - incapsulates listening functionality
*/ */
...@@ -157,6 +178,8 @@ void Listener_thread::run() ...@@ -157,6 +178,8 @@ void Listener_thread::run()
/* accept may return -1 (failure or spurious wakeup) */ /* accept may return -1 (failure or spurious wakeup) */
if (client_fd >= 0) // connection established if (client_fd >= 0) // connection established
{ {
set_no_inherit(client_fd);
Vio *vio= vio_new(client_fd, socket_index == 0 ? Vio *vio= vio_new(client_fd, socket_index == 0 ?
VIO_TYPE_SOCKET : VIO_TYPE_TCPIP, VIO_TYPE_SOCKET : VIO_TYPE_TCPIP,
socket_index == 0 ? 1 : 0); socket_index == 0 ? 1 : 0);
...@@ -198,25 +221,6 @@ err: ...@@ -198,25 +221,6 @@ err:
return; return;
} }
void set_non_blocking(int socket)
{
#ifndef __WIN__
int flags= fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, flags | O_NONBLOCK);
#else
u_long arg= 1;
ioctlsocket(socket, FIONBIO, &arg);
#endif
}
void set_no_inherit(int socket)
{
#ifndef __WIN__
int flags= fcntl(socket, F_GETFD, 0);
fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
#endif
}
int Listener_thread::create_tcp_socket() int Listener_thread::create_tcp_socket()
{ {
/* value to be set by setsockopt */ /* value to be set by setsockopt */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment